如何在 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) 第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 Gigabit Ethernet (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:伺服器管理員方法

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

若要從 Windows 伺服器移除 SMBv1:

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

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

新增/移除程式用戶端方法

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

  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 引進了新的SMBServerConfiguration Windows PowerShell Cmdlet。 此 Cmdlet 可讓您啟用或停用伺服器元件上的 SMBv1、Smbv2 弱點和 SMBv3 通訊協定。

注意

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

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

PowerShell 方法

注意

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

SMB 伺服器上的 SMBv1

檢測:

Get-Item HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters | ForEach-Object {Get-ItemProperty $_.pspath}

預設設定 = 已啟用 () 不會建立名為 value 的登錄,因此不會傳回任何 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. 以滑鼠右鍵按一下 [登錄 ] 節點,指向 [ 新增],然後選取 [登錄 專案]。

    登錄-新增-登錄專案

在 [ 登錄內容] 對話方塊中,選取下列各項:

  • 動作:更新
  • 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 用戶端,必須更新服務登錄機碼,以停用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

    啟動屬性-一般

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

    在 [ 登錄內容] 對話方塊中,選取下列各項:

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

    注意

    這三個字串不會有專案符號 (請參閱下列螢幕擷取畫面) 。

    DependOnService 屬性

    預設值會在 Windows 的許多版本中包含MRxSMB10 ,因此藉由使用這個多重值字串來取代它們,它實際上會將MRxSMB10視為LanmanWorkstation的相依性,並從四個預設值降到上述三個值。

    注意

    當您使用群組原則管理主控台時,不需要使用引號或逗號。 只需在個別行上輸入每個專案。

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

審核 SMBv1 使用方式

若要判斷哪些用戶端嘗試使用 SMBv1 連接到 SMB 伺服器,您可以在 Windows Server 2016、Windows 10 和 Windows server 2019 上啟用審核。 如果已安裝5月2018日更新,您也可以在 Windows 7 和 Windows Server 2008 R2 上進行審核; 如果已安裝7月2017的每月更新,您也可以在 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 中,群組原則管理] 會顯示下列設定。

群組原則管理編輯器-Registry

測試和驗證

完成本文中的設定步驟之後,允許複寫和更新原則。 如有需要,請在命令提示字元中執行 gpupdate/force ,然後檢查目的電腦以確定已正確套用登錄設定。 確定 Smbv2 弱點和 SMBv3 在環境中的所有其他系統都能正常運作。

注意

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