samba共享配置失败主因是权限、selinux、防火墙、用户映射四层遗漏:selinux需打标签,防火墙要放行137–139/445端口,用户须用smbpasswd注册,目录权限需匹配linux+selinux+smb.conf三重控制。

配置失败不是因为 smb.conf 写错了,而是权限、SELinux、防火墙、用户映射这四层里漏掉一层——Windows 就连不上,输密码也报“找不到网络路径”或“拒绝访问”。
为什么 Windows 输入 \192.168.x.x 后弹出登录框却进不去
这不是配置语法问题,是底层拦截了。先确认三件事:
-
systemctl status smb nmb必须显示 active (running),缺nmb会导致 Windows 搜索不到机器名(但手动输 IP 仍可能通) - SELinux 默认禁止 samba 访问普通目录,哪怕
chmod 777也没用:必须打标签semanage fcontext -a -t samba_share_t "/srv/samba/shared(/.*)?",再执行restorecon -Rv /srv/samba/shared - 防火墙没放行端口:
smbd用139/tcp和445/tcp,nmbd用137/udp和138/udp;firewalld 用户要运行firewall-cmd --permanent --add-service=samba并重载
smb.conf 最小可用配置怎么写才不翻车
别被默认配置文件几百行注释吓住。删掉所有注释和无关段落,只留以下内容(备份原文件!):
[global] workgroup = WORKGROUP security = user map to guest = bad user [shared] path = /srv/samba/shared browseable = yes writable = yes valid users = @sambashare
注意点:
-
path必须是绝对路径,且目录已存在(mkdir -p /srv/samba/shared) -
valid users里的名字必须是已存在的系统用户,且已用smbpasswd -a username注册过 - 现代 Samba(4.11+)默认
security = user,显式写反而可能冲突,但加了也不报错;map to guest = bad user是关键,否则输错账号直接拒绝,连错误提示都不给
共享目录权限到底该怎么设
Samba 实际检查三重控制:Linux 文件权限 + SELinux 上下文 + smb.conf 中的 valid users/write list。实操建议:
- 目录属组设为
sambashare(先groupadd sambashare),再chown root:sambashare /srv/samba/shared - 权限用
chmod 2775(带 SGID),确保新文件自动继承组,避免后续文件变回root:root - 别用
writable = yes+valid users = ...混用:后者只控制读权限,不控制写;真要限制写入,用write list = @sambawriters - 测试时先临时关 SELinux(
setenforce 0)和防火墙(systemctl stop firewalld),确认功能后再逐个开回来
smbpasswd 用户必须对应系统用户
smbpasswd -a username 前,username 必须已是 Linux 系统用户,否则 Windows 输入正确密码也会提示“登录失败”。安全做法是:
- 创建无登录 shell 的用户:
useradd -s /sbin/nologin alice - 加进共享组:
usermod -aG sambashare alice - 再注册 Samba 密码:
smbpasswd -a alice(该命令不校验系统密码,单独设) - 如果要用访客模式,必须同时设
guest ok = yes和map to guest = bad user,且全局段不能有valid users
最容易被忽略的是:Samba 不读取 /etc/passwd,只认自己数据库(/var/lib/samba/private/passdb.tdb 或旧版 /etc/samba/smbpasswd),所以 useradd 和 smbpasswd -a 是两步缺一不可的操作。











