Linux 操作系统如何启用 secure boot(不限发行版)(简单的方法)

网上很多方法比较复杂,而且容易出现各种不兼容问题,这里我记录我的一种比较简单的方法。(需要确保你的电脑支持 tpm)

该方法在我的 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 <文件名>

注:我的 ESP 分区是 /boot/efi,下文中你可能需要根据你的不同挂载位置进行调整

如果你的电脑有 Windows,那么应该有一个自带的启动文件,我的操作系统是 /boot/efi/EFI/Boot/bootx64.efi,签名:sudo sbctl sign -s <文件名>

找到你的 grub 启动文件,我的操作系统是 /boot/efi/EFI/kali/grubx64.efi,签名:sudo sbctl sign -s <文件名>

重启验证

重启之后启用 secure boot,观察是否能正常启动。

若不能可关闭 secure boot 重新尝试。

若可以,验证:sbctl status,大概有如下输出:

$ sbctl status
Installed:      ✓ sbctl is installed
Owner GUID:     一个 UUID
Setup Mode:     ✓ Disabled
Secure Boot:    ✓ Enabled
Vendor Keys:    microsoft

就算完成。

后续

如果你更新了内核,如使用包管理器更新内核,或是自行编译的内核,除非你是使用 pacman 安装的 sbctl,其他情况下需要每次自行给新的内核进行签署。

如果你要删除已签署的内核(包括使用包管理器更新时移除较老旧的内核),可以编辑 /var/lib/sbctl/files.json 删除相关项目。其实不删也无所谓,但 sudo sbctl verify 的时候会出现找不到文件的情况。

posted @ 2024-11-05 20:03  KZ25T  阅读(18)  评论(0编辑  收藏  举报