在 Windows 中检测、启用和禁用 SMBv1、SMBv2 和 SMBv3
本文内容
禁用 SMBv2 或 SMBv3 以排除故障
使用 PowerShell 删除 SMBv1
使用命令行或注册表编辑器管理 SMB 协议
使用组策略禁用 SMBv1
本文介绍如何在 SMB 客户端和服务器组件上启用或禁用服务器消息块(SMB)版本 1(SMBv1)、SMB 版本 2(SMBv2)和 SMB 版本 3(SMBv3)。
如果禁用或删除 SMBv1,则可能会遇到旧计算机或软件的兼容性问题。 SMBv1 存在严重的安全漏洞,强烈建议不要使用它 。 默认情况下,SMBv1 在任何版本的 Windows 11 或 Windows Server 2019 及更高版本中都未安装 。 默认情况下,SMBv1 也不会在 Windows 10 中安装,但家庭版和专业版除外。 建议不要重新安装 SMBv1,而是更新仍需要它的 SMB 服务器。 有关需要使用 SMBv1 的合作伙伴及其移除 SMBv1 要求的更新,请参阅 SMB1 产品信息库 。
我们建议保持启用 SMBv2 和 SMBv3,但你可能发现,暂时禁用其中一个版本可以方便进行故障排除。 有关详细信息,请参阅 使用命令行或注册表编辑器管理 SMB 协议 。
禁用 SMBv3 会停用以下功能:
在维护或故障转移期间,透明故障转移为客户端提供了一种不中断地重新连接到群集节点的方法。
横向扩展:提供对所有文件群集节点上共享数据的并发访问
SMB 多通道:如果客户端和服务器之间提供了多个路径,则有助于聚合网络带宽和容错
SMB 直通:支持远程直接内存访问(RDMA)网络以实现高性能、低延迟和低 CPU 使用率
加密:提供端到端加密,并提供对不可信网络上窃听的保护
目录租赁:通过缓存改进分支机构的应用程序响应时间
性能优化:优化小型随机读/写I/O操作
禁用 SMBv2 会停用以下功能:
请求复合:支持以单个网络请求的形式发送多个 SMBv2 请求
更高的读取和写入速度:改善对更快网络的利用
缓存文件夹和文件属性:使客户端能够保留文件夹和文件的本地副本
持久句柄:为连接在暂时断开后以透明方式重新连接服务器提供了一种方法
改进了信息签名:使用基于散列的消息验证码 (HMAC) 安全散列算法 (SHA),以 256 位摘要 (HMAC SHA-256) 代替消息加密算法 5 (MD5) 作为散列算法
改进了文件共享的可伸缩性:大大增加了每个服务器的用户数、共享和打开文件数
支持符号链接
客户端 oplock 租赁模型:限制客户端和服务器之间传输的数据,提高高延迟网络的性能并提高 SMB 服务器可伸缩性
最大最大传输单元(MTU)支持:支持充分利用 10 千兆位以太网(GbE)
提高能效:为服务器上打开文件的客户端提供一种休眠方式
SMBv2 协议是在 Windows Vista 和 Windows Server 2008 中引入的。 SMBv3 协议是在 Windows 8 和 Windows Server 2012 中引入的。 有关 SMBv2 和 SMBv3 功能的详细信息,请参阅以下文章:
可以使用 Get-WindowsOptionalFeature 、Disable-WindowsOptionalFeature ,Enable-WindowsOptionalFeature PowerShell 命令来检测、禁用和启用 SMBv1 客户端或服务器。 在权限提升的命令提示符下运行以下命令。
备注
运行 PowerShell 命令以禁用或启用 SMBv1 后,计算机将重启。
检测:
Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
禁用:
Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
启用:
Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
默认情况下,SMBv1 不会安装在 Windows Server 2019 及更高版本上。 在早期版本的 Windows Server 上,可以使用服务器管理器删除 SMBv1:
在要从中删除 SMBv1 的服务器上,打开服务器管理器。
在“服务器管理器仪表板”“配置此本地服务器 ”下,选择“添加角色和功能 。
在“开始之前”页上选择“启动‘删除角色和功能’向导”,然后在随后出现的页上选择“下一步”。
在“选择目标服务器” 页上,在“服务器池” 下,确保选择要从中删除该功能的服务器,然后选择“下一步” 。
在“删除服务器角色”页上,选择“下一步”。
在 删除功能 页上,取消选中 SMB 1.0/CIFS 文件共享支持 的复选框,然后选择 “下一步” 。
在“确认删除所选内容”页上,确认已列出该功能,然后选择“删除”。
在 Windows 8.1、Windows 10 和 Windows 11 上,可以使用“删除程序”禁用 SMBv1。
若要在这些作系统上禁用 SMBv1,请执行以下步骤:
在“控制面板”中,选择“程序和功能”。
在 控制面板主页 下,选择 打开或关闭 Windows 功能 打开 Windows 功能 对话框。
在“Windows 功能 ”对话框中,向下滚动列表,清除 SMB 1.0/CIFS 文件共享支持 复选框,然后选择“确定” 。
在 Windows 应用更改后,在确认页上选择“立即重启”。
从 Windows 10 Fall Creators Update 和 Windows Server 2019 开始,默认情况下不再安装 SMBv1。 有关详细信息,请参阅 windows 10 版本 1709、Windows Server 版本 1709 及更高版本 中默认未安装 SMBv1。
在 Windows 8 或 Windows Server 2012 中启用或禁用 SMBv2 时,也会启用或禁用 SMBv3。 出现此行为是因为这些协议共享同一个堆栈。
可以使用 Set-SMBServerConfiguration cmdlet 在服务器组件上启用或禁用 SMBv1、SMBv2 和 SMBv3 协议。 可以使用 Get-SmbServerConfiguration cmdlet 检索 SMB 服务器配置。
运行 Set-SMBServerConfiguration cmdlet 后,无需重启计算机。
检测:
Get-SmbServerConfiguration | Select EnableSMB1Protocol
禁用:
Set-SmbServerConfiguration -EnableSMB1Protocol $false
启用:
Set-SmbServerConfiguration -EnableSMB1Protocol $true
有关详细信息,请参阅 停止使用 SMB1 。
检测:
Get-SmbServerConfiguration | Select EnableSMB2Protocol
禁用:
Set-SmbServerConfiguration -EnableSMB2Protocol $false
启用:
Set-SmbServerConfiguration -EnableSMB2Protocol $true
在 Windows 7、Windows Server 2008 R2、Windows Vista 和 Windows Server 2008 上启用或禁用 SMB
若要在运行 Windows 7、Windows Server 2008 R2、Windows Vista 或 Windows Server 2008 的 SMB 服务器上启用或禁用 SMB 协议,请使用 Windows PowerShell 或注册表编辑器,如以下部分所述。
可以使用 Get-Item 、Get-ItemProperty 和 Set-ItemProperty cmdlet 来检测、启用和禁用 SMB 协议。
备注
以下部分中的命令需要 PowerShell 2.0 或更高版本。
检测:
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
有关详细信息,请参阅 停止使用 SMB1 。
检测:
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
配置具有以下属性的条目:
对于名称,请使用 SMB1 。
对于类型,请使用 REG_DWORD 。
对于数据,请使用 0 表示禁用 ,使用 1 表示启用 。 默认值是 1 ,或 启用 。 在这种情况下,不会创建注册表项目。
若要在 SMB 服务器上启用或禁用 SMBv2,请打开注册表编辑器并转到以下注册表项路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
配置具有以下属性的条目:
对于名称,请使用 SMB2 。
对于类型,请使用 REG_DWORD 。
对于数据,请使用 0 表示禁用 ,使用 1 表示启用 。 默认值为1 或 “已启用”。 在这种情况下,不会创建注册表项目。
下面介绍如何在运行 Windows 客户端和 Windows Server 的 SMB 客户端上检测状态、启用和禁用 SMB 协议。
检测:
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
有关详细信息,请参阅 停止使用 SMB1 。
检测:
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。 可以在各种版本的 Windows 上使用此方法。
可以通过在注册表中配置以下新项,在 SMB 服务器上禁用 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 服务器组件。 必须将此策略应用于域中所有必要的工作站、服务器和域控制器。
备注
你可以设置 Windows Management Instrumentation (WMI) 筛选器以排除特定作系统或排除客户端或服务器作系统。 有关详细信息,请参阅 组策略筛选 和 为 GPO 创建 WMI 筛选器。
重要
某些系统需要访问 SYSVOL 文件夹或其他文件共享,但不支持 SMBv2 或 SMBv3。 此类系统的示例包括旧版 Windows 系统和旧版 Linux 和合作伙伴系统。 在这些系统上的域控制器上禁用 SMBv1 时,请小心。
若要禁用 SMBv1 客户端,需要更新服务注册表项以防止启动 MRxSMB10 驱动程序。 然后,需要从 LanmanWorkstation 的条目中删除对 MRxSMB10 的依赖项,以便它可以正常启动,而无需先启动 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
值数据 :
备注
不要在三个值数据 字符串中包含项目符号。 仅列出字符串,如以下屏幕截图所示。
在许多 Windows 版本中,默认值包括 MRxSMB10 。 通过将默认值替换为这三个字符串,可以有效地删除 MRxSMB10 作为 LanmanWorkstation 的依赖项。 使用这三个值而不是四个默认值。
备注
使用组策略管理控制台时,无需使用引号或逗号。 只需独行键入每个项即可。
若要完成禁用 SMBv1,请重启目标系统。
若要确定哪些客户端尝试使用 SMBv1 连接到 SMB 服务器,可以在 Windows Server 和 Windows 客户端上启用审核。 若要启用或禁用审核,请使用 Set-SmbServerConfiguration cmdlet。 若要检查审核状态,请使用 Get-SmbServerConfiguration cmdlet。
启用:
Set-SmbServerConfiguration -AuditSmb1Access $true
禁用:
Set-SmbServerConfiguration -AuditSmb1Access $false
检测:
Get-SmbServerConfiguration | Select AuditSmb1Access
启用 SMBv1 审核后,可以检查 Microsoft-Windows-SMBServer\Audit
事件日志中是否有访问事件。 每次客户端尝试使用 SMBv1 连接到服务器时,日志中都会显示一个事件 ID 为 3000 的条目。
如果所有设置都位于同一 GPO 中,组策略管理将显示以下设置:
组策略配置时,请完成组策略管理控制台中的所有步骤后,给组策略留出一定的时间以将更新应用到设置。 如果需要进行测试,请在命令提示符处运行 gpupdate /force
,然后查看目标计算机以确保正确应用注册表设置。 确保 SMBv2 和 SMBv3 可对环境中的所有其他系统正常运行。