Linux Samba 配置与权限管理

3次阅读

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

Linux Samba 配置与权限管理

为什么 smbd 启动了但 Windows 找不到共享?

根本原因通常是防火墙或 NetBIOS 名称解析没通,不是配置文件写错了。Samba 默认用 netbios-ns(UDP 137)和 smbd(TCP 445)通信,Windows 客户端如果收不到响应,会直接跳过该主机。

  • 先确认 systemctl status smbd nmbd 两个服务都 active:缺 nmbd 就没法广播 NetBIOS 名称,局域网内“网上邻居”里压根不会出现服务器名
  • 检查防火墙:sudo ufw statussudo firewall-cmd --list-ports,必须放行 137/udp138/udp139/tcp445/tcpubuntu 默认 ufw 会拦掉全部 UDP,这是最常被忽略的点
  • 临时关防火墙测试:sudo ufw disable,能连上就说明是规则问题,别急着改 smb.conf
  • Windows 端执行 ping server-namenbtstat -a server-name,后者能返回 MAC 地址才代表 NetBIOS 层通了

valid userswrite 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 命令 touchmkdir 的结果
  • 遇到“能列目录但打不开文件”:大概率是文件本身权限不足(如 -rw-------),Samba 不会自动提升权限,得用 chmod 改底层
  • ACL 比传统权限更灵活:setfacl -m g:sambashare:rwx /srv/samba/share 可绕过属组限制,但需确保文件系统挂载时启用了 acl 选项(mount | grep acl

Windows 提示“你没有权限访问 \servershare”但日志里没报错

这种静默失败往往卡在身份映射环节:Samba 默认尝试把 Windows 用户名映射为同名 Linux 用户,如果该用户不存在,又没配 map to guestusername map,就会拒绝连接而不记详细错误。

  • /var/log/samba/log.smbd,搜索 NT_STATUS_ACCESS_DENIEDNT_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 有效得多。

text=ZqhQzanResources