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 <文件名>