smbd和nmbd必须同时运行,缺一不可;仅启smbd会导致windows无法在“网络”中发现linux主机,只能通过ip直连。

smbd 和 nmbd 必须同时运行,缺一不可——只启 smbd 会导致 Windows 在“网络”里看不到 Linux 主机,只能靠 \192.168.x.x\share 强行访问。
检查服务是否真在跑
很多人配完就重启服务,却没确认进程是否存活。执行:sudo systemctl status smbd nmbd
两个都必须显示 active (running)。如果 nmbd 是 inactive,补上:sudo systemctl enable --now nmbd
注意:Ubuntu/Debian 的服务名可能是 nmb 而非 nmbd,查一下:systemctl list-unit-files | grep -i nmb
smb.conf 里三个不能少的 global 配置项
Windows 连不上、提示“找不到网络路径”,八成是这三项漏了或写错:
- workgroup = WORKGROUP(大小写不敏感,但建议全大写;必须和 Windows 控制面板 → 网络和共享中心 → 高级共享设置里显示的“工作组”一致)
- security = user(Samba 4.12+ 默认且唯一推荐模式;security = share 已废弃,Win10/11 直接拒绝)
- map to guest = bad user(输错密码时降级为访客,否则弹窗无限重试;配合 guest ok = yes 才生效)
别在等号前后加空格,Samba 会静默忽略整行。
valid users 不写对,Windows 就连得上也打不开
共享段里只写 path 和 writable = yes 没用,valid users 是硬门槛:
- 单用户:valid users = alice(alice 必须是真实系统用户,id alice 能查到)
- 用户组:valid users = @sambashare(先 sudo groupadd sambashare,再 sudo usermod -aG sambashare alice)
还要确保该用户已加入 Samba 密码库:sudo smbpasswd -a alice
验证是否成功:sudo pdbedit -L | grep alice
输出应包含用户名和 UID。
SELinux 和防火墙是隐形拦路虎
Windows 显示“拒绝访问”或空文件夹?不是密码错,很可能是 SELinux 或防火墙卡住:
- 查目录 SELinux 上下文:ls -Z /srv/samba/shared,如果不是 samba_share_t,补:sudo semanage fcontext -a -t samba_share_t "/srv/samba/shared(/.*)?"sudo restorecon -Rv /srv/samba/shared
- 防火墙必须放通四组端口(UDP/TCP 各两组):sudo ufw allow 137/udpsudo ufw allow 138/udpsudo ufw allow 139/tcpsudo ufw allow 445/tcp
只开 445 是常见误操作——没 137/138,Windows 就搜不到你的机器名。
Windows 访问时输 \192.168.x.x\share 前,务必确认 Linux 和 Windows 在同一子网、Windows 开启了“网络发现”、且没启用 IPv6-only 模式;这些看似外围的问题,实际占连不上案例的六成以上。











