如何诊断NAS SMB登录失败?
我有一个NAS机箱(Noontec N5),我只能通过网络界面进行交互(即没有ssh
)。 这允许我公开SMB服务并添加用户,无论是否有密码。
我可以匿名登录,例如。 使用smbclient -L 10.1.0.25 -UGuest
并且没有密码:
~ • smbclient -L 10.1.0.25 -Uguest Enter guest's password: Anonymous login successful Domain=[R] OS=[R] Server=[R] Sharename Type Comment --------- ---- ------- PUBLIC Disk IPC$ IPC Anonymous login successful Domain=[R] OS=[R] Server=[R] Server Comment --------- ------- Workgroup Master --------- -------
我无法使用密码登录:
~ • smbclient -L 10.1.0.25 -Ujason Enter jason's password: session setup failed: NT_STATUS_LOGON_FAILURE
如果我删除密码并在没有密码的情况下登录(与“访客”登录相同),则使用相同的用户名。
我该如何进一步诊断或修复它?
更新:工作组信息
SUNNYDALE
使用的工作组是SUNNYDALE
:
~ • nmblookup -A 10.1.0.25 | grep GROUP SUNNYDALE - B
将此添加到smbclient
命令没有帮助(它现在也在/etc/samba/smb.conf
):
~ • smbclient -L 10.1.0.25 -W SUNNYDALE -U jason Enter jason's password: session setup failed: NT_STATUS_LOGON_FAILURE
更新:其他操作系统
我找到了一台OS X和Windows XP机器进行测试,它们都能正常连接。 这似乎是smbclient
不知道的一些魔力(这并不打算它不在官方SMB协议中的可能性)。
更新:mount.cifs
我也尝试使用mount.cifs
,手册页中列出的每种不同类型的sec=
选项和vers=
选项都没有成功。
更新:wireshark
我使用Wireshark在Windows XP测试VM和NAS之间捕获数据包。 看起来XP反复尝试各种域名和安全协议的组合,直到有效。 最终(成功)尝试似乎使用SMB
作为域名,使用NTLMSSP
进行身份validation。
但是,使用smbclient
和mount.cifs
尝试这些设置不起作用。
由于问题是关于诊断,而不是最终的解决方案,我将描述我尝试过的让我更接近解决方案的事情(问题中的更新总结了大部分内容)。
在阅读下面的命令输出时,请注意我的NAS名为SUNNYDALE
,域名为SUNNYDALE
。 我的本地用户名,包装盒上的是jason
。 我为此设置了abcd
的测试密码。
Spoiler:这是身份validation方法。
问题是,当从Ubuntu使用NTLM
身份validation时,NAS驱动器似乎只能工作; 大多数实用程序默认使用NTLMv2
或其某些变体。 由于我使用的初始工具没有让我控制这一点,我感到很沮丧。
保持盒子清醒
大多数NAS机箱在一段时间不活动后让驱动器进入睡眠状态。 通常这是一件好事,但在诊断过程中,根据所使用的工具,它可能会导致名称解析或身份validation的虚假错误。
在调试时禁用睡眠时hibernatefunction,或者在浏览器中保持Web界面打开并定期刷新以确保它已启动。 记得在完成后重新启用它!
确保您可以解决它
首先确保您可以解析NAS。 使用nmblookup
:
~ • nmblookup giles 192.168.1.114 giles<00>
如果你没有看到它,你可能需要安装libnss-winbind
包(即使用sudo apt-get install libnss-winbind
)并编辑/etc/nsswitch.conf
。 寻找以hosts:
开头的行hosts:
并在某处放置wins
:
hosts: files mdns4_minimal [NOTFOUND=return] dns wins mdns4
(请注意我不是这些设置的专家;记录之前的行,以防您以后遇到麻烦。)
使用mount.cifs,而不是smbclient
我发现smbclient
没有发现我的问题,因为它不允许你微调身份validation设置。 但是, mount.cifs
实用程序可以。 还有一些其他细节可以让您更好地控制,例如。 使用的SMB协议版本。 此终端会话显示了如何尝试不同的域和身份validation方法:
~ • mkdir temp ~ • sudo mount.cifs //giles/jason ./temp -o username=jason,password=abcd,domain=SUNNYDALE mount error(13): Permission denied Refer to the mount.cifs(8) manual page (eg man mount.cifs) ~ • sudo mount.cifs //giles/jason ./temp -o username=jason,password=abcd,domain=SUNNYDALE,sec=ntlmv2 mount error(13): Permission denied Refer to the mount.cifs(8) manual page (eg man mount.cifs) ~ • sudo mount.cifs //giles/jason ./temp -o username=jason,password=abcd,domain=SUNNYDALE,sec=ntlm ~ •
(最后一个命令是成功的。)
请注意,您可能会从mount.cifs
获得一些虚假的失败,例如:
~ • sudo mount.cifs //giles/jason ./temp -o username=jason,password=abcd,domain=SMB mount error: could not resolve address for giles: Unknown error ~ • sudo mount.cifs //giles/jason ./temp -o username=jason,password=abcd,domain=SMB mount error(13): Permission denied Refer to the mount.cifs(8) manual page (eg man mount.cifs)
有时我甚至在第一次尝试时遇到了身份validation错误,但在下次尝试时没有。 尝试每个命令两到三次以确定。
覆盖smb.conf设置/工具默认值
在调试您不依赖于/etc/samba/smb.conf
或mount.cifs
(或您正在使用的任何工具)中的默认值的SMB问题时要小心。 特别是,工作组(行起始workgroup =
)和身份validation方法( client ntlm auth = ...
例如,具有不同协议的多行)。
请注意,在上面的mount.cifs
终端会话中,我总是在更改身份validation方法时指定域。 要科学! 每次改变一件事。 如果它变得乏味,写一个脚本!
尝试不同的工作组
正如Ben Grimm指出的那样 ,有时候这些方框会忽略你给他们的工作组。 请尝试以下方法之一:
- WORKGROUP
- SMB
查找Windows或OS X计算机
这是一个基本的健全性检查:如果您可以从Windows或Mac计算机连接,至少应该可以 (即使很难)从Ubuntu连接。 如果您无法从任何其他计算机连接,请返回到开始并尝试配置,直到可以。
在我的情况下,我最初没有尝试使用非Linux机器。 最终我找到了一台旧的XP VM(它是几年前的机器备份)。 我意识到我可以从它连接到NAS! 这导致我的下一个战术……
Wireshark的
Wireshark是一个程序,用于检查和转储通过计算机上的接口传输的数据包。 一旦我意识到我的XP VM可以连接,就会弄清楚我的Ubuntu机器没有做什么。
Wireshark仅监视运行它的计算机上的接口。 这意味着您必须在位于测试计算机和NAS盒之间的计算机上运行它。 我不会在这里提供关于路由等的完整教程,但它对我有用,因为我在托管XP VM的机器上运行它,所以所有数据包都通过eth0
,就Wireshark而言。
就我而言,XP VM的IP为192.168.1.111
,NAS的IP为192.168.1.114
。 所以我在Wireshark中使用的捕获filter是:
(host 192.168.1.111) and (host 192.168.1.114)
然后我:
- 启动XP VM
- 开始捕获
- 在XP VM中我启动了Explorer,输入了
\\giles\jason
并点击回车 - 输入了我的凭据和域名
- 一旦共享被打开,我就切换回Wireshark并停止捕获。
此时,我使用Edit > Find packet...
并选择“按字符串”选项Edit > Find packet...
。 我只是搜索了我的用户名,并寻找第一次成功的身份validation尝试。 您可以通过稍后查找几个数据包的STATUS_LOGON_FAILURE
来查看哪些不成功。
让我感到惊讶的是XP正在进行的大量尝试。 它使用给定的用户名和域名,有时它使用WORKGROUP
或SMB
甚至客户端名称作为域,并尝试了多种身份validation方法。
有趣的是,我从来没有确定过成功的尝试! 这就是我意识到smbclient
无法提供帮助的地方,然后又回到了mount.cifs
并且更加科学地使用了它。
关于NTLM和Nautilus / GVFS的说明
最后,在弄清楚问题是什么并通过mount.cifs
成功访问共享mount.cifs
,我仍然无法让Nautilus连接。 这里的问题是Nautilus使用GVFS来安装SMB共享,而GVFS默认使用NTLMv2
。
您可以通过编辑/etc/samba/smb.conf
并添加以下内容来更改此系统:
client ntlm auth = yes client ntlmv2 auth = no
我在workgroup = ...
设置下面添加了这个。 但是,这将强制更改GVFS尝试挂载的所有SMB共享,这可能会使其他共享无法访问,因此请注意。
(由于某种原因, mount.cifs
抱怨第一行,但testparm
没有。也许它可以删除,但我不是游戏尝试。)
使用这些框似乎迫使工作组是必要的:
smbclient -L 10.1.0.25 -W WORKGROUP -U jason
您可以通过运行来validation框的工作组:
$ nmblookup -A 10.1.0.25 | grep GROUP ..__MSBROWSE__. <01> - B WORKGROUP <00> - B WORKGROUP <1e> - B
我收到了NT_STATUS_LOGON_FAILURE
消息,但也获得了:
Server does not support EXTENDED_SECURITY but 'client use spnego = yes and 'client ntlmv2 auth = yes'
要解决这个问题,我必须添加一行
use spnego = no
到客户端linux框
/etc/samba/smb.conf
(在[global]
之前的顶部)
现在,如果我连接到我的NAS,它可以工作,我得到:
root@localhost:~# smbclient -L \\\\192.168.1.1\\ -U admin WARNING: The "syslog" option is deprecated Enter admin's password: Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.33] Sharename Type Comment --------- ---- ------- ipc$ IPC IPC Service (SERVERUS) Backup Disk 8tb_Seagate_2's Backup in Seagate Backup+ Hub BK dropbox Disk TOSHIBA_EXT's dropbox in TOSHIBA External USB 3.0 WindowsImageBackup Disk TOSHIBA_EXT's WindowsImageBackup in TOSHIBA External USB 3.0 Rug Disk Seagate_8tb_1's Rug in Seagate Backup+ Hub BK drive_backup Disk TOSHIBA_EXT(1)'s drive_backup in TOSHIBA External USB 3.0 ntfsck.00000000 Disk TOSHIBA_EXT(1)'s ntfsck.00000000 in TOSHIBA External USB 3.0 archive Disk Seagate_Backup_Plus_Drive's archive in Seagate Backup+ Hub BK data_dump Disk Seagate_Backup_Plus_Drive's data_dump in Seagate Backup+ Hub BK Decimus_bac Disk Seagate_Backup_Plus_Drive's Decimus_bac in Seagate Backup+ Hub BK images Disk Seagate_Backup_Plus_Drive's images in Seagate Backup+ Hub BK Net Disk Seagate_Backup_Plus_Drive's Net in Seagate Backup+ Hub BK share Disk Seagate_Backup_Plus_Drive's share in Seagate Backup+ Hub BK test Disk Seagate_Backup_Plus_Drive's test in Seagate Backup+ Hub BK tools Disk Seagate_Backup_Plus_Drive's tools in Seagate Backup+ Hub BK Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.33] Server Comment --------- ------- LIBREELEC LibreELEC SERVERUS SERVERUS Workgroup Master --------- ------- WORKGROUP LIBREELEC