Linux怎么配置Samba与Windows共享文件夹

作者:袖梨 2026-07-07
Windows连不上Linux的Samba共享,八成是smbd或nmbd未运行、用户不存在或防火墙拦端口;必须确保两服务均active(running)、smbpasswd用户已添加且对应系统用户、global段设workgroup/security/map to guest、共享目录系统权限与Samba权限双重满足,并放行137–139/445端口。

Windows连不上Linux的Samba共享,八成不是配置写错了,而是smbd根本没跑、nmbd被防火墙拦了、或者smbpasswd用户压根没加进系统——这三处漏一个,就白配。

service smbd nmbd 必须同时 active (running)

很多人只启了smbd,却忘了nmbd。Windows“网络”里看不到你的机器名,大概率是nmbd没起来,导致NetBIOS广播失败。

  • 检查两个服务状态:systemctl status smbd nmbd,必须都显示 active (running)
  • 一次性启用并启动:sudo systemctl enable --now smbd nmbd
  • 如果nmbd报错 failed(比如 “Address already in use”),可能是端口 137/138 被占用,先sudo ss -tuln | grep ':13[78]'排查
  • nmbd依赖主机名不含下划线(如nas_v2会失败),用hostname确认,必要时改/etc/hostnamesudo systemctl restart systemd-hostnamed

smb.conf 里 global 段不设这三项,Windows 就认不出你

光写共享段没用。[global]里三个参数缺一不可,否则 Windows 连接时直接报 0x80070035 或“找不到网络路径”。

  • workgroup = WORKGROUP:必须和 Windows 客户端一致(默认就是WORKGROUP,别写成HOME或空格)
  • security = user:这是当前最稳的模式;security = share在 Samba 4.12+ 已废弃,Win10/11 上基本连不上
  • map to guest = bad user:输错密码时不卡死弹窗,而是降级为 guest(配合共享段的guest ok = yes才生效)
  • 顺手加上unixcharset = UTF-8dos charset = CP936,避免中文文件名乱码

valid users 和目录权限必须双重满足

Samba 认证通过 ≠ 能读写目录。系统权限和 Samba 权限是两套逻辑,必须同时放行。

  • valid users = @sambashare:表示只允许sambashare组成员访问;先sudo groupadd sambashare,再把用户加进去:sudo usermod -aG sambashare alice
  • 共享目录属组必须是sambasharesudo chgrp sambashare /srv/samba/shared
  • 权限要带 SGID(保证新建文件继承组):sudo chmod 2775 /srv/samba/shared,不能只写777(不安全且 SELinux 下可能拒绝)
  • 若启用 SELinux,必须打标签:sudo semanage fcontext -a -t samba_share_t "/srv/samba/shared(/.*)?",然后sudo restorecon -Rv /srv/samba/shared

防火墙不放 137–139/445(TCP+UDP),Windows 就是连不上

这不是可选项。Samba 的四个端口被任何一个拦截,都会导致不同症状:

  • UDP 137/138:影响 Windows “网络”里发现 Linux 主机名(nmbd 广播)
  • TCP/UDP 445:影响所有现代 SMBv2/v3 连接(Win10/11 默认只走这个)
  • Ubuntu/Debian:sudo ufw allow 137:139/tcp && sudo ufw allow 445/tcp && sudo ufw allow 137:139/udp && sudo ufw allow 445/udp
  • RHEL/CentOS/Rocky:sudo firewall-cmd --permanent --add-service=samba(比单开四个端口更可靠)
  • 别信“关防火墙试试”——临时关可以验证,但生产环境必须精准放行,否则等于裸奔

最容易被忽略的是nmbd和 UDP 端口的组合问题:服务开着、TCP 445 通了、用户也加了,但 Windows 就是在“网络”里看不到那台 Linux 机器——这时候不用重配smb.conf,先盯住systemctl status nmbdfirewall-cmd --list-ports | grep 137

相关文章

精彩推荐