閱讀英文

共用方式為


在 Windows 中偵測、啟用和停用 SMBv1、SMBv2 和 SMBv3

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

如果您停用或移除SMBv1,可能會遇到舊電腦或軟體的相容性問題。 SMBv1 有顯著的安全性弱點,強烈建議您不要使用它。 在任何 Windows 11 或 Windows Server 2019 及後續版本中,SMBv1 預設未安裝。 除了家用版和專業版以外,Windows 10 預設也不會安裝 SMBv1。 建議您不要重新安裝SMBv1,而是更新仍需要它的SMB伺服器。 如需需要SMBv1的合作夥伴清單及其移除需求的更新,請參閱 SMB1產品清查所

停用SMBv2或SMBv3用於疑難排解

我們建議保持啟用 SMBv2 和 SMBv3,但您可能會發現在進行故障排除時暫時禁用其中一個是有用的。 如需詳細資訊,請參閱 使用命令行或註冊表編輯器來管理 SMB 通訊協定

停用 SMBv3 會停用下列功能:

  • 透明故障轉移:提供客戶端在維護或故障轉移期間重新連線的方式,而不會中斷叢集節點
  • 向外延展:提供所有檔案叢集節點上共享數據的並行存取權
  • SMB 多重通道:如果客戶端與伺服器之間有多個路徑可用,有助於匯總網路頻寬和容錯
  • SMB 直接存取:提供高效能的遠端直接記憶體存取(RDMA)網路支援,並具備低延遲和低 CPU 使用量的特性。
  • 加密:提供端對端加密,並避免在不受信任網路上遭到竊聽的風險。
  • 目錄租賃:透過緩存提升分公司應用程式的回應速度
  • 效能優化:優化小型隨機讀取/寫入 I/O 作業

停用 SMBv2 會停用下列功能:

  • 要求合併:支援以單一網路要求傳送多個 SMBv2 要求
  • 較大規模的讀取和寫入:改善更快速網路的使用
  • 快取資料夾和檔案屬性:讓客戶端能夠保留資料夾和檔案的本機複本
  • 持久句柄:提供在暫時中斷連線之後,以透明方式重新連線到伺服器的方式
  • 改善訊息簽署:使用哈希型訊息驗證碼 (HMAC) 安全哈希演算法 (SHA) 搭配 256 位摘要 (HMAC SHA-256), 而不是使用 Message-Digest 演算法 5 (MD5) 作為哈希演算法
  • 改善檔案共用的延展性:大幅增加每部伺服器的使用者、共用和開啟檔案數目
  • 支援符號連結
  • 用戶端 oplock 租用模型:限制在用戶端與伺服器之間傳輸的數據,改善高延遲網路的效能,以及增加 SMB 伺服器延展性
  • 大型最大傳輸單元 (MTU) 支援:支援充分利用 10 吉比特乙太網路 (GbE)
  • 改善能源效率:提供開啟檔案至伺服器的客戶端進入休眠模式的方法

SMBv2 通訊協定是在 Windows Vista 和 Windows Server 2008 中引進的。 SMBv3 通訊協定是在 Windows 8 和 Windows Server 2012 中引進的。 有關 SMBv2 和 SMBv3 能力的更多資訊,請參閱以下文章:

使用 PowerShell 移除 SMBv1

您可以使用 Get-WindowsOptionalFeatureDisable-WindowsOptionalFeatureEnable-WindowsOptionalFeature PowerShell 命令來偵測、停用及啟用 SMBv1 用戶端或伺服器。 請在具備管理員許可權的命令提示字元中執行命令。

注意

執行 PowerShell 命令以停用或啟用 SMBv1 之後,計算機會重新啟動。

  • 偵測:

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

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

    Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
    

提示

您可以不需提升權限即可執行 Get-SmbServerConfiguration 命令來偵測 SMBv1 狀態:Get-SmbServerConfiguration | Format-List EnableSMB1Protocol

拿掉SMBv1

預設不會在 Windows Server 2019 和更新版本上安裝 SMBv1。 在舊版的 Windows Server 上,您可以使用伺服器管理員來移除 SMBv1:

  1. 在您想要從中移除 SMBv1 的伺服器上,開啟 [伺服器管理員]。

  2. 在 [伺服器管理員儀錶板] 的 [設定此本地伺服器] 底下,選取 [新增角色和功能]。

  3. 開始之前頁面上,選擇啟動移除角色和功能精靈,然後在下一頁選擇下一步

  4. 在 [選取目的地伺服器] 頁面上,於 [伺服器集區]下,確定已選取要從中移除功能的伺服器,然後選取 [下一步]

  5. 刪除伺服器角色頁面,選擇 下一步

  6. 在 [移除功能] 頁面上,清除 SMB 1.0/CIFS 檔案共享支援的複選框,然後選取 [下一步]

    [伺服器管理員] 儀錶板中 [移除功能] 頁面的螢幕快照。在 [功能] 清單中,會反白顯示 SMBv1。

  7. 確認刪除選擇確認功能已列出,然後選擇Remove

使用命令行或註冊表編輯器來管理SMB通訊協定

從 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。

SMBv1

  • 偵測:

    Get-SmbServerConfiguration | Select EnableSMB1Protocol
    
  • 停用:

    Set-SmbServerConfiguration -EnableSMB1Protocol $false
    
  • 啟用:

    Set-SmbServerConfiguration -EnableSMB1Protocol $true
    

如需詳細資訊,請參閱 停止使用SMB1

SMBv2 和SMBv3

  • 偵測:

    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 或註冊表編輯器,如下列各節所述。

使用 Windows PowerShell

您可以使用 Get-ItemGet-ItemPropertySet-ItemProperty Cmdlet 來偵測、啟用和停用 SMB 通訊協定。

注意

下列各節中的命令需要 PowerShell 2.0 或更新版本。

SMB 伺服器上的SMBv1
  • 偵測:

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

    預設配置 Enabled。 因此,不會建立名為 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
    

注意

在您進行這些變更之後,必須重新啟動電腦以應用這些變更。

如需詳細資訊,請參閱 停止使用SMB1

SMB 伺服器上的SMBv2和SMBv3
  • 偵測:

    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啟用。 在此情況下,不會建立任何登錄機碼。

注意

 在您進行這些變更之後,必須重新啟動電腦以應用這些變更。

使用組策略停用SMBv1

本節說明如何使用組策略停用 SMBv1。 您可以在各種 Windows 版本上使用此方法。

SMBv1

您可以透過在註冊表中配置以下新項目,在 SMB 伺服器上停用 SMBv1:

  • 金鑰路徑:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • 登錄項目:SMB1
  • 項目類型:REG_DWORD
  • 輸入數據:0停用

若要使用組策略來設定此專案,請採取下列步驟:

  1. 開啟組策略管理主控台。 以滑鼠右鍵按下應包含新偏好設定項目的群組原則物件(GPO),然後選取 [編輯]

  2. 在控制台中Computer Configuration開啟 Preferences資料夾,然後開啟Windows Settings資料夾。

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

    組策略管理控制台中主控台樹狀結構的螢幕快照。[登錄] 快捷功能表可見,第一個功能表中已醒目提示 [新增]。

  4. 在 [[新增登錄屬性] 對話框中,選取或輸入下列值:

    • 動作建立
    • HiveHKEY_LOCAL_MACHINE
    • 關鍵路徑SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
    • 值名稱SMB1
    • 實值類型REG_DWORD
    • 數值資料0

    [新增登錄屬性] 對話框的螢幕快照。這些值會顯示在動作、Hive、索引鍵路徑、名稱、類型和數據欄位中。

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

注意

 您可以設定 Windows Management Instrumentation (WMI) 篩選來排除特定作系統,或排除用戶端或伺服器作系統。 如需詳細資訊,請參閱 組策略篩選建立 GPO的 WMI 篩選。

重要

某些系統需要存取 SYSVOL 資料夾或其他檔案共用,但不支援 SMBv2 或 SMBv3。 這類系統的範例包括舊版 Windows 系統和舊版 Linux 和合作夥伴系統。 當您在這些系統上的域控制器上停用SMBv1時,請小心。

稽核 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 中,組策略管理會顯示下列設定:

組策略管理編輯器登錄的螢幕快照。可見三個專案:DependOnService、SMB1 和 Start。

測試並驗證原則

完成組策略管理控制台中的設定步驟之後,請提供組策略時間,以將更新套用至其設定。 如果需要進行測試,請在命令提示字元執行 gpupdate /force,然後檢閱目標計算機,以確定已正確套用登錄設定。 確認 SMBv2 和 SMBv3 對環境中的所有其他系統都正常運作。

注意

測試原則之後,請重新啟動目標系統。