如何诊断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。

但是,使用smbclientmount.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.confmount.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正在进行的大量尝试。 它使用给定的用户名和域名,有时它使用WORKGROUPSMB甚至客户端名称作为域,并尝试了多种身份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