Linux Samba 文件共享权限控制

1次阅读

根本原因是linux文件系统权限优先于samba配置,用户必须对共享路径同时具备os级读写权限;create mask和Directory mask仅控制新建文件目录的权限位,不影响已有文件。

Linux Samba 文件共享权限控制

为什么 smb.conf 里设了 read only = no 还是写不了

根本原因不是配置没生效,而是 Linux 文件系统权限压过了 Samba 权限。Samba 不会绕过 stat() 检查,用户必须对共享路径的目录和文件同时具备底层 OS 的读写权限。

  • 检查共享路径的属主和权限:ls -ld /path/to/share,确保 Samba 用户(如 alice)属于该目录的属组,且组有 w 权限;或直接属主就是该用户
  • 若用 valid users = alice,但 alice 在 Linux 中不存在,Samba 会退化为 nobody,此时得让 nobody 有对应目录权限
  • 避免用 force user = root 临时“修复”——这会让所有操作都以 root 身份执行,极不安全,且可能触发 SELinux 拒绝

create maskdirectory mask 到底控制谁的权限

它们只影响 Samba 新建的文件和目录的权限位(即 umask 的反向逻辑),不影响已有文件,也不覆盖 Linux ACL 或默认 umask。

  • create mask = 0664 → 新建文件权限为 -rw-rw-r--(注意:Samba 会自动去掉执行位,除非显式加 force create mode = 0775
  • directory mask = 0775 → 新建目录为 drwxrwxr-x;但若客户端是 windows,它不传执行位,所以实际依赖 force directory mode
  • 常见坑:create mask = 0644 看似合理,但如果客户端用 macos 写入,可能因扩展属性触发额外权限位,导致最终权限变成 0646,建议统一用 0664 + force create mode = 0664

Windows 映射网络驱动器后提示“拒绝访问”,但 smbclient -L 能连上

大概率是认证方式或加密策略不匹配,尤其在较新版本 Windows(10 1809+ / 11)和较老 Samba(

  • Windows 默认禁用 NTLMv1,而旧版 Samba 可能仍尝试协商它;确认 Samba 启用了 NTLMv2:server min protocol = SMB2 或至少 ntlm auth = no
  • 检查是否启用了签名强制:server signing = mandatory 会导致 Windows 客户端因不支持而断连;生产环境建议设为 auto
  • SELinux 开启时,samba_share_t 上下文缺失也会表现为“拒绝访问”,运行 ls -Z /path/to/share,若非 samba_share_t,补上:chcon -t samba_share_t /path/to/share

多人协作共享目录,如何让 A 创建的文件 B 也能编辑

靠 Samba 单独配置做不到,必须结合 Linux 的 setgid 目录 + 统一 GID + 合理 mask。

  • 给共享目录设 setgid:chmod g+s /path/to/share,这样新文件自动继承父目录属组
  • 把所有协作用户加入同一组(如 teamshare),并确保他们登录 shell 的 primary group 是这个组(usermod -g teamshare alice
  • 配置 force group = teamsharecreate mask = 0664directory mask = 0775,再加 force directory mode = 0775 确保目录可写
  • 注意:inherit permissions = yes 对新建文件无效,它只影响子目录从父目录继承 ACL,别指望它解决协作写入问题

真正卡住人的从来不是 smb.conf 里哪行写错了,而是 Linux 权限、SELinux 上下文、Windows 加密策略这三层叠在一起时,错误提示全指向“拒绝访问”,却没人告诉你该看哪一层的日志 —— /var/log/samba/log.smbd 里搜 NT_STATUS_ACCESS_DENIED,再比对 getsebool samba_export_all_rwtestparm -v | grep protocol,才可能定位到那一行被忽略的 force user

text=ZqhQzanResources