如何强制 Nautilus 使用 SMB1?

Ekc*_*kci 6 nautilus samba networking

自 18.04 升级以来,我无法使用 Nautilus 窗口连接到 Samba 服务器。我发现我必须为 SMB1.0 指定协议(-o vers=1.0在控制台中)。我尝试添加以下命令:

max protocol = SMB1
client max protocol = SMB1
Run Code Online (Sandbox Code Playgroud)

to/etc/samba/smb.conf但它没有帮助,仍然打印Function not implemented

任何想法如何做到这一点?

lan*_*oxx 8

免责声明

SMBv1协议是从1983年,它是不安全的,因此一个很好的理由禁用。SMBv2 协议自 2006 年开始可用。

问题描述

我来到这个问题试图找到以下两个问题的解决方案:

  1. 我有一台只能使用旧版 SMBv1 协议 (HP OfficeJet Pro 8620) 的 HP 打印机。所以我的打印机拒绝连接到网络共享,扫描到网络功能停止工作。
  2. 我尝试使用 Nautilus 在我自己的 Ubuntu 系统上浏览网络共享。我收到一条错误消息,显示无法访问位置 无法从服务器检索共享列表:无效参数

    在此处输入图片说明

解决方案

/etc/samba/smb.conf文件中使用不同的值多次尝试后,我终于能够使用这两个值解决这些问题:

client min protocol = NT1
server min protocol = NT1
Run Code Online (Sandbox Code Playgroud)

我还发现了建议添加第三个参数的帖子:

ntlm auth = ntlmv1-permitted
Run Code Online (Sandbox Code Playgroud)

但是,在我的系统上,这不是必需的。

解释

据我了解,该client min protocol选项控制您的系统如何与其他 SMB 服务器通信,如果您的 Ubuntu 系统用作客户端并且您想使用 SMBv1 访问服务器,则更改此选项可能会很有用。默认情况下(使用 Samba 4.11)您的本地 Samba 安装配置为需要 SMBv2 或更高版本的连接。

另一方面,如果您的 Ubuntu 系统充当需要 SMBv2 或更高版本的服务器,并且您有一个只能理解传统 SMBv1 协议的远程客户端(例如打印机),那么更改似乎client min protocol没有任何效果。相反,您需要更改server min protocol. 通过这种方式,客户端可以与运行在 Ubuntu 系统上的 Samba 守护进程协商 SMBv1。

旁注,您还可以将client min protocol选项传递给诸如 之类的工具smbclient

smbclient -L //<hostname>/<folder> --option='client min protocol=NT1'
Run Code Online (Sandbox Code Playgroud)

可用于将客户端协议设置为 SMBv1。这对于测试smb.conf文件更改的效果很有用。

我在带有 samba 版本的 Ubuntu 20.04 上试过这个4.11。我尚未在较旧的 Ubuntu 发行版上测试此解决方案。

  • 服务器最小协议和客户端的包含为我解决了这个问题。我以为我要疯了,因为我遇到了所有相同的问题,但只是客户端版本没有改变任何东西。 (2认同)
  • 这是正确的答案。谢谢你!!这尤其适用于将 Ubuntu 连接到旧的 Windows XP 计算机。我花了 8 个小时才找到你的解决方案。谢谢你! (2认同)

Mor*_*us1 2

注意:这个答案与 samba 4.7.6 版本有关,并且适用于特殊情况。当前版本的 Samba 工作方式不同,将客户端最大值设置为 NT1 会使最大值小于最小值。要在较新版本的 Samba(例如 Ubuntu 20.04 中的版本)上启用 SMB1 ( NT1 ),请使用下面 lanoxx 提供的答案

客户端最大协议 = SMB1

为了迷惑尽可能多的人,samba 中的 SMB1 被称为 NT1。因此,将您的行更改为:

client max protocol = NT1
Run Code Online (Sandbox Code Playgroud)

并且根本不要添加max protocol = SMB1行。如果您在 18.04 机器上设置服务器,它将与客户端协商使用正确的级别,默认情况下上限为 SMB3。已经很多年了。