
假設我剛剛grub2
在Linux 或(更具體的)基於Debian 的系統中的計算機上安裝了簽名的EFI 引導程式(例如,來自Lenovo IdeaPad U410 上的Ubuntu 14.10 amd64,它只能以安全引導EFI 或傳統模式引導)。有沒有辦法告訴機器將從運行中啟動而無需重新啟動?
答案1
是的,但您必須擁有安全啟動金鑰。首先,請注意安全啟動公鑰至少可以採用三種形式:
.cer
/.der
檔案—大多數 UEFI 實作以及與 Shim 配對的 MokManager 工具都使用這些檔案。.crt
- 這些檔案由大多數 Linux 安全工具本機使用,例如sbsigntool
和sbverify
。.esl
-- 這些檔案將多個金鑰合併到一個檔案中。 (其他檔案每個都包含一個金鑰。)如果您使用韌體使用者介面或 KeyTool 來保存金鑰,則產生的檔案將採用此格式。
如果您使用 MokManager 安裝了自己的機器擁有者金鑰 (MOK),則該檔案應採用.cer
/.der
形式。如果您想測試該二進位檔案在使用另一個金鑰(例如用於簽署 Ubuntu 或 Fedora 版本 GRUB 的金鑰)啟動時是否可以工作,您必須取得它。為了方便起見,我用 rEFInd 收集了一些;你可以零散地下載它們這裡。如果你有完全控制系統上的安全啟動,您還應該已經擁有您創建的密鑰。
要驗證二進位文件,您必須擁有表單中的金鑰.crt
。如果您有.der
或表格中的金鑰.cer
,則可以將其轉換:
openssl x509 -in mykey.cer -inform der -out mykey.crt
然後,您可以檢查二進位檔案是否已正確簽署:
sbverify --cert mykey.crt binary.efi
結果應該是一條訊息讀取Signature verification OK
或Signature verification failed
。
請注意,某些 UEFI 甚至無法啟動正確簽署的二進位檔案。這看起來是隨機的;二進位檔案 A 將正常啟動,而使用相同金鑰簽署的二進位檔案 B 將會失敗。我相信這是受影響的 UEFI 中的一個錯誤,但我還沒有詳細調查它。 AFAIK,它不會影響透過 Shim 驗證的二進位文件,但它會影響 Shim 本身或在沒有 Shim 幫助的情況下啟動的二進位檔案。