Linux 作業系統如何啟用 secure boot(不限發行版)(簡單的方法)
很多方法比較複雜,而且容易出現各種不相容問題,這裡我記錄我的一種比較簡單的方法。
該方法在我的 kali linux(基於 debian)已測試成功。
參考文獻:archwiki
安裝 sbctl
archlinux: sudo pacman -S sbctl
gentoo: sudo emerge --ask app-crypt/sbctl
其他發行版請使用通用方法:
- 下載倉庫
https://github.com/Foxboron/sbctl
,進入倉庫目錄。 - 安裝軟體包,Debian 可用
sudo apt install asciidoc asciidoc-base
- 編譯:
make
- 安裝:
sudo cp ./sbctl /usr/local/bin
- 之前安裝的軟體包可選擇解除安裝:
sudo apt autoremove asciidoc asciidoc-base
,也可以不解除安裝,根據你的情況來看。
安裝 grub 模組
這樣一定能完成:
sudo grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB --modules="tpm" --disable-shim-lock
本人使用簡單一點的命令也能完成:
sudo grub-install --modules="tpm" --disable-shim-lock
調整 boot 為 setup mode
重啟,開機的時候進入主機板的 bios 的 secure boot 的設定,記得把 setup mode 開啟(和電腦品牌或主機板廠商有關,一般自己都能找得到)
使用 sbctl 簽名
登記金鑰
使用 sbctl 檢測狀態:sbctl status
,理論上來講,installed 是 not,setup mode 是 Enabled(必須),secure boot 是 disabled,除了中間那一項,別的也許有些不同也是可接受的。
建立金鑰:sudo sbctl create-keys
登記 UEFI:sudo sbctl enroll-keys -m
這一步可能提示
you need to chattr -i files in efivars
,此時把上面列出的每個檔案都依次執行sudo chattr -i <檔名>
之後再重複執行這一步。
接下再檢測狀態:sbctl status
,這時候輸出應該有 Installed: ✓ sbctl is installed
,否則請檢查前幾步是否出錯。
簽署
檢查驗證情況:sudo sbctl verify
,會列出來一大對叉號,
找到你的作業系統正在使用的核心,一般是 /boot/vmlinuz
開頭的某個檔案,簽名:sudo sbctl sign -s <檔名>
備份一下啟動檔案,我的作業系統是 /boot/efi/EFI/Boot/bootx64.efi
,各種發行版裡應該都是在 ESP 分割槽下,名稱類似的路徑。
找到你的 grub 啟動檔案,我的作業系統是 /boot/efi/EFI/kali/grubx64.efi
,複製到上面的啟動檔案位置,並簽名:sudo sbctl sign -s <檔名>