如何在 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:
- 在您要移除 SMBv1 之伺服器的 [伺服器管理員儀表板] 上,于 [設定此本機伺服器] 底下,選取 [新增角色和功能]。
- 在 [ 開始之前] 頁面上,選取 [ 開始移除角色及功能精靈],然後在下列頁面上,選取 [ 下一步]。
- 在 [伺服器集區] 下的 [選取目的地伺服器]頁面上,確定已選取要從中移除功能的伺服器,然後選取 [下一步]。
- 在 [ 移除伺服器角色 ] 頁面上,選取 [ 下一步]。
- 在 [ 移除功能 ] 頁面上,清除 SMB 1.0/CIFS 檔案共用支援的 核取方塊,然後選取 [ 下一步]。
- 在 [ 確認移除選取專案 ] 頁面上,確認功能已列出,然後選取 [ 移除]。
Windows 8.1、Windows 10和Windows 11:新增或移除程式方法
若要停用所提及作業系統的 SMBv1:
- 在 [控制台] 中,選取 [程式和功能]。
- 在[主控台首頁]下,選取 [開啟或關閉 Windows 功能] 以開啟[Windows 功能]方塊。
- 在 [Windows 功能] 方塊中,向下捲動清單,清除 SMB 1.0/CIFS 檔案共用支援的 核取方塊,然後選取 [ 確定]。
- 在 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 = 已停用
若要使用群組原則進行這項設定,請遵循下列步驟:
開啟 [群組原則管理主控台]。 在應包含新的喜好設定項目之群組原則物件 (GPO) 上按一下滑鼠右鍵,然後按一下 [編輯]。
在 [ 電腦設定] 下的主控台樹中,展開 [ 喜好 設定] 資料夾,然後展開 [Windows 設定] 資料夾。
以滑鼠右鍵按一下 [ 登錄 ] 節點,指向 [ 新增],然後選取 [ 登錄專案]。
在 [ 新增登錄屬性 ] 對話方塊中,選取下列專案:
- 動作:建立
- 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 適用于環境中所有其他系統。
注意
別忘了重新開機目標系統。