Windows连不上Linux的Samba共享,八成是smbd或nmbd未运行、用户不存在或防火墙拦端口;必须确保两服务均active(running)、smbpasswd用户已添加且对应系统用户、global段设workgroup/security/map to guest、共享目录系统权限与Samba权限双重满足,并放行137–139/445端口。
Windows连不上Linux的Samba共享,八成不是配置写错了,而是smbd根本没跑、nmbd被防火墙拦了、或者smbpasswd用户压根没加进系统——这三处漏一个,就白配。
很多人只启了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/hostname再sudo systemctl restart systemd-hostnamed
光写共享段没用。[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-8和dos charset = CP936,避免中文文件名乱码Samba 认证通过 ≠ 能读写目录。系统权限和 Samba 权限是两套逻辑,必须同时放行。
valid users = @sambashare:表示只允许sambashare组成员访问;先sudo groupadd sambashare,再把用户加进去:sudo usermod -aG sambashare alice
sambashare:sudo chgrp sambashare /srv/samba/shared
sudo chmod 2775 /srv/samba/shared,不能只写777(不安全且 SELinux 下可能拒绝)sudo semanage fcontext -a -t samba_share_t "/srv/samba/shared(/.*)?",然后sudo restorecon -Rv /srv/samba/shared
这不是可选项。Samba 的四个端口被任何一个拦截,都会导致不同症状:
nmbd 广播)sudo ufw allow 137:139/tcp && sudo ufw allow 445/tcp && sudo ufw allow 137:139/udp && sudo ufw allow 445/udp
sudo firewall-cmd --permanent --add-service=samba(比单开四个端口更可靠)最容易被忽略的是nmbd和 UDP 端口的组合问题:服务开着、TCP 445 通了、用户也加了,但 Windows 就是在“网络”里看不到那台 Linux 机器——这时候不用重配smb.conf,先盯住systemctl status nmbd和firewall-cmd --list-ports | grep 137。