Samba 文件共享配置

安装 Samba,在 smb.conf 中配置匿名只读(guest)共享与用户认证(valid users)共享,用 smbpasswd 设置 Samba 账号密码,用 smbclient 实测 Windows/Linux 客户端访问与上传。含 smb.conf 关键配置、guest/public/valid users、smbpasswd 用户管理、testparm 校检等真实回显

文件共享Samba文件共享2026/09/29

Samba 文件共享配置

目标:在 Ubuntu 服务器上部署 Samba(SMB/CIFS),配置一个匿名可读共享(guest)和一个需用户认证的可写共享(valid users),用 smbclient 模拟 Windows/Linux 客户端访问与上传,实测权限生效。本文在 Ubuntu 22.04(Samba 4.15.13)实测。

环境信息

  • 操作系统:Ubuntu 22.04 LTS
  • Samba:Version 4.15.13-Ubuntu
  • 服务:smbd / nmbd
  • 共享:guest(匿名可读)、secure(用户认证可写)
  • Samba 用户:smbuser(系统用户 + Samba 密码)
  • 配置:/etc/samba/smb.conf

一、安装 Samba

sudo apt-get update
sudo apt-get install -y samba

安装 Version:

smbd --version

回显:

Version 4.15.13-Ubuntu

说明:安装会生成默认 smb.conf 与 smbd/nmbd 服务;Ubuntu 上 policy-rc.d 可能阻止自动启动,后续手动 systemctl start smbd。


二、创建共享目录与 Samba 用户

创建共享目录

sudo mkdir -p /srv/guest /srv/secure
echo "guest-welcome" | sudo tee /srv/guest/welcome.txt >/dev/null
sudo chmod 777 /srv/guest          # 匿名共享需放开
echo "smbuser123" | sudo smbpasswd -s -a smbuser 2>/dev/null

创建 Samba 认证用户

Samba 用户必须是对应系统用户,再设 Samba 密码:

sudo useradd -M -s /bin/false smbuser
echo -e 'smbpass1\nsmbpass1' | sudo smbpasswd -s -a smbuser
sudo chown smbuser:smbuser /srv/secure

验证 Samba 用户:

sudo pdbedit -L

回显:

smbuser:1003:

💡 smbpasswd -a <用户> 在系统账号上设置 Samba 密码;pdbedit -L 列出已授权的 Samba 用户。Samba 密码独立于系统密码。


三、配置 smb.conf

编辑 /etc/samba/smb.conf,追加两个共享:

sudo vi /etc/samba/smb.conf

在 [global] 之后添加:

[guest]
   path = /srv/guest
   browseable = yes
   public = yes
   writable = yes

[secure]
   path = /srv/secure
   browseable = yes
   valid users = smbuser
   writable = yes

配置说明:

键作用
[共享名]客户端看到的共享名称
path实际目录路径
browseable是否在浏览列表可见
public / guest ok是否允许匿名(guest)访问
valid users仅允许指定用户访问(空格分隔多个)
writable是否可写

⚠️ 权限与目录匹配:guest 共享目录需对 guest 可读/可写(chmod 777);valid users 指定的 secure 目录 owner 设为该用户(chown smbuser:smbuser /srv/secure),否则有 Samba 权限也会因文件系统权限而被拒。


四、校验配置并启动

sudo testparm -s        # 语法校验
sudo systemctl start smbd nmbd
sudo systemctl enable smbd nmbd
sudo systemctl status smbd --no-pager -l

testparm -s 解析出的共享片段(确认生效):

[guest]
        guest ok = Yes
        path = /srv/guest
        read only = No
[secure]
        path = /srv/secure
        read only = No
        valid users = smbuser

五、客户端访问测试(smbclient 模拟 Windows/Linux)

在任意客户端安装 samba-client(CentOS:yum install -y samba-client;Ubuntu:apt install -y smbclient)。

1. 列出共享

smbclient -L //<服务器IP> -N

回显:

Sharename       Type      Comment
---------       ----      -------
print$          Disk      Printer Drivers
guest           Disk
secure          Disk
IPC$            IPC       IPC Service

2. 匿名访问 guest 共享

smbclient //<服务器IP>/guest -N -c "ls"

回显:

  welcome.txt    N   14  Tue Sep 29 13:06:41 2026

3. 用户认证访问 secure并上传

smbclient //<服务器IP>/secure -U smbuser%smbpass1 \
  -c "ls; put /etc/hostname secure_upload.txt; ls"

回显(put 成功,列表中新增 secure_upload.txt):

putting file /etc/hostname as \secure_upload.txt (2.9 kb/s)
  secure_upload.txt   A  6  Tue Sep 29 13:06:59 2026

4. 服务端核对上传内容

cat /srv/secure/secure_upload.txt

回显:

web01

关键结论:guest 匿名可浏览、secure 需 smbuser 认证且上传成功,客户端与服务端文件系统互通。Windows 客户端只需在资源管理器地址栏输入 \\<服务器IP>\secure,按提示输入 smbuser 账号密码即可映射访问;Linux 客户端也可 mount -t cifs //IP/secure /mnt -o username=smbuser。


六、验证清单

检查项预期
testparm -s无语法错误,两个共享生效
smbclient -L //IP -N列出 guest/secure
smbclient //IP/guest -N -c ls匿名可浏览
smbclient //IP/secure -U smbuser...认证成功、上传成功
服务端 cat /srv/secure/secure_upload.txt内容与客户端一致

七、常见问题 / 踩坑

  • SMB1 disabled -- no workgroup available:SMBv1 已禁用属正常(安全)。老 Windows(XP)需显式启用 SMB1,不推荐。
  • 匿名共享不能读/写:guest 目录对 guest 文件系统权限不足,chmod 777 /srv/guest。
  • valid users 用户仍被拒/不能写:确认系统用户存在且设置了 Samba 密码(smbpasswd -a),且 path 目录 owner 为用户、权限合适。
  • session setup failed: NT_STATUS_LOGON_FAILURE:用户名密码错误,或未 smbpasswd -a 设置 Samba 密码。
  • Windows 报网络凭据/无法访问:查看 /etc/samba/smb.conf 的 workgroup 与 server signing 是否需放开;Windows 内存缓存旧凭据时用 net use \\IP\secure /delete。

八、卸载或恢复

sudo systemctl stop smbd nmbd
sudo apt-get remove --purge -y samba
sudo userdel -r smbuser

提示:恢复默认配置可 sudo cp /etc/samba/smb.conf.bak /etc/samba/smb.conf && sudo systemctl restart smbd(若已备份)。