安全開機是 UEFI 韌體標準的一部分。當安全開機正在使用中時,除非作業系統開機載入器經密碼編譯簽署,否則機器將拒絕載入任何 UEFI 驅動程式或應用程式。在 vSphere 6.5 及更新版本中,ESXi 支援安全開機 (若已在硬體中啟用)。

ESXi 如何使用 UEFI 安全開機

ESXi 6.5 版及更新版本支援在開機堆疊的每個層級上進行 UEFI 安全開機。

備註: 在已升級的主機上使用 UEFI 安全開機前,請遵循 在 ESXi 升級後執行安全開機驗證指令碼中的指示來檢查相容性。
圖 1. UEFI 安全開機
UEFI 安全開機堆疊包括多個元素,已在文中解釋。

安全開機正在使用中時,開機順序的執行方式如下。

  1. vSphere 6.5 及更新版本中,ESXi 開機載入器包含 VMware 公開金鑰。開機載入器使用此金鑰來驗證核心的簽章,以及一小部分包括安全開機 VIB 驗證器的系統。
  2. VIB 驗證器驗證系統上安裝的每一個 VIB 套件。

此時,藉由屬於 UEFI 韌體之憑證中的信任根,整個系統完成開機。

備註: 當您安裝或升級至 vSphere 7.0 Update 2 或更新版本,並且 ESXi 主機具有 TPM 時,TPM 會根據 UEFI 安全開機的 PCR 值透過 TPM 原則封裝敏感資訊。如果滿足此原則,將在後續重新開機期間載入此值。若要在 vSphere 7.0 Update 2 和更新版本中停用或啟用 UEFI 安全開機,請參閱 啟用或停用安全開機強制執行以確保安全的 ESXi 組態

UEFI 安全開機疑難排解

如果安全開機在開機順序的任意層級失敗,將會發生錯誤。

錯誤訊息取決於硬體廠商以及驗證失敗所屬的層級。
  • 如果您嘗試使用尚未指派的或已遭竄改的開機載入器開機,則開機順序期間將發生錯誤。具體訊息取決於硬體廠商。該訊息可能類似如下錯誤,也可能不同。
    UEFI0073: Unable to boot PXE Device...because of the Secure Boot policy 
  • 如果核心已遭竄改,會發生類似如下的錯誤。
    Fatal error: 39 (Secure Boot Failed)
  • 如果套件 (VIB 或驅動程式) 已遭竄改,則系統會出現紫色畫面,並顯示下列訊息。
    UEFI Secure Boot failed:
    Failed to verify signatures of the following vibs (XX)

若要解決安全開機的問題,請遵循這些步驟。

  1. 在安全開機停用的情況下將主機重新開機。
  2. 執行安全開機驗證指令碼 (請參閱在 ESXi 升級後執行安全開機驗證指令碼)。
  3. 檢查 /var/log/esxupdate.log 檔案中的資訊。

ESXi 升級後執行安全開機驗證指令碼

從不支援 UEFI 安全開機的版本升級 ESXi 主機後,必須檢查是否可以啟用安全開機。

若要成功執行安全開機,每個已安裝的 VIB 的簽章必須在系統上可用。在安裝 VIB 時,較舊版本的 ESXi 不會儲存簽章。
  • 如果您使用 ESXCLI 命令升級,則舊版 ESXi 會執行新的 VIB 安裝,因此不會儲存其簽章且不能安全開機。
  • 如果您使用 ISO 升級,則新的 VIB 會儲存其簽章。此情況同樣適用於使用 ISO 的 vSphere Lifecycle Manager 升級。
  • 如果舊 VIB 保留在系統上,則這些 VIB 的簽章不可用且不能安全開機。
    • 如果系統使用第三方驅動程式,且 VMware 升級不包含新版驅動程式 VIB,則升級後舊 VIB 會保留在系統上。
    • 在少數情況下,VMware 可能會終止進行中的特定 VIB 的開發,而不提供將其取代或淘汰的新 VIB,因此升級後舊 VIB 會保留在系統上。
備註: UEFI 安全開機還需要使用最新的開機載入器。此指令碼不會檢查是否有最新的開機載入器。

必要條件

從不支援 UEFI 安全開機的舊版 ESXi 升級 ESXi 主機後,或許可以啟用安全開機。是否可以啟用安全開機取決於您如何執行升級,以及升級是否取代所有現有 VIB,或保留部分 VIB 不變。您可以在執行升級後執行驗證指令碼,以確定升級的安裝是否支援安全開機。
  • 請確認硬體支援 UEFI 安全開機。
  • 請確認所有 VIB 均在接受程度至少為 PartnerSupported 的情況下簽署。如果包含處於 CommunitySupported 程度的 VIB,則無法使用安全開機。

程序

  1. 升級 ESXi 並執行以下命令。
    /usr/lib/vmware/secureboot/bin/secureBoot.py -c
  2. 檢查輸出。
    輸出包含 Secure boot can be enabledSecure boot CANNOT be enabled