必须先正确配置linux本地文件系统权限,samba才可能正常写入;关键操作包括创建共享目录、添加sambashare组、chgrp赋组、chmod 2775设sgid、usermod加组并smbpasswd设密码,同时smb.conf中避免read only与writable冲突,务必运行testparm验证且检查防火墙、selinux及服务状态。

共享目录权限必须先设对本地文件系统权限
直接配 smb.conf 却无法写入,90% 是因为底层目录权限没放开。Samba 不绕过 Linux 文件权限,它只在已有权限基础上加一层认证控制。
关键操作不是“给 Samba 开权限”,而是让 smbd 进程(通常以 root 或 nobody 身份运行)能读写目标路径:
mkdir -p /srv/samba/shared-
groupadd sambashare(如果组不存在) chgrp sambashare /srv/samba/shared-
chmod 2775 /srv/samba/shared(2是 SGID,确保新文件继承组) -
usermod -aG sambashare alice(把用户加进组,再跑smbpasswd -a alice)
漏掉 chmod 2775 或没设 chgrp,Windows 用户上传文件后会变成 0600,别人根本看不见——这不是 Samba 配错了,是 Linux 权限链断了。
smb.conf 里 writable 和 read only 别同时写反
writable = yes 和 read only = no 功能重复,但优先级不同:read only 是旧式参数,一旦出现,它会覆盖 writable 的值。Windows 显示“拒绝访问”却能浏览,大概率是这里冲突了。
安全写法只留一个:
- 要允许写入 → 写
writable = yes,删掉read only行 - 要禁止写入 → 写
read only = yes,删掉writable行 -
create mask = 0664和directory mask = 0775必须配套设,否则客户端新建的文件权限不对(比如 Windows 默认建出0600)
别信网上抄来的配置模板,检查你实际用的是哪一版 Samba:smbd --version,2.0.x 之后基本都认 writable,但某些旧发行版(如 CentOS 7 自带的 4.9)仍优先看 read only。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
valid users 和 write list 的区别不能混用
valid users = @sambashare 控制谁能“连上这个共享”,而 write list = @writers 是在已连接用户中再筛出谁有写权限——后者不校验密码,只做二次授权。
常见误用场景:
- 想让
alice可读、bob可读写 → 用valid users = alice bob+write list = bob - 想让整个组可连,但只部分人可写 →
valid users = @sambashare+write list = alice bob - 如果只写
write list没写valid users,非列表内用户连都连不上,write list根本不生效
注意:write list 里的用户不需要额外 smbpasswd,只要他们在 valid users 里且密码正确,就自动获得写权。
testparm 一定要跑,防火墙和 SELinux 得手动开
testparm 不是可选项,是上线前必跑命令。它会报出语法错误、路径不存在、参数冲突等真实问题,比如 path = /srv/share 目录实际是 /srv/samba/share,testparm 会直接提示 “Unable to access /srv/share”。
服务起来后还连不上?盯住三处:
- 防火墙:Ubuntu/Debian 用
ufw allow 'Samba',CentOS/RHEL 用firewall-cmd --add-service=samba --permanent && firewall-cmd --reload - SELinux:若启用了 enforcing 模式,
setsebool -P samba_export_all_rw on,再chcon -t samba_share_t /srv/samba/shared - 服务状态:
systemctl status smbd看是否 active,journalctl -u smbd -n 20查具体拒绝原因(比如 “permission denied” 通常指向 SELinux 或本地权限)
最易忽略的是 SELinux 上下文重置——restorecon -Rv /srv/samba/shared 比手动 chcon 更稳妥,尤其在目录被 cp/mv 过之后。










