windows连不上linux的samba共享,90%是smbd或nmbd未运行、用户不存在:先确认sudo systemctl status smbd nmbd均显示active (running),再检查id username存在且已执行sudo smbpasswd -a username,最后确保共享段含valid users或guest ok+map to guest(后者须在[global]段)并放行137-139/445端口。

Windows连不上Linux的Samba共享,90%不是配置写错了,而是smbd没跑、nmbd被拦、或者用户根本不存在——先查这三样,比反复改smb.conf快得多。
确认smbd和nmbd两个服务都active
只启smbd,Windows可能“看不到”你的机器;只启nmbd,能看见但点不开。必须两个都 running:
-
sudo systemctl status smbd nmbd—— 两者状态都得是active (running) - 如果
nmbd显示inactive,补上:sudo systemctl enable --now nmbd - Debian/Ubuntu装包时容易漏掉
nmbd依赖,确保装了完整套:sudo apt install samba samba-common-bin cifs-utils - RHEL/CentOS系别只装
samba包不够,要:sudo dnf install samba samba-client samba-common
smbpasswd用户必须对应真实系统用户
Windows输对密码仍提示“用户名或密码错误”,大概率是smbpasswd -a username用的username在/etc/passwd里压根不存在。
- 先检查用户是否存在:
id username,无输出就说明没这个系统用户 - 安全做法是建个无登录权限的专用用户:
sudo useradd -s /sbin/nologin smbuser - 再加进Samba库:
sudo smbpasswd -a smbuser(输两次密码) - 验证是否成功:
sudo pdbedit -L应该列出smbuser - 别用
root或禁用shell的用户(如nobody),除非你明确配了guest account = nobody
共享段必须写valid users或配guest ok+map to guest
哪怕目录权限全开、服务全跑着,共享段里没写访问控制,Windows就是连不上——这不是bug,是Samba默认拒绝所有未明确定义的访问。
- 推荐生产用法(需账号):
valid users = smbuserbrowseable = yeswritable = yes - 测试用法(免密):
guest ok = yesmap to guest = bad userpublic = yes
(注意:map to guest必须写在[global]段,不是共享段) - 路径
path = /srv/share对应的目录,系统权限也得匹配:sudo chown -R smbuser:smbuser /srv/share+sudo chmod 2770 /srv/share
防火墙和SELinux是静默杀手
Windows报“错误 0x80070035”或“找不到网络路径”,八成是端口不通或SELinux拦了读取,而不是配置问题。
- 放行必要端口:
TCP/UDP 137–139(NetBIOS)
TCP 445(SMBv2+)
Ubuntu:sudo ufw allow 137:139/tcp && sudo ufw allow 445/tcp && sudo ufw allow 137:139/udp && sudo ufw allow 445/udp
RHEL/CentOS:sudo firewall-cmd --permanent --add-service=samba+sudo firewall-cmd --reload - SELinux启用时,
/srv/share这类非标准路径默认没samba_share_t上下文:sudo semanage fcontext -a -t samba_share_t "/srv/share(/.*)?"sudo restorecon -Rv /srv/share - 临时关SELinux验证是否是它导致的:
sudo setenforce 0(仅调试,别留着)
最易忽略的是nmbd和map to guest这两项:前者决定Windows能不能在“网络”里看到你的机器名,后者决定输错密码时是直接拒之门外还是悄悄降级为访客——不显式配,就只能靠猜错误原因。











