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

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

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

雖然停用或移除 SMBv1 可能會導致舊電腦或軟體有一些相容性問題,但 SMBv1 有顯著的安全性弱點, 強烈建議您不要使用它SMB 1.0 預設不會安裝在任何版本的 Windows 11 或 Windows Server 2019 和更新版本中。 除了家用版和專業版以外,預設也不會在 Windows 10 中安裝 SMB 1.0。 建議您不要重新安裝 SMB 1.0,而是更新仍需要它的 SMB 伺服器。 如需需要 SMB 1.0 的協力廠商清單及其移除需求的更新,請檢閱 SMB1 產品清除中心

停用 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 功能的詳細資訊,請參閱下列文章:

如何透過 PowerShell 移除 SMBv1

以下是使用具有提高許可權的 PowerShell 命令來偵測、停用及啟用 SMBv1 用戶端和伺服器的步驟。

注意

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

  • 偵測:

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

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

    Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    

提示

您可以執行下列命令來偵測 SMBv1 狀態,而不需要提高許可權: Get-SmbServerConfiguration | Format-List EnableSMB1Protocol

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

伺服器管理員 - 儀表板方法

若要從 Windows Server 移除 SMBv1:

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

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

Add-Remove Programs 用戶端方法

若要停用所提及作業系統的 SMBv1:

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

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

注意

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

Windows 8和Windows Server 2012引進了新的Set-SMBServerConfiguration Windows PowerShell Cmdlet。 Cmdlet 可讓您在伺服器元件上啟用或停用 SMBv1、SMBv2 和 SMBv3 通訊協定。

執行 Set-SMBServerConfiguration Cmdlet 之後,您不需要重新開機電腦。

SMBv1

  • 偵測:

    Get-SmbServerConfiguration | Select EnableSMB1Protocol
    
  • 禁用:

    Set-SmbServerConfiguration -EnableSMB1Protocol $false
    
  • 啟用:

    Set-SmbServerConfiguration -EnableSMB1Protocol $true
    

如需詳細資訊,請參閱 Microsoft 的伺服器儲存體

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、Windows Server 2008 R2、Windows Vista 或 Windows Server 2008 的 SMB 伺服器上啟用或停用 SMB 通訊協定,請使用 Windows PowerShell 或登錄編輯程式。

其他 PowerShell 方法

注意

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

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)

注意

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

使用 群組原則 停用 SMBv1

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

SMBv1

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

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

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

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

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

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

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

    登錄 - 新增 - 登錄專案

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

  • 動作:建立
  • Hive:HKEY_LOCAL_MACHINE
  • 機碼路徑:SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • 數值名稱:SMB1
  • 實數值型別:REG_DWORD
  • 數值資料:0

新增登錄屬性 - 一般

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

注意

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

重要

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

稽核 SMBv1 使用量

若要判斷哪些用戶端嘗試使用 SMBv1 連線到 SMB 伺服器,您可以在 Windows Server 2016、Windows 10 和 Windows Server 2019 上啟用稽核。 您也可以在 Windows 7 和 Windows Server 2008 R2 上稽核是否已安裝 2018 年 5 月每月更新,並在安裝 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 中,群組原則管理會顯示下列設定。

群組原則管理編輯器 - 登錄

測試和驗證

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

注意

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