2023年11月27日发(作者:)
在Windows服务器中启⽤禁⽤SMBv1、SMBv2和SMBv3的⽅法
本⽂介绍如何在 SMB 客户端和服务器组件上启⽤/禁⽤服务器消息块 SMBv1、SMBv2 和 SMBv3。
注意:建议由专业技术⼯程师完成以下操作。
禁⽤ SMBv2 和 SMBv3 的影响
我们建议不要禁⽤ SMBv2 或 SMBv3。禁⽤ SMBv2 或 SMBv3 只能作为临时故障排除措施。请勿使 SMBv2 或 SMBv3 保持禁⽤状态。
禁⽤ SMBv2 的影响
在 Windows 7 和 Windows Server 2008 R2 中,禁⽤ SMBv2 会停⽤以下功能:
请求复合 - 允许发送多个 SMB 2 请求作为单个⽹络请求
⼤型读写 - 更好地利⽤更快速的⽹络
⽂件夹和⽂件属性缓存 - 客户端保留⽂件夹和⽂件的本地副本
持久句柄 - 如果临时断开连接,则允许连接以透明⽅式重新连接到服务器
改进的消息签名 - HMAC SHA-256 代替 MD5 作为哈希算法
改进的⽂件共享扩展性 - 每个服务器的⽤户数量、共享数量和打开⽂件数量⼤⼤增加
⽀持符号链接
客户端 oplock 租赁模式 - 限制在客户端和服务器之间传输的数据,从⽽提⾼⾼延迟⽹络性能并增强 SMB 服务器的扩展性
⼤型 MTU ⽀持 - 可充分利⽤ 10 千兆字节 (GB) 以太⽹
改进的能效 - 向服务器打开⽂件的客户端可以睡眠
禁⽤ SMBv3 的影响
在 Windows 8、Windows 8.1、Windows 10、Windows Server 2012 和 Windows Server 2016 中,禁⽤ SMBv3 会停⽤以下功能(以及以上列表中所述的 SMBv2 功能):
透明故障转移 - 在维护或故障转移期间,客户端会重新连接,不会⼲扰群集节点
扩展 – 并发访问所有⽂件群集节点上的共享数据
多通道 - 如果客户端和服务器之间有多个路径可⽤时,则聚合⽹络带宽和容错
SMB 直通 – 增加 RDMA ⽹络⽀持,实现极⾼的性能、低延迟和低 CPU 利⽤率
加密 – 提供端到端加密,并防⽌不可靠⽹络上的窃听
⽬录租赁 - 通过缓存改进分⽀机构中应⽤程序的响应时间
性能优化 - 对⼩型随机读/写 I/O 的优化
在 SMB 服务器上启⽤/禁⽤ SMB 协议
Windows 8 和 Windows Server 2012
Windows 8 和 Windows Server 2012 引⼊了新的 Set-SMBServerConfiguration Windows PowerShell cmdlet。 通过此 cmdlet,你可以在服务器组件上启⽤或禁⽤ SMBv1、SMBv2 和 SMBv3 协议。
注意:因为 SMBv2 和 SMBv3 共⽤⼀个堆叠,所以在 Windows 8 或 Windows Server 2012 中启⽤或禁⽤ SMBv2 时,也会启⽤或禁⽤ SMBv3。
使⽤ PowerShell cmdlet
运⾏ Set-SMBServerConfiguration cmdlet 后,⽆须重启计算机。
若要获取 SMB 服务器协议配置的当前状态,请运⾏以下 cmdlet:
Get-SmbServerConfiguration | Select EnableSMB1Protocol, EnableSMB2Protocol
若要在 SMB 服务器上禁⽤ SMBv1,请运⾏以下 cmdlet:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
若要在 SMB 服务器上禁⽤ SMBv2 和 SMBv3,请运⾏以下 cmdlet:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
若要在 SMB 服务器上启⽤ SMBv1,请运⾏以下 cmdlet:
Set-SmbServerConfiguration -EnableSMB1Protocol $true
若要在 SMB 服务器上启⽤ SMBv2 和 SMBv3,请运⾏以下 cmdlet:
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 或注册表编辑器。
使⽤ Windows PowerShell 2.0 或更⾼版本的 PowerShell
若要在 SMB 服务器上禁⽤ SMBv1,请运⾏以下 cmdlet:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB1 -Type DWORD -Value 0 -Force
若要在 SMB 服务器上禁⽤ SMBv2 和 SMBv3,请运⾏以下 cmdlet:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB2 -Type DWORD -Value 0 -Force
若要在 SMB 服务器上启⽤ SMBv1,请运⾏以下 cmdlet:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB1 -Type DWORD -Value 1 -Force
若要在 SMB 服务器上启⽤ SMBv2 和 SMBv3,请运⾏以下 cmdlet:
Set-ItemProperty -Path "HKLM:SYSTEMCurrentControlSetServicesLanmanServerParameters" SMB2 -Type DWORD -Value 1 -Force
注意:进⾏这些更改后,必须重启计算机。
使⽤注册表编辑器
注意:以下内容包含有关如何修改注册表的信息。修改注册表之前,⼀定要先对其进⾏备份。并且⼀定要知道在发⽣问题时如何还原注册表。有关如何备份、还原和修改注册表的更多信息,请查看 。
若要在 SMB 服务器上启⽤或禁⽤ SMBv1,请配置以下注册表项:
注册表⼦项:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters 注册表项: SMB1
REG_DWORD: 0 = 已禁⽤
REG_DWORD: 1 = 已启⽤
默认值: 1 = 已启⽤
若要在 SMB 服务器上启⽤或禁⽤ SMBv2,请配置以下注册表项:
注册表⼦项:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters 注册表项: SMB2
REG_DWORD: 0 = 已禁⽤
REG_DWORD: 1 = 已启⽤
默认值: 1 = 已启⽤
在 SMB 客户端上启⽤/禁⽤ SMB 协议
Windows Vista、Windows Server 2008、Windows 7、Windows Server 2008 R2、Windows 8 和 Windows Server 2012
注意:因为 SMBv2 和 SMBv3 共⽤⼀个堆叠,所以在 Windows 8 或 Windows Server 2012 中启⽤或禁⽤ SMBv2 时,也会启⽤或禁⽤ SMBv3。
若要在 SMB 客户端上禁⽤ SMBv1,请运⾏以下命令:
config lanmanworkstation depend= bowser/mrxsmb20/nsi
config mrxsmb10 start= disabled
若要在 SMB 客户端上启⽤ SMBv1,请运⾏以下命令:
config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
config mrxsmb10 start= auto
若要在 SMB 客户端上禁⽤ SMBv2 和 SMBv3,请运⾏以下命令:
config lanmanworkstation depend= bowser/mrxsmb10/nsi
config mrxsmb20 start= disabled
若要在 SMB 客户端上启⽤ SMBv2 和 SMBv3,请运⾏以下命令:
config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi
config mrxsmb20 start= auto
注意:
必须在提升的命令提⽰符中运⾏这些命令。
进⾏这些更改后,必须重启计算机。
使⽤组策略禁⽤ SMBv1 服务器
这将在注册表中配置以下新项:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters 注册表项: SMB1 REG_DWORD: 0 = Disabled
使⽤组策略配置流程
1、打开组策略管理控制台。右键单击应包含新⾸选项的组策略对象 (GPO),然后单击 编辑。
2、在 计算机配置 下的控制台树中,展开 ⾸选项 ⽂件夹,然后展开 Windows 设置 ⽂件夹。
3、右键单击 注册表 节点,指向 新建,然后选择 注册表项。
4、在 新建注册表属性 对话框中,选择以下内容:
操作: 创建
Hive: HKEY_LOCAL_MACHINE
注册表项路径: SYSTEMCurrentControlSetServicesLanmanServerParameters
值名称: SMB1
值类型: REG_DWORD
值数据: 0
5、将此组策略应⽤到域中所有必需的⼯作站、服务器和域控制器,以禁⽤ SMBv1 服务器组件。也可以将 WMI 筛选器设置为不包含不受⽀持的操作系统或选中的排除项(如 Windows XP)。
注意:在旧版 Windows XP 或 Linux 早期版本以及第三⽅系统(不⽀持 SMBv2 或 SMBv3)需要访问 SYSVOL 或其他⽂件共享(已启⽤ SMB v1)的域控制器上进⾏这些更改时要谨慎⼩⼼。
使⽤组策略禁⽤ SMBv1 客户端
若要禁⽤ SMBv1 客户端,需要将服务注册表项更新为禁⽌ MRxSMB10 启动,然后还需要将 MRxSMB10 的依赖项从 LanmanWorkstation 项中删除,以便它可以正常启动(⽆需⾸先启动
MRxSMB10)。
这将更新和替换注册表以下 2 个项中的默认值
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservicesmrxsmb10 注册表项: Start REG_DWORD: 4 = Disabled
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanWorkstation 注册表项: DependOnService REG_MULTI_SZ: “Bowser”,”MRxSmb20″,”NSI”
注意:默认包含的 MRxSMB10 现已作为依赖项删除。
使⽤组策略配置流程
1、打开组策略管理控制台。右键单击应包含新⾸选项的组策略对象 (GPO),然后单击 编辑。
2、在 计算机配置 下的控制台树中,展开 ⾸选项 ⽂件夹,然后展开 Windows 设置 ⽂件夹。
3、右键单击 注册表 节点,指向 新建,然后选择 注册表项。
4、在 新建注册表属性 对话框中,选择以下内容:
操作: 更新
Hive: HKEY_LOCAL_MACHINE
注册表项路径: SYSTEMCurrentControlSetservicesmrxsmb10
值名称: Start
值类型: REG_DWORD
值数据: 4
然后删除刚刚禁⽤的 MRxSMB10 的依赖项
5、在 新建注册表属性 对话框中,选择以下内容:
操作: 替换
Hive: HKEY_LOCAL_MACHINE
注册表项路径: SYSTEMCurrentControlSetServicesLanmanWorkstation
值名称: DependOnService
值类型 REG_MULTI_SZ
值数据:
Bowser
MRxSmb20
NSI
注意: 这 3 个字符串不带项⽬符号(具体如下)
在 Windows 的多个版本中,默认值包括 MRxSMB10,通过将其替换为此多值字符串,实际上就删除了作为 LanmanServer 依赖项的 MRxSMB10,结果是从四个默认值减少为上述这三个值。
注意:使⽤组策略管理控制台时,⽆需使⽤引号或逗号。只需在各⾏键⼊每个项,如上⾯所⽰。
需要重新启动
应⽤策略且正确设置注册表后,必须重新启动⽬标系统,然后才能禁⽤ SMB v1。
摘要
如果所有设置均在同⼀组策略对象 (GPO) 中,组策略管理将显⽰以下设置。
测试和验证
配置完成后即允许策略进⾏复制和更新。作为测试的必要步骤,请从 提⽰符处运⾏ gpupdate/force,然后查看⽬标计算机,以确保注册表设置得以正确应⽤。确保 SMBv2 和 SMBv3 在环境中
的所有其他系统中正常运⾏。
注意:请务必重新启动⽬标系统。
如何在 Windows 8.1、Windows 10、Windows 2012 R2 和 Windows Server 2016 中轻松删除 SMBv1
Windows Server:使⽤ “服务器管理器”
Windows Server:使⽤ PowerShell (Remove-WindowsFeature FS-SMB1)
Windows 客户端:使⽤ “添加或删除程序”
Windows 客户端:使⽤ PowerShell (Disable-WindowsOptionalFeature -Online -FeatureName smb1protocol)
参考与适⽤性
本⽂来源⾃微软官⽅技术⽂档:。
如有变化,以微软官⽅为准。


发布评论