在 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 能力的更多資訊,請參閱以下文章:
- Windows Server 中使用 SMB 3 通訊協定的檔案共用概觀
- 1.3 概觀
使用 PowerShell 移除 SMBv1
您可以使用 Get-WindowsOptionalFeature、Disable-WindowsOptionalFeature和 Enable-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:
在您想要從中移除 SMBv1 的伺服器上,開啟 [伺服器管理員]。
在 [伺服器管理員儀錶板] 的 [設定此本地伺服器] 底下,選取 [新增角色和功能]。
在開始之前頁面上,選擇啟動移除角色和功能精靈,然後在下一頁選擇下一步。
在 [選取目的地伺服器] 頁面上,於 [伺服器集區]下,確定已選取要從中移除功能的伺服器,然後選取 [下一步] 。
在刪除伺服器角色頁面,選擇 下一步。
在 [移除功能] 頁面上,清除 SMB 1.0/CIFS 檔案共享支援的複選框,然後選取 [下一步]。
在確認刪除選擇確認功能已列出,然後選擇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-Item、Get-ItemProperty和 Set-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的 停用
若要使用組策略來設定此專案,請採取下列步驟:
開啟組策略管理主控台。 以滑鼠右鍵按下應包含新偏好設定項目的群組原則物件(GPO),然後選取 [編輯]。
在控制台中Computer Configuration開啟 Preferences資料夾,然後開啟Windows Settings資料夾。
在 [登錄] 節點上按一下滑鼠右鍵,選擇 [新增],然後選取 [登錄專案]。
在 [[新增登錄屬性] 對話框中,選取或輸入下列值:
- 動作:建立
- Hive: HKEY_LOCAL_MACHINE
- 關鍵路徑:SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters
- 值名稱:SMB1
- 實值類型: REG_DWORD
- 數值資料: 0
此程式會停用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 中,組策略管理會顯示下列設定:
測試並驗證原則
完成組策略管理控制台中的設定步驟之後,請提供組策略時間,以將更新套用至其設定。 如果需要進行測試,請在命令提示字元執行 gpupdate /force
,然後檢閱目標計算機,以確定已正確套用登錄設定。 確認 SMBv2 和 SMBv3 對環境中的所有其他系統都正常運作。
注意
測試原則之後,請重新啟動目標系統。