根本原因是防火墙未放行NetBIOS/SMB端口或nmbd服务未运行导致名称解析失败;需确认smbd/nmbd均active、防火墙开放137/udp等端口、Windows能nbtstat解析主机名。

为什么 smbd 启动了但 Windows 找不到共享?
根本原因通常是防火墙或 NetBIOS 名称解析没通,不是配置文件写错了。Samba 默认用 netbios-ns(UDP 137)和 smbd(TCP 445)通信,Windows 客户端如果收不到响应,会直接跳过该主机。
- 先确认
systemctl status smbd nmbd两个服务都 active:缺nmbd就没法广播 NetBIOS 名称,局域网内“网上邻居”里压根不会出现服务器名 - 检查防火墙:
sudo ufw status或sudo firewall-cmd --list-ports,必须放行137/udp、138/udp、139/tcp、445/tcp;Ubuntu 默认 ufw 会拦掉全部 UDP,这是最常被忽略的点 - 临时关防火墙测试:
sudo ufw disable,能连上就说明是规则问题,别急着改smb.conf - Windows 端执行
ping server-name和nbtstat -a server-name,后者能返回 MAC 地址才代表 NetBIOS 层通了
valid users 和 write list 到底谁管读、谁管写?
这两个参数不互斥,但作用层级不同:valid users 是第一道门禁,决定谁能“登录这个共享”,而 write list 是第二道权限开关,决定已登录用户里谁还能写。没进第一道门,第二道根本没机会触发。
-
valid users = @sambashare:只允许sambashare组成员认证成功;哪怕用户在系统里存在、密码正确,不在该组也连不上 -
write list = @sambashare:所有通过valid users认证的用户,默认只有读权限;加了这行,组内人才能上传/删改 - 注意:如果共享设了
read only = yes(默认值),write list才生效;设成no就全放开,write list形同虚设 - 别混用
force user:它会让所有操作以指定系统用户身份执行,绕过客户端用户名校验,容易导致 ACL 错乱和日志难追踪
Linux 文件权限和 Samba 共享权限怎么叠加?
Samba 权限是“Linux 文件权限 + Samba 配置项”双重校验,且以更严格者为准。比如文件系统本身是 drwxr-xr-x(组可读可执行),但 Samba 配置里写了 read only = yes,那组用户照样不能写——哪怕他们对目录有 rwx。
- 先看底层:共享路径的属主/属组必须和
valid users匹配。例如共享目录/srv/samba/share属于root:sambashare,那么valid users至少得包含@sambashare或具体用户 -
create mask = 0664控制新建文件权限,directory mask = 0775控制新建目录权限;它们只影响 Samba 创建的文件,不影响 Linux 命令touch或mkdir的结果 - 遇到“能列目录但打不开文件”:大概率是文件本身权限不足(如
-rw-------),Samba 不会自动提升权限,得用chmod改底层 - ACL 比传统权限更灵活:
setfacl -m g:sambashare:rwx /srv/samba/share可绕过属组限制,但需确保文件系统挂载时启用了acl选项(mount | grep acl)
Windows 提示“你没有权限访问 \\server\share”但日志里没报错
这种静默失败往往卡在身份映射环节:Samba 默认尝试把 Windows 用户名映射为同名 Linux 用户,如果该用户不存在,又没配 map to guest 或 username map,就会拒绝连接而不记详细错误。
- 查
/var/log/samba/log.smbd,搜索NT_STATUS_ACCESS_DENIED或NT_STATUS_LOGON_FAILURE,比看 Windows 弹窗靠谱得多 - 确认用户已用
smbpasswd -a username添加(不是useradd!),且密码非空;Samba 使用独立密码数据库,和/etc/shadow无关 - 若想支持匿名访问,必须三步全做:
guest ok = yes+map to guest = bad user+ 共享目录属主设为nobody:nogroup并开放读写权限 - Windows 10/11 默认禁用 SMBv1,但某些旧版 Samba(如 4.3 以前)依赖它协商;升级 Samba 或在 Windows 开启 SMBv1(不推荐)只是权宜之计,真正要改的是 Samba 的
min protocol = SMB2配置
权限叠加逻辑比看上去复杂,尤其当涉及 ACL、umask、force user 和 Windows UAC 多层干预时,单看一个配置项很容易误判。调试优先查日志、关防火墙、验证底层文件权限,比反复改 smb.conf 有效得多。










