相关文章推荐

适用于: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 功能的详细信息,请参阅以下文章:

  • 服务器消息块概述
  • SMB 中的新增功能
  • 如何通过 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:服务器管理器方法

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

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

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

  • 在“控制面板”中,选择“程序和功能”。
  • 在“控制面板主页”下,选择“打开或关闭 Windows 功能”打开“Windows 功能”框。
  • 在“Windows 功能”框中,向下滚动列表,清除“SMB 1.0/CIFS 文件共享支持”对应的复选框,然后选择“确定”。
  • 在 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)
    

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

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

    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 客户端上的 SMB v2/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 = 禁用
  • 若要使用组策略配置此配置,请执行以下步骤:

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

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

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

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

  • 操作:创建
  • 配置单元:HKEY_LOCAL_MACHINE
  • 项路径:SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • 值名称:SMB1
  • 值类型:REG_DWORD
  • 值数据:0
  • 此过程禁用 SMBv1 服务器组件。 必须将此组策略应用于域中所有必要的工作站、服务器和域控制器。

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

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

    SMB v1

    若要禁用 SMBv1 客户端,需要更新服务注册表项以禁用 MRxSMB10 的启动,然后需要从 LanmanWorkstation 对应的项中删除 MRxSMB10 的依赖项,使 LanmanWorkstation 可以正常启动,而无需先启动 MRxSMB10。

    本指南将更新并替换注册表中以下两个项中的默认值:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10

    注册表项:Start REG_DWORD:4 = 禁用

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation

    注册表项:DependOnService REG_MULTI_SZ:"Bowser","MRxSmb20″,"NSI"

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

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

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

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

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

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

  • 操作:更新
  • 配置单元:HKEY_LOCAL_MACHINE
  • 项路径:SYSTEM\CurrentControlSet\services\mrxsmb10
  • 值名称:Start
  • 值类型:REG_DWORD
  • 值数据:4
  • 然后删除已禁用的 MRxSMB10 的依赖项。

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

  • 操作:替换
  • 配置单元:HKEY_LOCAL_MACHINE
  • 项路径:SYSTEM\CurrentControlSet\Services\LanmanWorkstation
  • 值名称:DependOnService
  • 值类型:REG_MULTI_SZ
  • Bowser
  • MRxSmb20
  • 在许多版本的 Windows 中,默认值包含 MRxSMB10,因此将它们替换为此多值字符串实际上是删除了作为 LanmanWorkstation 依赖项的 MRxSMB10,并将四个默认值减少为上述这三个值。

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

  • 重启目标系统以完成禁用 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 中,则组策略管理会显示以下设置。

    测试和验证

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

    不要忘记重启目标系统。

  •  
    推荐文章