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