如何在 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 (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 GbE 乙太網路 (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 Server 移除 SMBv1:
- 在您要移除 SMBv1 之伺服器的 [伺服器管理員儀表板] 上,于 [設定此本機伺服器] 底下,選取 [新增角色和功能]。
- 在 [ 開始之前] 頁面上,選取 [ 開始移除角色及功能精靈],然後在下列頁面上,選取 [ 下一步]。
- 在 [伺服器集區] 下的 [選取目的地伺服器]頁面上,確定已選取要從中移除功能的伺服器,然後選取 [下一步]。
- 在 [ 移除伺服器角色 ] 頁面上,選取 [ 下一步]。
- 在 [ 移除功能 ] 頁面上,清除 SMB 1.0/CIFS 檔案共用支援的 核取方塊,然後選取 [ 下一步]。
- 在 [ 確認移除選取專案 ] 頁面上,確認功能已列出,然後選取 [ 移除]。
Windows 8.1和Windows 10:新增或移除程式方法
若要在 Windows 8.1 和 Windows 10 上停用 SMBv1:
- 在 [控制台] 中,選取 [程式和功能]。
- 在[主控台首頁]底下,選取 [開啟或關閉Windows功能] 以開啟[Windows 功能]方塊。
- 在[Windows功能] 方塊中,向下捲動清單,清除SMB 1.0/CIFS 檔案共用支援的核取方塊,然後選取 [確定]。
- Windows套用變更之後,請在確認頁面上選取 [立即重新開機]。
如何在 SMB 伺服器上偵測狀態、啟用和停用 SMB 通訊協定
針對 Windows 8.1、Windows Server 2012、Windows Server 2012 R2、Windows 10 和 Windows Server 2019
Windows 8和Windows Server 2012引進了新的Set-SMBServerConfiguration Windows PowerShell Cmdlet。 Cmdlet 可讓您在伺服器元件上啟用或停用 SMBv1、SMBv2 和 SMBv3 通訊協定。
注意
當您在 Windows 8 或 Windows Server 2012 中啟用或停用 SMBv2 時,也會啟用或停用 SMBv3。 發生此行為的原因是這些通訊協定共用相同的堆疊。
執行 Set-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 的 SMB 伺服器上啟用或停用 SMB 通訊協定,Windows Server 2008 R2、Windows Vista 或 Windows Server 2008,請使用 Windows PowerShell 或登錄編輯程式。
PowerShell 方法
注意
此方法需要 PowerShell 2.0 或更新版本的 PowerShell。
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)
注意
進行這些變更之後,您必須重新開機電腦。
如何在 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 = 已停用
若要使用群組原則來設定此問題,請遵循下列步驟:
開啟 [群組原則管理主控台]。 在應包含新的喜好設定項目之群組原則物件 (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 用戶端,必須更新服務登錄機碼以停用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,現在已移除為相依性。
若要使用 群組原則進行這項設定,請遵循下列步驟:
開啟 [群組原則管理主控台]。 以滑鼠右鍵按一下應包含新喜好設定專案的 GPO,然後按一下 [ 編輯]。
在 [電腦設定] 下的主控台樹中,展開[喜好設定] 資料夾,然後展開[Windows 設定] 資料夾。
以滑鼠右鍵按一下 [ 登錄 ] 節點,指向 [ 新增],然後選取 [ 登錄專案]。
在 [ 新增登錄屬性 ] 對話方塊中,選取下列專案:
- 動作:更新
- Hive:HKEY_LOCAL_MACHINE
- 索引鍵路徑:SYSTEM\CurrentControlSet\services\mrxsmb10
- 值名稱:開始
- 實數值型別:REG_DWORD
- 數值資料:4
然後移除已停用 之 MRxSMB10 的相依性。
在 [ 新增登錄屬性 ] 對話方塊中,選取下列專案:
- 動作:取代
- Hive:HKEY_LOCAL_MACHINE
- 索引鍵路徑:SYSTEM\CurrentControlSet\Services\LanmanWorkstation
- 值名稱:DependOnService
- 實數值型別:REG_MULTI_SZ
- 值資料:
- Bowser
- MRxSmb20
- NSI
注意
這三個字串不會有專案符號, (會看到下列螢幕擷取畫面) 。
預設值包含許多版本的MRxSMB10 Windows,因此,藉由以這個多重值字串取代MRxSMB10,它實際上會將 MRxSMB10移除為LanmanWorkstation的相依性,並從四個預設值向下移至上述三個值。
注意
當您使用 群組原則 Management Console 時,不需要使用引號或逗號。 只要在個別行上輸入每個專案即可。
重新開機目標系統以完成停用 SMB v1。
稽核 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 中,群組原則管理會顯示下列設定。
測試和驗證
完成本文中的設定步驟之後,允許原則複寫和更新。 視需要進行測試,請在命令提示字元執行 gpupdate /force ,然後檢閱目的電腦,以確定已正確套用登錄設定。 請確定 SMBv2 和 SMBv3 適用于環境中所有其他系統。
注意
別忘了重新開機目標系統。