跳转到内容

SMB 访问被拒绝或反复要密码 ​

适用范围 ​

  • Windows 访问 \\NAS 时反复弹出「输入网络凭据」,或提示登录失败、拒绝访问。
  • macOS 的 Finder 提示连接失败、认证失败。
  • Linux 挂载共享时报 mount error(13): Permission denied。
  • 能登录,但打开某个共享时提示没有权限。

不适用:NAS 或共享根本不出现在网络里,见在网络里看不到共享;已经能进入共享,只是某些文件读写失败,见权限错误:Permission denied。

开始排查前 ​

SMB 访问要过三道关,任何一道都能让你被拒绝:

  1. 账户:用户名和密码要被 Samba 认可。
  2. 共享层的权限:这个共享允许谁连接、谁只读、谁被禁止。
  3. 文件系统层的权限:连进去之后,目录的属主、权限位和 ACL 让不让你读写。

这一页处理前两道,第三道见三层权限:共享权限、ACL 与文件系统权限。排查前先记下:客户端系统和版本、用的用户名、用 IP 还是主机名连接、最近改过什么(用户密码、共享权限、SMB 设置),以及是否点过「应用」。本页只读检查为主,不会改动数据。

排查步骤 ​

1. 确认配置已应用,服务在运行 ​

  1. 页面顶部有黄色的待应用的配置更改提示条,就点上面的应用(Apply)。
  2. 服务 → SMB/CIFS → 设置(Services → SMB/CIFS → Settings)里勾选已启动。
  3. 在 诊断 → 服务 → SMB/CIFS(Diagnostics → Services → SMB/CIFS)里能看到 SMB 的连接状态。如果还有未应用的 Samba 配置,这个页面会提示先应用。
  4. 在 shell 里确认服务:
sh
# 在 OMV 的 shell 里执行(只读)
systemctl status smbd --no-pager

2. 账户: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,务必改回。

确认恢复 ​

  1. 在客户端上用正确的账户连接共享,能列出内容。
  2. 拷一个文件进去,再拷回来,确认内容完整。
  3. 换一个不该有访问权限的账户试一次,应该被拒绝(在共享层或文件系统层都算),说明权限没有配得过宽。
  4. 重启 NAS 后再连一次。
  5. 如果调高过日志级别,确认已经改回无并应用。

仍未解决 ​

附上:客户端的系统版本、报错原文、testparm -s 里这个共享的那一段(遮盖主机名和用户名)、journalctl -u smbd 里相关的几十行。读如何有效求助。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。