Windows 10 无法连接到 Linux Samba 共享,除非从 SMB1/CIFS

Windows 10 无法连接到 Linux Samba 共享,除非从 SMB1/CIFS

我在 Windows 10 下访问某些 Linux Samba 共享时遇到问题,出现以下错误:

Check the spelling of the name. Otherwise, there might be a problem with your network. To try to identify and resolve network problems click Diagnose.
Error code: 0x80070035
The network path was not found

我可以成功地从仅使用 SMB1/CIFS 的旧版 openSUSE 12.1 进行浏览,但不能从较新的 openSUSE Leap 15 进行浏览,除非我强制NT1协议(即 SMB1/CIFS)/etc/samba/smb.conf 全局部分:

[global]
...
min protocol = NT1
max protocol = NT1

供参考,默认情况下最小协议兰曼1最大协议3. SMB3(超级存储3),该范围包括NT1协议(见SMB 协议最小最大值可用吗?):

$ testparm --parameter-name="min protocol"
[...]
LANMAN1
$ testparm --parameter-name="max protocol"
[...]
SMB3

我可以从另一台 Linux 计算机访问这些共享文件夹,而无需使用以下命令强制协议,例如,我可以列出文件夹:

smbclient -L MyLeap15Computer -N

或者使用以下命令连接到 tmp 共享文件夹:

smbclient //MyLeap15Computer /tmp -N

我还确认 SMB2 和 3 确实处于活动状态如何在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3,并且能够从另一台 Windows 10 访问它们。并且从我无法访问它们的计算机上成功 ping 通 MyLeap15Computer。

无论如何,从技术上讲,我可以通过强制使用 NT1 协议来访问我的共享文件夹,但既然应该可以,我希望能够从 SMB2 或 SMB3 访问它们,因为 SMB1/CIFS 存在安全问题(然后在 Windows 10 中也停用它),而且,因为我可以从另一个 Windows 10 访问它们而不强制使用此协议,所以它应该是 Windows 配置中的某些内容,但我无法看到哪一个,因为两者上的所有内容都显示为活动状态。

最后,即使问题似乎更多地出现在客户端,以下是服务器配置,/etc/samba/smb.conf无需强迫NT1协议(此配置接受访客用户,因此无需提供任何凭据即可连接):

[global]
workgroup = WORKGROUP
passdb backend = tdbsam
printing = cups
printcap name = cups
printcap cache time = 750
cups options = raw
map to guest = bad user
logon path = \\%L\profiles\.msprofile
logon home = \\%L\%U\.9xprofile
logon drive = P:
usershare allow guests = yes
usershare max shares = 100
winbind offline logon = yes
winbind refresh tickets = yes
create mask = 777
directory mask = 777
delete readonly = yes

[tmp]
comment = Temp folder
path = /tmp
browseable = yes
writable = yes
read only = no
guest ok = yes
mangled names = no

编辑:以下是@JW0914 建议的更多信息,建议的内容不起作用,但我在服务器日志中发现了一些有趣的东西(添加日志级别 = 3/etc/samba/smb.conf 全局然后部分看着/var/log/samba/log.smbd尝试连接后):

  check_ntlm_password:  Checking password for unmapped user [DOMAIN]\[USER]@[Windows10Computer] with the new password interface
[2020/02/05 14:21:23.845849,  3] ../source3/auth/auth.c:192(auth_check_ntlm_password)
  check_ntlm_password:  mapped user is: [DOMAIN]\[USER]@[Windows10Computer]
[2020/02/05 14:21:23.845879,  3] ../source3/auth/check_samsec.c:399(check_sam_security)
  check_sam_security: Couldn't find user 'USER' in passdb.
[2020/02/05 14:21:23.845890,  2] ../source3/auth/auth.c:332(auth_check_ntlm_password)
  check_ntlm_password:  Authentication for user [USER] -> [USER] FAILED with error NT_STATUS_NO_SUCH_USER, authoritative=1
[2020/02/05 14:21:23.845910,  2] ../auth/auth_log.c:760(log_authentication_event_human_readable)
  Auth: [SMB2,(null)] user [DOMAIN]\[USER] at [Wed, 05 Feb 2020 14:21:23.845900 CET] with [NTLMv2] status [NT_STATUS_NO_SUCH_USER] workstation [Windows10Computer] remote host [ipv4:172.168.0.69:56937] mapped to [DOMAIN]\[USER]. local host [ipv4:172.168.0.99:445]
[...]
  No such user USER [DOMAIN] - using guest account
[2020/02/05 14:21:23.847182,  3] ../source3/smbd/server_exit.c:244(exit_server_common)
  Server exit (NT_STATUS_CONNECTION_RESET)

我看到服务器正在尝试使用登录 Windows 10 的用户进行身份验证,但由于不存在,它会返回到访客用户,但连接随后会重置。在另一侧,使用正在运行的计算机,当使用相同的域/用户登录并成功访问时,我会得到完全相同的日志(不同的计算机名称和 IP),但最后:

  No such user USER [DOMAIN] - using guest account
[2020/02/05 14:43:21.147396,  3] ../lib/util/access.c:365(allow_access)
  Allowed connection from 192.168.0.77 (192.168.0.77)

我正在调查此事,但如果有人知道发生了什么,我会很高兴。

編輯2:快速浏览后,我找到了一个解决方法Windows 10 秋季更新和 Samba 来宾帐户但当尝试净使用命令我有以下问题,那么这是我的公司可能在较新的计算机上更改了安全性(两个都在同一个域上,但不工作的那个来自较新的安装):

You can't access this shared folder because your organization's security policies block unauthenticated guest access. These policies help protect your PC from unsafe or malicious devices on the network.

谢谢

答案1

就我的情况而言(Windows 10,CentOS 6 上古老的 Samba 4.2.10),有帮助的是将最小协议设置为 SMB2,将最大协议设置为 SMB3:

[global]

min protocol = SMB2
max protocol = SMB3

client min protocol = SMB2
client max protocol = SMB3

client ipc min protocol = SMB2
client ipc max protocol = SMB3

server min protocol = SMB2
server max protocol = SMB3

进而将共享连接为网络驱动器(Explorer -> Home -> Easy access -> Map as drive),输入共享名称(\\1.2.3.4\ShareName),勾选“使用不同的凭据连接”,然后选择其他,并以格式输入用户名DOMAIN\username

当尝试在 Explorer 中获取共享时,它永远不会要求输入凭据,我也无法指定用户名net use \\shareserver\data /user:testuser(出现系统错误 58)。

答案2

在这里跑步smbpasswd -a user至关重要!

我的跑步smb.conf

[global]
    client max protocol = SMB3
    name resolve order = wins lmhosts host bcast
    security = USER
    username map = /etc/samba/smbusers
    idmap config * : backend = tdb

[rootfs]
    create mask = 0644
    force group = root
    force user = root
    path = /
    read only = No

答案3

最后,感谢由于组织的安全策略,无法访问共享文件夹,我找到了一种方法来覆盖它:

  • regedit前往HKLM\SOFTWARE\Policies\Microsoft\Windows
  • 创建一个新键LanmanWorkstation并在其中创建一个新的 DWORD,并将其命名AllowInsecureGuestAuth为值1
  • 重启

当然,没有贵公司的批准我是不会这么做的,我只是为了测试一下,但我正在与我们的 IT 部门合作,看看如何解决这个问题。

答案4

就我而言,禁用端口 139/TCP 上的连接对解决 Windows 10 客户端首次连接到 samba Ubuntu 20.04 时出现的错误 0x80070035 有很大帮助

[global]
...
smb ports = 445
...

现在,从我家里的 Windows 10 PC 连接到 samba 服务器比以往更快。

但我真的不知道这会带来什么副作用。

相关内容