本文介绍如何在 SMB 客户端和服务器组件上启用和禁用服务器消息块 (SMB) 版本 1 (SMBv1)、SMB 版本 2 (SMBv2) 和 SMB 版本 3 (SMBv3)。
警告:我们建议你不要禁用 SMBv2 或 SMBv3。 禁用 SMBv2 或 SMBv3 只能作为临时故障排除措施。 请勿使 SMBv2 或 SMBv3 保持禁用状态。
在 Windows 7 和 Windows Server 2008 R2 中,禁用 SMBv2 会停用以下功能:
在 Windows 8、Windows 8.1、Windows 10、Windows Server 2012 和 Windows Server 2016 中,禁用 SMBv3 会停用以下功能(以及以上列表中所述的 SMBv2 功能):
Windows Vista 和 Windows Server 2008 中引入了 SMBv2 协议。
Windows 8 和 Windows Server 2012 中引入了 SMBv3 协议。
有关 SMBv2 和 SMBv3 功能的更多信息,请访问以下 Microsoft TechNet 网站:
服务器消息块概述
SMB 中的新增功能
Windows Server 2012 R2 & 2016: PowerShell 方法
SMB v1
检测: |
Get-WindowsFeature FS-SMB1 |
禁用: |
Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol |
启用: |
Enable-WindowsOptionalFeature -Online -FeatureName smb1protocol |
SMB v2/v3
检测: |
Get-SmbServerConfiguration | Select EnableSMB2Protocol |
禁用: |
Set-SmbServerConfiguration -EnableSMB2Protocol $false |
启用: |
Set-SmbServerConfiguration -EnableSMB2Protocol $true |
Windows Server 2012 R2 和 Windows Server 2016: 禁用 SMB 的“服务器管理器”方法
SMB v1
Windows 8.1 和 Windows 10: PowerShell 方法
SMB v1 协议
检测: | Get-WindowsOptionalFeature –Online –FeatureName SMB1Protocol |
禁用: | Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol |
启用: | Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol |
SMB v2/v3 协议
检测: | Get-SmbServerConfiguration | Select EnableSMB2Protocol |
禁用: | Set-SmbServerConfiguration –EnableSMB2Protocol $false |
启用: | Set-SmbServerConfiguration –EnableSMB2Protocol $true |
Windows 8.1 和 Windows 10: “添加或删除程序”方法
对于 Windows 8 和 Windows Server 2012
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 服务器上的 SMB v1
检测: | 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 的 SMB 服务器上启用或禁用 SMB 协议,请使用 Windows PowerShell 或注册表编辑器。
PowerShell 方法
注意:此方法需要 PowerShell 2.0 或更高版本的 PowerShell。
SMB 服务器上的 SMB v1
检测: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 服务器上的 SMB v2/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
注意进行这些更改后,必须重启计算机。
注册表编辑器
重要说明 本文包含有关如何修改注册表的信息。 修改注册表之前,一定要先对其进行备份。 并且一定要知道在发生问题时如何还原注册表。 有关如何备份、还原和修改注册表的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756 如何在 Windows 中备份和还原注册表
若要在 SMB 服务器上启用或禁用 SMBv1,请配置以下注册表项:
若要在 SMB 服务器上启用或禁用 SMBv2,请配置以下注册表项:
注意 进行这些更改后,必须重启计算机。
对于 Windows Vista、Windows Server 2008、Windows 7、Windows Server 2008 R2、Windows 8 和 Windows Server 2012
注意 :在 Windows 8 或 Windows Server 2012 中启用或禁用 SMBv2 时,也会启用或禁用 SMBv3。 之所以会出现此行为是因为这些协议共享同一个堆叠。
SMB 客户端上的 SMB v1
检测: | 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 |
注意:
- 必须在提升的命令提示符中运行这些命令。
- 进行这些更改后,必须重启计算机。
此过程将在注册表中配置以下新项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
注册表项: SMB1 REG_DWORD: 0 = Disabled
使用组策略进行配置:
在“新建注册表属性”对话框中,选择以下内容:
这会禁用 SMBv1 服务器组件。 必须将此组策略应用到域中所有必需的工作站、服务器和域控制器。
注意 也可以将 WMI 筛选器设置为不包含不受支持的操作系统或选中的排除项(如 Windows XP)。
警告:在旧版 Windows XP 或 Linux 早期版本以及第三方系统(不支持 SMBv2 或 SMBv3)需要访问 SYSVOL 或已禁用 SMB v1 的其他文件共享的域控制器上进行这些更改时要谨慎小心。
若要禁用 SMBv1 客户端,需要将服务注册表项更新为禁止 MRxSMB10 启动,然后还需要将 MRxSMB10 的依赖项从 LanmanWorkstation 项中删除,以便它可以正常启动(无需首先启动 MRxSMB10)。
这将更新和替换以下 2 个注册表项中的默认值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10
注册表项: Start REG_DWORD: 4 = Disabled
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation
注册表项: DependOnService REG_MULTI_SZ: “Bowser”,”MRxSmb20″,”NSI”
注意 默认包含的 MRxSMB10 现已作为依赖项删除
使用组策略进行配置:
在“新建注册表属性”对话框中,选择以下内容:
然后删除刚刚禁用的 MRxSMB10 的依赖项
在“新建注册表属性”对话框中,选择以下内容:
注意 这三个字符串不带项目符号(参见以下屏幕截图)。
在 Windows 的多个版本中,默认值包括 MRxSMB10,通过将其替换为此多值字符串,实际上就删除了作为 LanmanServer 依赖项的 MRxSMB10,结果是从四个默认值减少为上述这三个值。
注意 使用组策略管理控制台时,不必使用引号或逗号。 只需在各行键入每个项。
应用策略且正确设置注册表后,必须重启目标系统,然后才能禁用 SMB v1。
如果所有设置均在同一组策略对象 (GPO) 中,组策略管理将显示以下设置。
配置完成后,允许策略进行复制和更新。 作为测试的必要步骤,请在命令提示符处运行 gpupdate /force,然后查看目标计算机,以确保注册表设置得以正确应用。 确保 SMB v2 和 SMB v3 在环境中的所有其他系统中正常运行。
警告:请勿忘记重启目标系统。
参考:https://support.microsoft.com/zh-cn/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and