如何在 Windows 中偵測、啟用和停用 SMBv1、SMBv2 和 SMBv3 (部分機器翻譯)

適用于:Windows Server 2022、Windows 10、Windows 8.1、Windows 8、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2、Windows Server 2012

本文說明如何在 SMB 用戶端和伺服器元件上啟用和停用 SMB (SMB) 第 1 版 (SMBv1) 、SMB 第 2 版 (SMBv2) ,以及 SMB 第 3 版 (SMBv3) 。

雖然停用或移除 SMBv1 可能會導致舊電腦或軟體有一些相容性問題,但 SMBv1 有顯著的安全性弱點, 強烈建議您不要使用它

停用 SMBv2 或 SMBv3 以進行疑難排解

建議您讓 SMBv2 和 SMBv3 保持啟用狀態,但您可能會發現暫時停用一個進行疑難排解會很有用。 如需詳細資訊,請參閱 如何在 SMB 伺服器上偵測狀態、啟用和停用 SMB 通訊協定

在 Windows 10 中,Windows 8.1、Windows Server 2019、Windows Server 2016、Windows Server 2012 R2 和 Windows Server 2012,停用 SMBv3 會停用下列功能:

  • 透明容錯移轉 - 用戶端會在維護或容錯移轉期間重新連線,而不會中斷叢集節點
  • Scale Out - 在所有檔案叢集節點上平行存取共用資料
  • 多重通道 - 如果用戶端和伺服器之間有多個路徑可用,則網路頻寬和容錯的匯總
  • SMB 直接傳輸 - 為高效能新增 RDMA 網路支援,且低延遲和低 CPU 使用量
  • 加密 - 提供端對端加密,並防止不受信任的網路上竊聽
  • 目錄租用 - 透過快取改善分公司的應用程式回應時間
  • 效能優化 - 小型隨機讀取/寫入 I/O 的優化

在 Windows 7 和 Windows Server 2008 R2 中,停用 SMBv2 會停用下列功能:

  • 要求複合 - 允許以單一網路要求的形式傳送多個 SMBv2 要求
  • 較大的讀取和寫入 - 更快速地使用網路
  • 快取資料夾和檔案屬性 - 用戶端保留資料夾和檔案的本機副本
  • 長期控制碼 - 允許連線在暫時中斷連線時以透明方式重新連線到伺服器
  • 改善訊息簽署 - HMAC SHA-256 會將 MD5 取代為雜湊演算法
  • 改善檔案共用的延展性 - 每個伺服器的使用者、共用和開啟檔案數目大幅增加
  • 支援符號連結
  • 用戶端 oplock 租用模型 - 限制在用戶端與伺服器之間傳輸的資料、改善高延遲網路的效能,以及增加 SMB 伺服器延展性
  • 大型 MTU 支援 - 完整使用 10 GbE 乙太網路 (GbE)
  • 改善的能源效率 - 對伺服器開啟檔案的用戶端可以睡眠

SMBv2 通訊協定是在 Windows Vista 和 Windows Server 2008 中引進,而 SMBv3 通訊協定是在 Windows 8 和 Windows Server 2012 中引進。 如需 SMBv2 和 SMBv3 功能的詳細資訊,請參閱下列文章:

如何移除 SMBv1

以下是如何在 Windows 10、Windows 8.1、Windows Server 2019、Windows Server 2016 和 Windows 2012 R2 中移除 SMBv1。

PowerShell 方法

以下是使用 PowerShell 命令來偵測、停用和啟用 SMBv1 用戶端和伺服器的步驟。

注意

執行 PowerShell 命令以停用或啟用 SMBv1 之後,電腦將會重新開機。

  • 檢測:

    Get-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    
  • 禁用:

    Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    
  • 啟用:

    Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    

Windows Server 2012 Windows Server 2012 R2、Windows Server 2016、Windows Server 2019:伺服器管理員 方法

Server Manager - Dashboard method

若要從 Windows Server 移除 SMBv1:

  1. 在您要移除 SMBv1 之伺服器的 [伺服器管理員儀表板] 上,于 [設定此本機伺服器] 底下,選取 [新增角色和功能]。
  2. 在 [ 開始之前] 頁面上,選取 [ 開始移除角色及功能精靈],然後在下列頁面上,選取 [ 下一步]。
  3. 在 [伺服器集區] 下的 [選取目的地伺服器]頁面上,確定已選取要從中移除功能的伺服器,然後選取 [下一步]。
  4. 在 [ 移除伺服器角色 ] 頁面上,選取 [ 下一步]。
  5. 在 [ 移除功能 ] 頁面上,清除 SMB 1.0/CIFS 檔案共用支援的 核取方塊,然後選取 [ 下一步]。
  6. 在 [ 確認移除選取專案 ] 頁面上,確認功能已列出,然後選取 [ 移除]。

Windows 8.1和Windows 10:新增或移除程式方法

Add-Remove Programs client method

若要在 Windows 8.1 和 Windows 10 上停用 SMBv1:

  1. 在 [控制台] 中,選取 [程式和功能]。
  2. [主控台首頁]底下,選取 [開啟或關閉Windows功能] 以開啟[Windows 功能]方塊。
  3. [Windows功能] 方塊中,向下捲動清單,清除SMB 1.0/CIFS 檔案共用支援的核取方塊,然後選取 [確定]。
  4. Windows套用變更之後,請在確認頁面上選取 [立即重新開機]。

如何在 SMB 伺服器上偵測狀態、啟用和停用 SMB 通訊協定

針對 Windows 8.1、Windows Server 2012、Windows Server 2012 R2、Windows 10 和 Windows Server 2019

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 伺服器上的 SMBv1

  • 檢測:

    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

若要在執行 Windows 7 的 SMB 伺服器上啟用或停用 SMB 通訊協定,Windows Server 2008 R2、Windows Vista 或 Windows Server 2008,請使用 Windows PowerShell 或登錄編輯程式。

PowerShell 方法

注意

此方法需要 PowerShell 2.0 或更新版本的 PowerShell。

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)

注意

 進行這些變更之後,您必須重新開機電腦。

如何在 SMB 用戶端上偵測狀態、啟用和停用 SMB 通訊協定

以下是如何在執行Windows 10、Windows Server 2019、Windows 8.1、Windows Server 2016、Windows Server 2012 R2 的 SMB 用戶端上偵測狀態、啟用和停用 SMB 通訊協定Windows Server 2012。

注意

當您在 Windows 8 或 Windows Server 2012 中啟用或停用 SMBv2 時,也會啟用或停用 SMBv3。 發生此行為的原因是這些通訊協定會共用相同的堆疊。

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 用戶端上的 SMBv2/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

本節介紹如何使用 群組原則 來停用 SMBv1。 您可以在不同版本的 Windows上使用此方法。

停用 SMBv1 伺服器

此程式會在登錄中設定下列新專案:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

  • 登錄專案: SMB1
  • REG_DWORD: 0 = 已停用

若要使用群組原則來設定此問題,請遵循下列步驟:

  1. 開啟 [群組原則管理主控台]。 在應包含新的喜好設定項目之群組原則物件 (GPO) 上按一下滑鼠右鍵,然後按一下 [編輯]

  2. 在 [電腦設定] 下的主控台樹中,展開[喜好設定] 資料夾,然後展開[Windows 設定] 資料夾。

  3. 以滑鼠右鍵按一下 [ 登錄 ] 節點,指向 [ 新增],然後選取 [ 登錄專案]。

    Registry - New - Registry Item

在 [ 新增登錄屬性 ] 對話方塊中,選取下列專案:

  • 動作:更新
  • Hive:HKEY_LOCAL_MACHINE
  • 索引鍵路徑:SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • 值名稱:SMB1
  • 實數值型別:REG_DWORD
  • 值資料:0

New Registry Properties - General

此程式會停用 SMBv1 伺服器元件。 此群組原則必須套用至網域中所有必要的工作站、伺服器和網域控制站。

注意

 WMI 篩選也可以設定為排除不支援的作業系統或選取的排除專案,例如Windows XP。

重要

當您在舊版 Windows XP 或舊版 Linux 和協力廠商系統上進行這些變更時,請小心, (不支援 SMBv2 或 SMBv3) 需要存取 SYSVOL 或其他停用 SMB v1 的檔案共用。

停用 SMBv1 用戶端

若要停用 SMBv1 用戶端,必須更新服務登錄機碼以停用MRxSMB10的啟動,然後必須從LanmanWorkstation的專案中移除對 MRxSMB10的相依性,才能正常啟動,而不需要先啟動 MRxSMB10

本指南會更新並取代登錄中下列兩個專案中的預設值:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\mrxsmb10

登錄專案: 開始 REG_DWORD: 4= 停用

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation

登錄專案: DependOnService REG_MULTI_SZ: 「Bowser」,「MRxSmb20」,「NSI」

注意

 預設包含的 MRxSMB10,現在已移除為相依性。

若要使用 群組原則進行這項設定,請遵循下列步驟:

  1. 開啟 [群組原則管理主控台]。 以滑鼠右鍵按一下應包含新喜好設定專案的 GPO,然後按一下 [ 編輯]。

  2. 在 [電腦設定] 下的主控台樹中,展開[喜好設定] 資料夾,然後展開[Windows 設定] 資料夾。

  3. 以滑鼠右鍵按一下 [ 登錄 ] 節點,指向 [ 新增],然後選取 [ 登錄專案]。

  4. 在 [ 新增登錄屬性 ] 對話方塊中,選取下列專案:

    • 動作:更新
    • Hive:HKEY_LOCAL_MACHINE
    • 索引鍵路徑:SYSTEM\CurrentControlSet\services\mrxsmb10
    • 值名稱:開始
    • 實數值型別:REG_DWORD
    • 數值資料:4

    Start Properties - General

  5. 然後移除已停用 之 MRxSMB10 的相依性。

    在 [ 新增登錄屬性 ] 對話方塊中,選取下列專案:

    • 動作:取代
    • Hive:HKEY_LOCAL_MACHINE
    • 索引鍵路徑:SYSTEM\CurrentControlSet\Services\LanmanWorkstation
    • 值名稱:DependOnService
    • 實數值型別:REG_MULTI_SZ
    • 值資料
      • Bowser
      • MRxSmb20
      • NSI

    注意

    這三個字串不會有專案符號, (會看到下列螢幕擷取畫面) 。

    DependOnService Properties

    預設值包含許多版本的MRxSMB10 Windows,因此,藉由以這個多重值字串取代MRxSMB10,它實際上會將 MRxSMB10移除為LanmanWorkstation的相依性,並從四個預設值向下移至上述三個值。

    注意

    當您使用 群組原則 Management Console 時,不需要使用引號或逗號。 只要在個別行上輸入每個專案即可。

  6. 重新開機目標系統以完成停用 SMB v1。

稽核 SMBv1 使用量

若要判斷哪些用戶端嘗試使用 SMBv1 連線到 SMB 伺服器,您可以在 Windows Server 2016、Windows 10 和 Windows Server 2019 上啟用稽核。 如果已安裝 2018 年 5 月更新,您也可以稽核 Windows 7 和 Windows Server 2008 R2,以及安裝 2017 年 7 月更新時,Windows 8.1和Windows Server 2012 R2。

  • 啟用:

    Set-SmbServerConfiguration -AuditSmb1Access $true
    
  • 禁用:

    Set-SmbServerConfiguration -AuditSmb1Access $false
    
  • 檢測:

    Get-SmbServerConfiguration | Select AuditSmb1Access
    

啟用 SMBv1 稽核時,事件 3000 會出現在「Microsoft-Windows-SMBServer\Audit」事件記錄檔中,識別每個嘗試與 SMBv1 連線的用戶端。

總結

如果所有設定都位於相同的 GPO 中,群組原則管理會顯示下列設定。

Group Policy Management Editor - Registry

測試和驗證

完成本文中的設定步驟之後,允許原則複寫和更新。 視需要進行測試,請在命令提示字元執行 gpupdate /force ,然後檢閱目的電腦,以確定已正確套用登錄設定。 請確定 SMBv2 和 SMBv3 適用于環境中所有其他系統。

注意

別忘了重新開機目標系統。