本文介紹如何在 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 2012Windows 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
注意:進行這些更改後,必須重啟計算機。
使用注冊表編輯器 注意:以下內容包含有關如何修改注冊表的信息。修改注冊表之前,一定要先對其進行備份。並且一定要知道在發生問題時如何還原注冊表。有關如何備份、還原和修改注冊表的更多信息,請查看 如何在 Windows 中備份和還原注冊表。
若要在 SMB 服務器上啟用或禁用 SMBv1,請配置以下注冊表項:
注冊表子項:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters 注冊表項: SMB1REG_DWORD: 0 = 已禁用REG_DWORD: 1 = 已啟用默認值: 1 = 已啟用若要在 SMB 服務器上啟用或禁用 SMBv2,請配置以下注冊表項:
注冊表子項:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters 注冊表項: SMB2REG_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,請運行以下命令:
sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi sc.exe config mrxsmb10 start= disabled
若要在 SMB 客戶端上啟用 SMBv1,請運行以下命令:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi sc.exe config mrxsmb10 start= auto
若要在 SMB 客戶端上禁用 SMBv2 和 SMBv3,請運行以下命令:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/nsi sc.exe config mrxsmb20 start= disabled
若要在 SMB 客戶端上啟用 SMBv2 和 SMBv3,請運行以下命令:
sc.exe config lanmanworkstation depend= bowser/mrxsmb10/mrxsmb20/nsi sc.exe 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 = DisabledHKEY_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值數據:BowserMRxSmb20NSI注意: 這 3 個字符串不帶項目符號(具體如下)

在 Windows 的多個版本中,默認值包括 MRxSMB10,通過將其替換為此多值字符串,實際上就刪除了作為 LanmanServer 依賴項的 MRxSMB10,結果是從四個默認值減少為上述這三個值。
注意:使用組策略管理控制台時,無需使用引號或逗號。只需在各行鍵入每個項,如上面所示。
需要重新啟動 應用策略且正確設置注冊表後,必須重新啟動目標系統,然後才能禁用 SMB v1。
摘要如果所有設置均在同一組策略對象 (GPO) 中,組策略管理將顯示以下設置。
測試和驗證 配置完成後即允許策略進行複制和更新。作為測試的必要步驟,請從 CMD.EXE 提示符處運行 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)

參考與適用性
本文來源自微軟官方技術文檔:如何在 Windows 和 Windows Server 中啟用和禁用 SMBv1、SMBv2 和 SMBv3。
如有變化,以微軟官方為准。
這篇文章中的信息適用於:
Windows 10 Pro released in July 2015,Windows 10 Enterprise released in July 2015Windows Vista EnterpriseWindows Vista BusinessWindows Vista Home BasicWindows Vista Home PremiumWindows Vista UltimateWindows 7 EnterpriseWindows 7 Home BasicWindows 7 Home PremiumWindows 7 ProfessionalWindows 7 UltimateWindows Server 2008 DatacenterWindows Server 2008 EnterpriseWindows Server 2008 StandardWindows Server 2008 R2 DatacenterWindows Server 2008 R2 EnterpriseWindows Server 2008 R2 StandardWindows 8Windows 8 EnterpriseWindows 8 ProWindows Server 2012 DatacenterWindows Server 2012 DatacenteWindows Server 2012 EssentialsWindows Server 2012 FoundationWindows Server 2012 FoundationWindows Server 2012 StandardWindows Server 2012 StandardWindows Server 2016