samba服务异常通常源于权限、selinux、防火墙或用户映射四层缺失;需确保smbd与nmbd均active,配置精简有效,目录权限、selinux上下文、防火墙及用户映射全部正确对齐。

smbd 启不起来、Windows 看不到机器、连上提示“拒绝访问”——这些问题基本不是配置写少了,而是权限、SELinux、防火墙、用户映射这四层里漏掉一层。
怎么确认 smbd 和 nmbd 都在跑
Samba 要正常被 Windows 发现并访问,必须两个服务都活:
- smbd 处理文件共享(TCP 139/445)
- nmbd 做 NetBIOS 名称广播(UDP 137/138),否则 Windows “网络”里根本看不到你的机器名
检查命令:
sudo systemctl is-active smbd sudo systemctl is-active nmb两者都得返回
active。如果 nmb 是 inactive,别只重启 smb,要一起启:sudo systemctl enable --now smbd nmb
smb.conf 最小可用配置怎么写
别一上来就抄几百行示例。一个能用的共享段,5 行够了,其余全删(先备份原文件!):
[myshare] comment = My Share path = /srv/samba/myshare valid users = alice,bob writable = yes browseable = yes
-
path必须是绝对路径,且目录已存在:sudo mkdir -p /srv/samba/myshare -
valid users里的名字必须是真实存在的系统用户,且已用smbpasswd -a加入 Samba 数据库 - 全局段
[global]里至少要有:workgroup = WORKGROUP(和 Windows 保持一致)、security = user、map to guest = bad user - 现代 Samba(4.11+)默认
security = user,显式写反而可能冲突,但加上更明确
为什么目录权限设了 777 还是打不开
Samba 实际校验三重权限:Linux 文件权限 + SELinux 上下文 +smb.conf 中的 valid users/writable。任意一层卡住,就“拒绝访问”。
实操要点:
- 目录属组设成配置中指定的组,比如
valid users = @sambashare,就得:sudo chgrp sambashare /srv/samba/myshare - 加 SGID 位保证新文件继承组:
sudo chmod 2775 /srv/samba/myshare(那个2很关键) - SELinux 启用时(RHEL/CentOS/Rocky 默认开),必须打标签:
sudo semanage fcontext -a -t samba_share_t "/srv/samba/myshare(/.*)?",再sudo restorecon -Rv /srv/samba/myshare - 别用
root或普通用户直接当属主,容易触发 SELinux 强制策略
Windows 访问时输什么地址、报什么错该查哪
地址栏直接输:\192.168.x.xmyshare(注意是双反斜杠,不是 http:// 或 smb://)
常见错误对应排查点:
- “找不到网络路径”或“错误 0x80070035”:先看
sudo firewall-cmd --list-services | grep samba,没输出就补sudo firewall-cmd --permanent --add-service=samba && sudo firewall-cmd --reload - 弹登录框但输对密码仍拒:运行
sudo pdbedit -L确认用户在 Samba 数据库里;再id alice确认系统用户存在 - 能看到共享名但点不开:重点查 SELinux 标签和目录 SGID 位,这两项漏掉比配置写错更常导致此现象
真正卡住的从来不是语法,而是 Linux 权限、SELinux、防火墙、用户映射这四层里某一层没对齐。每改一项,只验证这一项,别堆着一起调。











