在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3

在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3

本文介绍如何在 SMB 客户端和服务器组件上启用或禁用服务器消息块(SMB)版本 1(SMBv1)、SMB 版本 2(SMBv2)和 SMB 版本 3(SMBv3)。

如果禁用或删除 SMBv1,则可能会遇到旧计算机或软件的兼容性问题。 SMBv1 存在严重的安全漏洞, 我们强烈建议你不要使用它。

默认情况下,SMBv1 不会在任何 版本的 Windows 11 或 Windows Server 2019 及更高版本中安装。 默认情况下,SMBv1 也不会在 Windows 10 中安装,但家庭版和专业版除外。 建议不要重新安装 SMBv1,而是更新仍需要它的 SMB 服务器。 有关需要 SMBv1 的合作伙伴及其删除要求的更新的列表,请参阅 SMB1 产品清算所。

禁用 SMBv2 或 SMBv3 进行故障排除

我们建议保持启用 SMBv2 和 SMBv3,但你可能发现,暂时禁用其中一个版本可以方便进行故障排除。 有关详细信息,请参阅 使用命令行或注册表编辑器管理 SMB 协议。

禁用 SMBv3 会停用以下功能:

透明故障转移:为客户端提供在维护或故障转移期间不中断群集节点重新连接的方法

横向扩展:提供对所有文件群集节点上共享数据的并发访问

SMB 多通道:如果客户端和服务器之间提供了多个路径,则有助于聚合网络带宽和容错

SMB 直通:添加对高性能的远程直接内存访问(RDMA)网络支持,延迟低和 CPU 使用率低

加密:提供端到端加密,并提供对不可信网络上窃听的保护

目录租赁:通过缓存改进分支机构的应用程序响应时间

性能优化:优化小型随机读/写 I/O作

禁用 SMBv2 会停用以下功能:

请求复合:支持以单个网络请求的形式发送多个 SMBv2 请求

较大的读取和写入:提高网络速度

缓存文件夹和文件属性:使客户端能够保留文件夹和文件的本地副本

持久句柄:提供一种在临时断开连接后以透明方式重新连接到服务器的方法

改进了消息签名:使用基于哈希的消息身份验证代码(HMAC)安全哈希算法(SHA)和 256 位摘要(HMAC SHA-256)而不是 Message-Digest 算法 5(MD5)作为哈希算法

改进了文件共享的可伸缩性:大大增加了每个服务器的用户数、共享和打开文件数

支持符号链接

客户端 oplock 租赁模型:限制客户端和服务器之间传输的数据,提高高延迟网络的性能并提高 SMB 服务器可伸缩性

最大最大传输单元(MTU)支持:支持充分利用 10 千兆位以太网(GbE)

提高能效:为将文件打开到服务器以睡眠的客户端提供一种方法

SMBv2 协议是在 Windows Vista 和 Windows Server 2008 中引入的。 SMBv3 协议是在 Windows 8 和 Windows Server 2012 中引入的。 有关 SMBv2 和 SMBv3 功能的详细信息,请参阅以下文章:

在 Windows Server 中使用 SMB 3 协议进行文件共享概述

1.3 概述

使用 PowerShell 删除 SMBv1

可以使用 Get-WindowsOptionalFeature、 Disable-WindowsOptionalFeature 和 Enable-WindowsOptionalFeature PowerShell 命令来检测、禁用和启用 SMBv1 客户端或服务器。 在提升的命令提示符下运行命令。

注意

运行 PowerShell 命令以禁用或启用 SMBv1 后,计算机将重启。

检测:

Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

禁用:

Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

启用:

Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol

提示

可以通过运行 Get-SmbServerConfiguration 命令 Get-SmbServerConfiguration | Format-List EnableSMB1Protocol来检测 SMBv1 状态,而无需提升。

删除 SMBv1

服务器

客户端

默认情况下,SMBv1 不会安装在 Windows Server 2019 及更高版本上。 在早期版本的 Windows Server 上,可以使用服务器管理器删除 SMBv1:

在要从中删除 SMBv1 的服务器上,打开服务器管理器。

在“服务器管理器仪表板”的 “配置此本地服务器”下,选择“ 添加角色和功能”。

在“开始之前”页上选择“启动‘删除角色和功能’向导”,然后在随后出现的页上选择“下一步”。

在 “选择目标服务器 ”页上的服务器 池下,确保选择要从中删除该功能的服务器,然后选择“ 下一步”。

在“删除服务器角色”页上,选择“下一步”。

在 “删除功能 ”页上,清除 SMB 1.0/CIFS 文件共享支持的复选框,然后选择“ 下一步”。

在“确认删除所选内容”页上,确认已列出该功能,然后选择“删除”。

在 Windows 8.1、Windows 10 和 Windows 11 上,可以使用“删除程序”禁用 SMBv1。

若要在这些作系统上禁用 SMBv1,请执行以下步骤:

在“控制面板”中,选择“程序和功能”。

在 “控制面板主页”下,选择“ 打开或关闭 Windows 功能 ”以打开 “Windows 功能 ”对话框。

在 “Windows 功能 ”对话框中,向下滚动列表,清除 SMB 1.0/CIFS 文件共享支持的复选框,然后选择“ 确定”。

在 Windows 应用更改后,在确认页上选择“立即重启”。

使用命令行或注册表编辑器管理 SMB 协议

从 Windows 10 Fall Creators Update 和 Windows Server 2019 开始,默认情况下不再安装 SMBv1。 有关详细信息,请参阅 WINDOWS 10 版本 1709、Windows Server 版本 1709 及更高版本中默认未安装 SMBv1。

在 Windows 8 或 Windows Server 2012 中启用或禁用 SMBv2 时,也会启用或禁用 SMBv3。 出现此行为是因为这些协议共享同一个堆栈。

服务器

客户端

可以使用 Set-SMBServerConfiguration cmdlet 在服务器组件上启用或禁用 SMBv1、SMBv2 和 SMBv3 协议。 可以使用 Get-SmbServerConfiguration cmdlet 检索 SMB 服务器配置。

运行 Set-SMBServerConfiguration cmdlet 后,无需重启计算机。

SMBv1

检测:

Get-SmbServerConfiguration | Select EnableSMB1Protocol

禁用:

Set-SmbServerConfiguration -EnableSMB1Protocol $false

启用:

Set-SmbServerConfiguration -EnableSMB1Protocol $true

有关详细信息,请参阅 “停止使用 SMB1”。

SMBv2 和 SMBv3

检测:

Get-SmbServerConfiguration | Select EnableSMB2Protocol

禁用:

Set-SmbServerConfiguration -EnableSMB2Protocol $false

启用:

Set-SmbServerConfiguration -EnableSMB2Protocol $true

在 Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008 上启用或禁用 SMB

若要在运行 Windows 7、Windows Server 2008 R2、Windows Vista 或 Windows Server 2008 的 SMB 服务器上启用或禁用 SMB 协议,请使用 Windows PowerShell 或注册表编辑器,如以下部分所述。

使用 Windows PowerShell

可以使用 Get-Item、 Get-ItemProperty 和 Set-ItemProperty cmdlet 来检测、启用和禁用 SMB 协议。

注意

以下部分中的命令需要 PowerShell 2.0 或更高版本。

SMB 服务器上的 SMBv1

检测:

Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

默认配置为 Enabled. 因此,不会创建任何注册表命名值,因此该命令不返回值 SMB1 。

禁用:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 0 -Force

启用:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB1 -Type DWORD -Value 1 -Force

注意

进行这些更改后,必须重启计算机。

有关详细信息,请参阅 “停止使用 SMB1”。

SMB 服务器上的 SMBv2 和 SMBv3

检测:

Get-ItemProperty HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

禁用:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 0 -Force

启用:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" SMB2 -Type DWORD -Value 1 -Force

注意

进行这些更改后,必须重启计算机。

使用注册表编辑器

重要

请认真遵循本部分所述的步骤。 如果注册表修改不正确,可能会发生严重问题。 在修改注册表之前,请备份注册表,以便在出现问题时可以还原。

若要在 SMB 服务器上启用或禁用 SMBv1,请打开注册表编辑器并转到以下注册表项路径:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

配置具有以下属性的条目:

对于名称,请使用 SMB1。

对于类型,请使用 REG_DWORD。

对于数据,请使用 0 表示 已禁用 , 使用 1 表示 已启用。 默认值为 1 或 已启用。 在这种情况下,不会创建注册表项。

若要在 SMB 服务器上启用或禁用 SMBv2,请打开注册表编辑器并转到以下注册表项路径:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

配置具有以下属性的条目:

对于名称,请使用 SMB2。

对于类型,请使用 REG_DWORD。

对于数据,请使用 0 表示 已禁用 , 使用 1 表示 已启用。 默认值为 1 或 已启用。 在这种情况下,不会创建注册表项。

注意

进行这些更改后,必须重启计算机。

下面介绍如何在运行 Windows 客户端和 Windows Server 的 SMB 客户端上检测状态、启用和禁用 SMB 协议。

SMB 客户端上的 SMBv1

检测:

sc.exe qc lanmanworkstation

禁用:

sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi

sc.exe config mrxsmb10 start= disabled

启用:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi

sc.exe config mrxsmb10 start= auto

有关详细信息,请参阅 “停止使用 SMB1”。

SMB 客户端上的 SMBv2 和 SMBv3

检测:

sc.exe qc lanmanworkstation

禁用:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi

sc.exe config mrxsmb20 start= disabled

启用:

sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi

sc.exe config mrxsmb20 start= auto

注意

必须在权限提升的命令提示符下运行这些命令。

进行这些更改后,必须重启计算机。

使用组策略禁用 SMBv1

本部分介绍如何使用组策略禁用 SMBv1。 可以在各种版本的 Windows 上使用此方法。

服务器

客户端

SMBv1

可以通过在注册表中配置以下新项,在 SMB 服务器上禁用 SMBv1:

键路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

注册表项:SMB1

条目类型: REG_DWORD

输入数据: 0,对于 已禁用

若要使用组策略配置此项,请执行以下步骤:

打开组策略管理控制台。 右键单击应包含新首选项项的组策略对象(GPO),然后选择“ 编辑”。

在控制台树中的“计算机配置”下,展开“首选项”文件夹,然后展开“Windows 设置”文件夹。

右键单击 注册表 节点,指向 “新建”,然后选择 “注册表项”。

在“ 新建注册表属性 ”对话框中,选择或输入以下值:

作: 创建

Hive: HKEY_LOCAL_MACHINE

注册表项路径: SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

值名称: SMB1

值类型: REG_DWORD

值数据: 0

此过程禁用 SMBv1 服务器组件。 必须将此策略应用于域中所有必要的工作站、服务器和域控制器。

注意

你可以设置 Windows Management Instrumentation (WMI) 筛选器以排除特定作系统或排除客户端或服务器作系统。 有关详细信息,请参阅 组策略筛选 和 为 GPO 创建 WMI 筛选器。

重要

某些系统需要访问 SYSVOL 文件夹或其他文件共享,但不支持 SMBv2 或 SMBv3。 此类系统的示例包括旧版 Windows 系统和旧版 Linux 和合作伙伴系统。 在这些系统上的域控制器上禁用 SMBv1 时,请小心。

SMBv1

若要禁用 SMBv1 客户端,需要更新服务注册表项以防止 MRxSMB10 驱动程序的启动。 然后,需要从 LanmanWorkstation 的条目中删除对 MRxSMB10 的依赖项,以便它可以正常启动,而无需 MRxSMB10 才能首次启动。

本部分介绍如何更新和替换注册表中以下两项中的默认值:

键路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10

注册表项: 启动

条目类型: REG_DWORD

输入数据: 4,对于 禁用

键路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation

注册表项: DependOnService

条目类型:REG_MULTI_SZ

输入数据: Bowser、MRxSmb20、NSI

注意

默认值包括 MRxSMB10,该 MRxSMB10 现在作为依赖项删除。

若要使用组策略配置这些条目,请执行以下步骤:

打开组策略管理控制台。 右键单击应包含新首选项项的 GPO,然后选择“ 编辑”。

在控制台树中的“计算机配置”下,展开“首选项”文件夹,然后展开“Windows 设置”文件夹。

右键单击 注册表 节点,指向 “新建”,然后选择 “注册表项”。

在“ 新建注册表属性 ”对话框中,选择或输入以下值:

作: 更新

Hive: HKEY_LOCAL_MACHINE

注册表项路径: SYSTEM\CurrentControlSet\services\mrxsmb10

值名称: Start

值类型: REG_DWORD

值数据: 4

若要删除禁用的 MRxSMB10 驱动程序的依赖项,请打开 “新建注册表属性 ”对话框,然后选择或输入以下值:

作: 替换

Hive: HKEY_LOCAL_MACHINE

注册表项路径: SYSTEM\CurrentControlSet\Services\LanmanWorkstation

值名称: DependOnService

值类型: REG_MULTI_SZ

值数据:

Bowser

MRxSmb20

NSI

注意

不要在三个 值数据 字符串中包含项目符号点。 仅列出字符串,如以下屏幕截图所示。

默认值包括许多版本的 Windows 中的 MRxSMB10 。 通过将默认值替换为这三个字符串,可以有效地删除 MRxSMB10 作为 LanmanWorkstation 的依赖项。 使用这三个值而不是四个默认值。

注意

使用组策略管理控制台时,无需使用引号或逗号。 只需独行键入每个项即可。

若要完成禁用 SMBv1,请重启目标系统。

审核 SMBv1 使用情况

若要确定哪些客户端尝试使用 SMBv1 连接到 SMB 服务器,可以在 Windows Server 和 Windows 客户端上启用审核。 若要启用或禁用审核,请使用 Set-SmbServerConfiguration cmdlet。 若要检查审核状态,请使用 Get-SmbServerConfiguration cmdlet。

启用:

Set-SmbServerConfiguration -AuditSmb1Access $true

禁用:

Set-SmbServerConfiguration -AuditSmb1Access $false

检测:

Get-SmbServerConfiguration | Select AuditSmb1Access

启用 SMBv1 审核后,可以检查 Microsoft-Windows-SMBServer\Audit 事件日志中是否存在访问事件。 每次客户端尝试使用 SMBv1 连接到服务器时,日志中都会显示一个事件 ID 为 3000 的条目。

检查组策略设置

如果所有设置都位于同一 GPO 中,组策略管理将显示以下设置:

测试和验证策略

完成组策略管理控制台中的配置步骤后,请为组策略提供将更新应用到其设置的时间。 如果需要进行测试,请在命令提示符下运行 gpupdate /force ,然后查看目标计算机,以确保正确应用注册表设置。 确保 SMBv2 和 SMBv3 可对环境中的所有其他系统正常运行。

注意

测试策略后,重启目标系统。

相关推荐