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

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

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

虽然禁用或删除 SMBv1 可能会导致旧计算机或软件出现一些兼容性问题,但 SMBv1 具有严重的安全漏洞, 强烈建议不要使用它

禁用 SMBv2 或 SMBv3 进行故障排除

建议使 SMBv2 和 SMBv3 保持启用状态,但你可能会发现暂时禁用一个用于故障排除的有用方法。 有关详细信息,请参阅 如何在 SMB 服务器上检测状态、启用和禁用 SMB 协议

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

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

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

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

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

如何删除 SMBv1

下面介绍如何删除 Windows 10、Windows 8.1、Windows Server 2019、Windows Server 2016 和 Windows 2012 R2 中的 SMBv1。

PowerShell 方法

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

注意

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

  • 检测:

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

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

    Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    

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

Server Manager - Dashboard method

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

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

Windows 8.1和Windows 10:添加或删除 Program 方法

Add-Remove Programs client method

若要在Windows 8.1和Windows 10上禁用 SMBv1,请:

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

如何在 SMB 服务器上检测状态、启用和禁用 SMB 协议

对于 Windows 8.1、Windows Server 2012、Windows Server 2012 R2、Windows 10 和 Windows Server 2019

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

注意

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

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

SMB 服务器上的 SMBv1

  • 检测:

    Get-SmbServerConfiguration | Select EnableSMB1Protocol
    
  • 禁用:

    Set-SmbServerConfiguration -EnableSMB1Protocol $false
    
  • 启用:

    Set-SmbServerConfiguration -EnableSMB1Protocol $true
    

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

SMB 服务器上的 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 的 SMB 服务器上启用或禁用 SMB 协议,Windows Server 2008 R2、Windows Vista 或 Windows Server 2008,请使用 Windows PowerShell 或注册表编辑器。

PowerShell 方法

注意

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

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)

注意

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

如何在 SMB 客户端上检测状态、启用和禁用 SMB 协议

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

注意

在Windows 8或Windows Server 2012中启用或禁用 SMBv2 时,也会启用或禁用 SMBv3。 发生此行为是因为这些协议共享相同的堆栈。

SMB 客户端上的 SMBv1

  • Detect

    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
    

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

SMB 客户端上的 SMBv2/v3

  • 检测:

    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 服务器

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

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

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

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

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

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

    Registry - New - Registry Item

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

  • 操作:更新
  • Hive:HKEY_LOCAL_MACHINE
  • 键路径:SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • 值名称:SMB1
  • 值类型:REG_DWORD
  • 值数据:0

New Registry Properties - General

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

注意

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

重要

在那些不支持 SMBv2 或 SMBv3) 的旧版 Windows XP 或较旧的 Linux 和第三方 (系统的域控制器上进行更改时,请注意) 需要访问 SYSVOL 或其他禁用 SMB v1 的文件共享。

禁用 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 现在作为依赖项删除。

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

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

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

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

  4. 在“ 新建注册表属性 ”对话框中,选择以下内容:

    • 操作:更新
    • Hive:HKEY_LOCAL_MACHINE
    • 键路径:SYSTEM\CurrentControlSet\services\mrxsmb10
    • 值名称:开始
    • 值类型:REG_DWORD
    • 值数据:4

    Start Properties - General

  5. 然后删除已禁用的 MRxSMB10 的依赖项。

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

    • 操作:替换
    • Hive:HKEY_LOCAL_MACHINE
    • 密钥路径:SYSTEM\CurrentControlSet\Services\LanmanWorkstation
    • 值名称:DependOnService
    • 值类型:REG_MULTI_SZ
    • 值数据
      • Bowser
      • MRxSmb20
      • NSI

    注意

    这三个字符串不会有项目符号, (看到以下屏幕截图) 。

    DependOnService Properties

    默认值包括许多版本的 Windows 中的 MRxSMB10,因此,通过将 MRxSMB10 替换为此多值字符串,实际上删除 MRxSMB10 作为 LanmanWorkstation 的依赖项,从四个默认值下降到上述三个值。

    注意

    使用组策略管理控制台时,无需使用引号或逗号。 只需在每个行上键入一个条目。

  6. 重启目标系统以完成禁用 SMB v1。

审核 SMBv1 使用情况

若要确定哪些客户端尝试使用 SMBv1 连接到 SMB 服务器,可以在 Windows Server 2016、Windows 10 和 Windows Server 2019 上启用审核。 如果安装了 2018 年 5 月更新,还可以审核 Windows 7 和 Windows Server 2008 R2;如果安装了 2017 年 7 月更新,则Windows 8.1和 Windows Server 2012 R2。

  • 启用:

    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 适用于环境中的所有其他系统。

注意

不要忘记重启目标系统。