如何在 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)版本 1 (SMBv1)、SMB 版本 2 (SMBv2)以及 SMB 版本 3 (SMBv3)。

雖然停用或刪除 SMBv1 可能會導致舊電腦或軟體出現一些相容性問題,但 SMBv1 有重大安全漏洞,且我們強烈建議您不要使用它預設不安裝 SMB 1.0在任何版本的 Windows 11 或 Windows Server 2019 及更高版本中。 SMB 1.0 也不會在 Windows 10 中預設安裝,除了家庭版和專業版。 我們建議不要重新安裝 SMB 1.0,而是更新仍需要它的 SMB 伺服器。 有關需要 SMB 1.0 的第三方清單及其刪除該要求的更新,請查閱SMB1 Product Clearinghouse

為了進行故障排除,禁用 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 會停用以下功能:

  • Transparent Failover - 在維護或故障轉移期間,客戶端在群集節點之間重新連接而不中斷。
  • Scale Out - 同時造訪所有文件叢集節點上的共享數據。
  • Multichannel - 聚合網路帶寬並實現在客戶端和伺服器之間存在多條可用路徑時的容錯。
  • SMB Direct - 添加 RDMA 網路支援,實現高性能,低延遲和低 CPU 使用。
  • Encryption - 提供端到端的加密,保護免受在不受信任的網路上的竊聽。
  • Directory Leasing - 透過緩存提高分公司應用程序的響應時間。
  • Performance Optimizations - 針對小規模隨機讀/寫 I / O 進行優化。

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

  • Request compounding - 允許將多個 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 能力的更多資訊,請參閱以下文章:

如何透過 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:使用 Server Manager 方法

Server Manager - Dashboard method

要從 Windows Server 中移除 SMBv1:

  1. 在要刪除 SMBv1 的伺服器的 Server Manager Dashboard 上的設定此本機伺服器,選擇新增角色與功能
  2. 開始之前,選擇 Start the Remove Roles and Features Wizard,然後在下一頁選擇Next
  3. 選擇目標伺服器位於 Server Pool確保選擇要從中刪除功能的伺服器,然後選擇Next
  4. 刪除伺服器列選擇 Next
  5. 刪除功能清除複選框SMB 1.0/CIFS File Sharing Support並選擇 Next
  6. 確認刪除選擇確認功能已列出,然後選擇Remove

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

Add-Remove Programs client method

要在上述提到的作業系統中停用 SMBv1:

  1. Control Panel選擇 Programs and Features
  2. Control Panel Home 下選擇開啟或關閉 Windows 功能以開啟 Windows Features 框。
  3. Windows Features框,向下滾動列表,清除SMB 1.0/CIFS File Sharing Support並選擇 OK
  4. Windows 套用變更後,在確認頁面上選擇立即重新啟動

如何檢測狀態、啟用和停用 SMB 協定:

注意

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

Windows 8 和 Windows Server 2012 引進了新的Set-SMBServerConfiguration Windows PowerShell 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}

預設設置下,SMBv1 是啟用的(沒有建立註冊表命名值),因此不會回歸 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)

注意

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

使用 Group Policy 停用 SMBv1

本節介紹如何使用 Group Policy 停用 SMBv1。 您可以在不同版本的 Windows 上使用這個方法。

SMBv1

這個步驟會在註冊表中設置以下新項目:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

  • 登錄:SMB1
  • REG_DWORD: 0 = 停用

若要使用 Group Policy 進行設置,請按照以下步驟操作:

  1. 開啟 [群組原則管理主控台]。 右鍵點選應包含新首選項的群組原則物件 (GPO),然後按一下 Edit

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

  3. 右鍵點選 Registry節點,指向New然後選擇 Registry Item

    Registry - New - Registry Item

New Registry Properties對話框,選擇以下內容:

  • 啟動: 建立
  • Hive: HKEY_LOCAL_MACHINE
  • Key Path: SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
  • 設置名稱: SMB1
  • 設置選項: REG_DWORD
  • 設置數據: 0

New Registry Properties - General

這個步驟停用了 SMBv1 Server 元件。 這個 Group Policy 必須應用到區域中的所有必要的工作站、伺服器和區域控制器。

注意

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

重要

在對區域控制器進行這些變更時要小心,特別是對於那些需要造訪 SYSVOL 或其他共用文件的舊版 Windows XP、舊版 Linux 和不支援 SMBv2 或 SMBv3 的第三方系統。在停用 SMBv1 的情況下,請謹慎確認這些系統的兼容性,以避免造成造訪問題。

審核 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 將顯示以下設定。

Group Policy Management Editor - Registry

測試和驗證

在完成本文中的設置步驟後,允許進行複製和更新。 依測試需求,執行gpupdate /force在命令提示字元下,然後檢查目標電腦以確保註冊表設定正確應用。 確認 SMBv2 和 SMBv3 對環境中的所有其他系統都正常運作。

注意

別忘記重新啟動目標系統。