外观
SMB 访问被拒绝或反复要密码
适用范围
- Windows 访问
\\NAS时反复弹出「输入网络凭据」,或提示登录失败、拒绝访问。 - macOS 的 Finder 提示连接失败、认证失败。
- Linux 挂载共享时报
mount error(13): Permission denied。 - 能登录,但打开某个共享时提示没有权限。
不适用:NAS 或共享根本不出现在网络里,见在网络里看不到共享;已经能进入共享,只是某些文件读写失败,见权限错误:Permission denied。
开始排查前
SMB 访问要过三道关,任何一道都能让你被拒绝:
- 账户:用户名和密码要被 Samba 认可。
- 共享层的权限:这个共享允许谁连接、谁只读、谁被禁止。
- 文件系统层的权限:连进去之后,目录的属主、权限位和 ACL 让不让你读写。
这一页处理前两道,第三道见三层权限:共享权限、ACL 与文件系统权限。排查前先记下:客户端系统和版本、用的用户名、用 IP 还是主机名连接、最近改过什么(用户密码、共享权限、SMB 设置),以及是否点过「应用」。本页只读检查为主,不会改动数据。
排查步骤
1. 确认配置已应用,服务在运行
- 页面顶部有黄色的待应用的配置更改提示条,就点上面的应用(Apply)。
服务 → SMB/CIFS → 设置(Services → SMB/CIFS → Settings)里勾选已启动。- 在
诊断 → 服务 → SMB/CIFS(Diagnostics → Services → SMB/CIFS)里能看到 SMB 的连接状态。如果还有未应用的 Samba 配置,这个页面会提示先应用。 - 在 shell 里确认服务:
sh
# 在 OMV 的 shell 里执行(只读)
systemctl status smbd --no-pager2. 账户:Samba 有自己的密码库
- 用
用户 → 用户(Users → Users)里创建的普通用户登录,不要用admin。admin是 Web 管理员,OMV 不会把它写进 Samba 的用户库。 - Samba 的密码库与 Linux 的
/etc/shadow是分开的。OMV 在你于界面里创建用户、修改密码时,会同步写入 Samba。在 shell 里用passwd改的密码不会同步,之后 SMB 仍然只认旧密码。遇到这种情况,在用户 → 用户里重新设置一次密码。 - 检查用户是否存在于 Samba 的用户库:
sh
# 在 OMV 的 shell 里执行(只读)
pdbedit -L- 改了用户所属的组之后,也要点应用。OMV 会重启 smbd,让组变化生效。客户端上已经建立的连接要先断开再重连。
3. 共享层的权限
存储器 → 共享文件夹 → 权限(Storage → Shared Folders → Permissions)里的设置,OMV 会翻译成 Samba 的访问名单:
- 给某个用户或组设置了读/写或只读之后,这个共享就只允许名单里的用户和组连接。名单之外的用户会被拒绝,即使他在
users组里。 - 设为禁止读写(No access)的用户或组,被明确拒绝。
- 名单里只设了只读的用户,在这个共享上不能写入,即使共享本身可写。
- 没有为这个共享设置任何权限条目时,名单为空:任何通过认证的用户都能连上,之后由文件系统权限决定能做什么。
在 shell 里可以只读地看到 Samba 实际生效的配置:
sh
# 在 OMV 的 shell 里执行(只读);<共享名> 是共享文件夹的名称
testparm -s 2>/dev/null | sed -n '/^\[<共享名>\]/,/^$/p'关注 valid users、invalid users、read list、write list、hosts allow、hosts deny、guest ok、read only 这几行,看你的用户或组有没有被挡在外面。不要直接修改 smb.conf,它每次应用都会被重写。
4. 共享自身的设置
在 服务 → SMB/CIFS → 共享(Services → SMB/CIFS → Shares)里编辑这个共享:
- 公开(Public):选项是「否」、「允许访客」和「仅访客」。选「仅访客」时无需密码,并以访客身份访问,界面提示要确保访客用户
nobody能访问这些文件。新版 Windows 默认限制不安全的来宾登录,访客共享可能因此连不上。更稳妥的做法是给共享建普通账户,见常见权限方案。 - 只读(Read-only):勾选后所有人都不能写。
- 允许主机、拒绝主机(Hosts allow、Hosts deny):填了地址就只允许或拒绝这些主机,客户端的地址不在允许范围内会被拒绝。
- 传输加密(Transport encryption):开启后强制加密,不支持加密的客户端会被拒绝访问。
全局设置在 服务 → SMB/CIFS → 设置:最低协议版本(Minimum protocol version)默认是 SMB2。界面提示 SMB1 已被弃用,只在必须时使用。很老的设备(旧电视、打印机、旧系统)只支持 SMB1 时会连不上,优先升级设备或换协议,见选哪种共享协议:SMB、NFS、SFTP 与 WebDAV。
5. 客户端的问题
Windows
- 清除缓存的凭据后重连:在命令提示符里运行
net use * /delete会断开所有已映射的网络驱动器,然后用正确的账户重新连接。也可以在「凭据管理器」里删除旧条目。 - Windows 对同一个服务器名只保留一组凭据。想用另一个账户连同一台 NAS,常见做法是换一种写法(用 IP 地址,或用主机名),让 Windows 把它当成不同的服务器。
- 官方排障页提到,Windows 提示密码被拒绝时,可以检查本机的「网络安全:LAN Manager 身份验证级别」这项策略。这条记录写于较早的版本,现在的 Windows 默认通常已经满足要求。
macOS:在 Finder 里选择「前往 → 连接服务器」,输入 smb://<NAS 的 IP>,用 NAS 上的用户登录。旧的认证信息可以在「钥匙串访问」里删除。
Linux:mount error(13) 一般是用户名、密码或协议版本不匹配,挂载时可以显式指定 vers=3.0,并确认客户端装了 cifs-utils。
6. 看服务器日志
默认的 SMB 日志级别是无。想看到认证失败的原因,可以临时在 服务 → SMB/CIFS → 设置 里把日志级别(Log level)调高一档(「最小」或「正常」,名称以界面为准),应用,复现一次问题,再查看日志,用完改回无。每次点应用,Samba 都会重启,已连接的客户端会短暂断开再重连,所以别在有人正在传大文件时操作:
sh
# 在 OMV 的 shell 里执行(只读)
journalctl -u smbd --no-pager -n 100日志里 NT_STATUS_ 开头的状态码指向具体原因,例如 NT_STATUS_NO_SUCH_USER(用户不存在)、NT_STATUS_WRONG_PASSWORD(密码错误)、NT_STATUS_ACCESS_DENIED(权限不足)。不同级别下记录的详细程度可能不一样,没看到想要的信息时再调高一档。日志级别高会让日志膨胀,也会拖慢 SMB,务必改回。
确认恢复
- 在客户端上用正确的账户连接共享,能列出内容。
- 拷一个文件进去,再拷回来,确认内容完整。
- 换一个不该有访问权限的账户试一次,应该被拒绝(在共享层或文件系统层都算),说明权限没有配得过宽。
- 重启 NAS 后再连一次。
- 如果调高过日志级别,确认已经改回无并应用。
仍未解决
附上:客户端的系统版本、报错原文、testparm -s 里这个共享的那一段(遮盖主机名和用户名)、journalctl -u smbd 里相关的几十行。读如何有效求助。
参考资料
- OMV 官方文档:Troubleshooting(Windows 密码被拒绝)
- 本站:SMB/CIFS 共享:Windows 与 macOS 访问、SMB 进阶:回收站、隐藏文件、审计与扩展选项、用户与用户组