如何在 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 8 Windows Server 2019、Windows Server 2016、Windows Server 2012 R2 和 Windows Server 2012 中,禁用 SMBv3 将停用以下功能:

  • 透明故障转移-客户端在维护或故障转移过程中重新连接而不中断群集节点
  • Scale Out 对所有文件群集节点上的共享数据进行并发访问
  • 多通道-如果客户端和服务器之间有多个路径,则聚合网络带宽和容错
  • SMB 直接添加 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 方法

SMBv1 (客户端和服务器)
  • 察觉

    Get-WindowsOptionalFeature -Online -FeatureName smb1protocol
    
  • 禁用

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

    Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol
    

Windows Server 2012R2、Windows Server 2016 Windows Server 2019:服务器管理器禁用 SMB 的方法

SMBv1

服务器管理器-仪表板方法

从 Windows 服务器中删除 SMBv1:

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

Windows 8.1 和 Windows 10: PowerShell 方法

SMBv1 协议
  • 察觉

    Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    
  • 禁用

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

    Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    
SMBv2/v3 协议 (仅禁用 SMBv2/v3 服务器)
  • 察觉

    Get-SmbServerConfiguration | Select EnableSMB2Protocol
    
  • 禁用

    Set-SmbServerConfiguration -EnableSMB2Protocol $false
    
  • 启用:

    Set-SmbServerConfiguration -EnableSMB2Protocol $true
    

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

Add-Remove 程序客户端方法

若要禁用 Windows 8.1 和 Windows 10 上的 SMBv1:

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

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

对于 Windows 8 和 Windows Server 2012

Windows 8 和 Windows Server 2012 引入了新的 SMBServerConfiguration Windows PowerShell cmdlet。 Cmdlet 可用于启用或禁用服务器组件上的 SMBv1、SMBv2 和 SMBv3 协议。

备注

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

运行 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}

默认配置 = 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

注意 进行这些更改之后,必须重新启动计算机。 有关详细信息,请参阅 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 Vista、Windows Server 2008、Windows 7、Windows Server 2008 R2、Windows 8 和 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 组策略

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

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

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

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

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

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

    注册表 - 新建 - 注册表项

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

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

新建注册表属性 - 常规

此过程将禁用 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

注册表项 :DependOnService REG_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

    启动属性 - 常规

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

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

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

    备注

    这三个字符串将没有项目符号 (如以下屏幕截图所示) 。

    DependOnService 属性

    默认值在许多版本的 Windows 中包含 MRxSMB10, 因此,通过使用此多值字符串替换 MRxSMB10,实际上会删除 MRxSMB10 作为 LanmanServer 的依赖项,从四个默认值向下到上述三个值。

    备注

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

  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 中,组策略管理将显示以下设置。

组策略管理编辑器 - 注册表

测试和验证

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

备注

不要忘记重启目标系统。