如何在 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 直通 - 添加了对高性能、低延迟和低 CPU 使用率的 RDMA 网络支持
  • 加密 - 提供端到端加密,防止在不受信任的网络上窃听
  • 目录租用 - 通过缓存改善分支机构的应用程序响应时间
  • 性能优化 - 针对小型随机读/写 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

若要从服务器中删除 SMBv1,Windows服务器:

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

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

Add-Remove Programs client method

若要在应用程序上禁用 SMBv1,Windows 8.1 Windows 10:

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

重要

在旧版 Windows XP 或较旧的 Linux 和第三方系统 (不支持 SMBv2 或 SMBv3) 且需要访问 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

注册表项 :DependOnServiceREG_MULTI_SZ:"Bowser"、"MRxSmb20"、"NSI"

注意

 默认包含 MRxSMB10,该 MRxSMB10 现已删除为依赖项。

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

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

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

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

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

    • 操作:更新
    • Hive:HKEY_LOCAL_MACHINE
    • 键路径:SYSTEM\CurrentControlSet\services\mrxsmb10
    • 值名称:Start
    • 值类型: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 审核后,"Microsoft-Windows-SMBServer\Audit"事件日志中会显示事件 3000,标识尝试与 SMBv1 连接的每个客户端。

摘要

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

Group Policy Management Editor - Registry

测试和验证

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

注意

不要忘记重启目标系统。