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

适用于:Windows Server 2022、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012、Windows 11、Windows 10、Windows 8.1、Windows 8

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

虽然禁用或删除 SMBv1 可能会导致旧计算机或软件出现一些兼容性问题,但 SMBv1 存在重大安全漏洞,我们强烈建议不要使用它默认情况下,SMB 1.0 未安装在任何版本的 Windows 11 或 Windows Server 2019 及更高版本中。 默认情况下,Windows 10 中也不会安装 SMB 1.0(家庭版和专业版)。 建议更新仍需要它的 SMB 服务器,而不是重新安装 SMB 1.0。 有关需要 SMB 1.0 的第三方及其移除该要求的更新信息,请查看 SMB1 产品信息交换所

禁用 SMBv2 或 SMBv3 以进行故障排除

我们建议保持启用 SMBv2 和 SMBv3,但你可能发现,暂时禁用其中一个版本可以方便进行故障排除。 有关详细信息,请参阅如何在 SMB 服务器上检测 SMB 协议状态以及启用和禁用 SMB 协议

在 Windows 10、Windows 8.1、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2 和 Windows Server 2012 中,禁用 SMBv3 会停用以下功能:

  • 透明故障转移 – 在维护或故障转移期间,客户端在不中断群集节点的情况下重新进行连接
  • 横向扩展 - 对所有文件群集节点上的共享数据进行并发访问
  • 多通道 - 当客户端和服务器之间有多个可用路径时聚合网络带宽和容错
  • SMB 直通 - 添加 RDMA 网络支持以提高性能、降低延迟和降低 CPU 使用率
  • 加密 - 提供端到端加密,并防止在不受信任的网络上窃听
  • 目录租赁 - 通过缓存改善分支机构中的应用程序响应时间
  • 性能优化 - 针对小型随机读/写 I/O 的优化

在 Windows 7 和 Windows Server 2008 R2 中,禁用 SMBv2 会停用以下功能:

  • 请求复合 - 允许将多个 SMBv2 请求作为单个网络请求发送
  • 更大规模的读取和写入 - 更好地利用更快的网络
  • 文件夹和文件属性缓存 - 客户端保留文件夹和文件的本地副本
  • 持久性句柄 - 允许在发生暂时性断开连接时以透明方式重新连接到服务器
  • 改进的消息签名 - HMAC SHA-256 取代了 MD5 作为哈希算法
  • 改进的文件共享可伸缩性 - 每个服务器的用户、共享和开放文件数量显著增加
  • 支持符号链接
  • 客户端 oplock 租赁模型 - 限制客户端和服务器之间传输的数据,改善高延迟网络的性能,并提高 SMB 服务器的可伸缩性
  • 大 MTU 支持 - 充分利用 10 千兆以太网 (GbE)
  • 提高能效 – 向服务器开放文件的客户端可以休眠

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

如何通过 PowerShell 删除 SMBv1

下面是使用权限提升的 PowerShell 命令检测、禁用和启用 SMBv1 客户端和服务器的步骤。

注意

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

  • 检测:

    Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    
  • 禁用:

    Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    
  • 启用:

    Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    

提示

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

Windows Server 2012 Windows Server 2012 R2、Windows Server 2016、Windows Server 2019:服务器管理器方法

Server Manager - Dashboard method

若要从 Windows Server 中删除 SMBv1,请执行以下操作:

  1. 在要删除 SMBv1 的服务器的服务器管理器仪表板上,在“配置此本地服务器”下,选择“添加角色和功能”。
  2. 在“开始之前”页上选择“启动‘删除角色和功能’向导”,然后在随后出现的页上选择“下一步”。
  3. 在“选择目标服务器”页上的“服务器池”下,确保已选择要从中删除该功能的服务器,然后选择“下一步”。
  4. 在“删除服务器角色”页上,选择“下一步”。
  5. 在“删除功能”页上,清除“SMB 1.0/CIFS 文件共享支持”对应的复选框,然后选择“下一步”。
  6. 在“确认删除所选内容”页上,确认已列出该功能,然后选择“删除”。

Windows 8.1、Windows 10 和 Windows 11:添加或删除程序方法

Add-Remove Programs client method

若要为上述操作系统禁用 SMBv1,请执行以下操作:

  1. 在“控制面板”中,选择“程序和功能”。
  2. 在“控制面板主页”下,选择“打开或关闭 Windows 功能”打开“Windows 功能”框。
  3. 在“Windows 功能”框中,向下滚动列表,清除“SMB 1.0/CIFS 文件共享支持”对应的复选框,然后选择“确定”。
  4. 在 Windows 应用更改后,在确认页上选择“立即重启”。

如何检测 SMB 协议状态以及启用和禁用 SMB 协议

注意

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

Windows 8 和 Windows Server 2012 引入了新的 Set-SMBServerConfiguration Windows PowerShell cmdlet。 使用该 cmdlet 可以在服务器组件上启用或禁用 SMBv1、SMBv2 和 SMBv3 协议。

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

SMBv1

  • 检测:

    Get-SmbServerConfiguration | Select EnableSMB1Protocol
    
  • 禁用:

    Set-SmbServerConfiguration -EnableSMB1Protocol $false
    
  • 启用:

    Set-SmbServerConfiguration -EnableSMB1Protocol $true
    

有关详细信息,请参阅 Microsoft 中的服务器存储

SMB v2/v3

  • 检测:

    Get-SmbServerConfiguration | Select EnableSMB2Protocol
    
  • 禁用:

    Set-SmbServerConfiguration -EnableSMB2Protocol $false
    
  • 启用:

    Set-SmbServerConfiguration -EnableSMB2Protocol $true
    

对于 Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008

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

其他 PowerShell 方法

注意

此方法需要 PowerShell 2.0 或更高版本。

SMB 服务器上的 SMBv1

检测:

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

默认配置 = 已启用(未创建注册表命名值),因此不会返回任何 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

注意:进行这些更改后,必须重启计算机。 有关详细信息,请参阅 Microsoft 中的服务器存储

SMB 服务器上的 SMBv2/v3

检测:

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

Registry entry: SMB1
REG_DWORD: 0 = Disabled
REG_DWORD: 1 = Enabled
Default: 1 = Enabled (No registry key is created)

若要在 SMB 服务器上启用或禁用 SMBv2,请配置以下注册表项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

Registry entry: SMB2
REG_DWORD: 0 = Disabled
REG_DWORD: 1 = Enabled
Default: 1 = Enabled (No registry key is created)

注意

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

使用组策略禁用 SMBv1

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

SMBv1

此过程在注册表中配置以下新项:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

  • 注册表项:SMB1
  • REG_DWORD:0 = 禁用

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

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

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

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

    Registry - New - Registry Item

在“新建注册表属性”对话框中,选择以下各项:

  • 操作:创建
  • 配置单元:HKEY_LOCAL_MACHINE
  • 项路径:SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • 值名称:SMB1
  • 值类型:REG_DWORD
  • 值数据:0

New Registry Properties - General

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

注意

 还可以将 WMI 筛选器设置为排除不受支持的操作系统或选定的排除项,例如 Windows XP。

重要

对于其中的旧 Windows XP 或较旧 Linux 和第三方系统(不支持 SMBv2 或 SMBv3)需要访问 SYSVOL 或其他禁用了 SMB v1 的文件共享的域控制器,请小心进行这些更改。

审核 SMBv1 使用情况

若要确定哪些客户端正在尝试使用 SMBv1 连接到 SMB 服务器,可以在 Windows Server 2016、Windows 10 和 Windows Server 2019 上启用审核。 如果在 Windows 7 和 Windows Server 2008 R2 上安装了 2018 年 5 月每月更新,或者在 Windows 8.1 和 Windows Server 2012 R2 上安装了 2017 年 7 月每月更新,则也可以在这些操作系统上进行审核。

  • 启用:

    Set-SmbServerConfiguration -AuditSmb1Access $true
    
  • 禁用:

    Set-SmbServerConfiguration -AuditSmb1Access $false
    
  • 检测:

    Get-SmbServerConfiguration | Select AuditSmb1Access
    

启用 SMBv1 审核后,事件 3000 会出现在“Microsoft-Windows-SMBServer\Audit”事件日志中,其中标识了每个尝试使用 SMBv1 进行连接的客户端。

总结

如果所有设置都在同一个 GPO 中,则组策略管理会显示以下设置。

Group Policy Management Editor - Registry

测试和验证

完成本文中的配置步骤后,允许策略进行复制和更新。 在测试期间,可以根据需要在命令提示符下运行 gpupdate /force,然后检查目标计算机以确保正确应用了注册表设置。 确保 SMBv2 和 SMBv3 可对环境中的所有其他系统正常运行。

注意

不要忘记重启目标系统。