启用全盘加密对于移动设备(手机、笔记本)的必要性无须多言,就算防不住条子防不住六扇门,也可以防防修电脑的人(参考陈冠希艳照门),防防手机、笔记本被偷导致的数据泄露。

此外,目前一些品牌笔记本原装系统已经默认启用了 Bitlocker 全盘加密,对于这样的笔记本,如果你想装双系统,同时不想关闭 Bitlocker,那么为 Linux 系统配置启用 Secure Boot 便是必须的。

本文将简单记录一下:如何一步步为新系统安装 systemd-boot 引导同时启用 Secure Boot 的具体操作流程,希望对各位有所帮助。


首先要禁用 Secure Boot ,这就不用多说了。

以下步骤操作针对 /boot 分区同时为 ESP 分区的情况。

第一步:安装 systemd-boot

安装 EFI boot manager

bootctl install

然后你应当看到 /boot/EFI/systemd/systemd-bootx64.efi/boot/EFI/EFI/BOOT/BOOTX64.EFI 两个文件了。

使用 efibootmgr --verbose 应当也能看到 systemd-boot 的启动项。

然后在 /boot/loader 目录添加相应的配置文件,systemd-boot 并不能像 grub 那样自动生成配置文件。

添加 /boot/loader/entries/linux.conf

title Arch Linux
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux.img
options loglevel=3 root="LABEL=arch_os" rw

添加 /boot/loader/entries/linux-fallback.conf

title Arch Linux (fallback initramfs)
linux /vmlinuz-linux
initrd /amd-ucode.img
initrd /initramfs-linux-fallback.img
options loglevel=3 root="LABEL=arch_os" rw

需要安装 amd-ucode,且以上仅为示例,请根据自己情况修改 options 。

添加 /boot/loader/loader.conf

timeout 3
console-mode keep
default linux.conf

然后重启系统,确认 systemd-boot 可以正常工作后进入下一步

第二步:安装 shim

安装 shim-signedsbsigntools

复制文件

cp /usr/share/shim-signed/shimx64.efi /boot/EFI/systemd/
cp /usr/share/shim-signed/mmx64.efi /boot/EFI/systemd/

第三步:添加 EFI 启动项

efibootmgr --verbose --disk /dev/sdX --part Y --create --label "Shim" --loader /EFI/systemd/shimx64.efi

第四步:生成 MOK 密匙

openssl req -newkey rsa:4096 -nodes -keyout MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=my Machine Owner Key/" -out MOK.crt
openssl x509 -outform DER -in MOK.crt -out MOK.cer

MOK.cer 复制至 /boot/MOK.cer。 将 MOK.cer 复制至 /etc/mok/MOK.cer。 将 MOK.crt 复制至 /etc/mok/MOK.key,特别注意文件权限。

第五步:签名启动器及内核

签名 systemd-boot

cp /boot/EFI/systemd/systemd-bootx64.efi /boot/EFI/systemd/grubx64.efi
sbsign --key MOK.key --cert MOK.crt --output /boot/EFI/systemd/grubx64.efi /boot/EFI/systemd/grubx64.efi

签名内核

sbsign --key MOK.key --cert MOK.crt --output /boot/vmlinuz-linux /boot/vmlinuz-linux

第六步:添加 pacman hook

/etc/pacman.d/hooks/999-sign_kernel_for_secureboot.hook

[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = linux
Target = linux-lts
Target = linux-hardened
Target = linux-zen

[Action]
Description = Signing kernel with Machine Owner Key for Secure Boot
When = PostTransaction
Exec = /usr/bin/find /boot/ -maxdepth 1 -name 'vmlinuz-*' -exec /usr/bin/sh -c 'if ! /usr/bin/sbverify --list {} 2>/dev/null | /usr/bin/grep -q "signature certificates"; then /usr/bin/sbsign --key /etc/mok/MOK.key --cert /etc/mok/MOK.crt --output {} {}; fi' ;
Depends = sbsigntools
Depends = findutils
Depends = grep

第七步:启用 Secure Boot

重启系统,启用 Secure Boot。

开机时按 F12 选择启动项 shim。

初次启动时会让你导入 MOK,导入成功后再次重启。

如果能正常进入系统,即完成 Secure Boot 的设置,可以进入 BIOS 将默认启动项设为 shim 。

可选项:将密钥导入 TPM

启动全盘加密之后,一个使用的问题的每次启动都需要输入解密密码,虽然不是很麻烦,但每次启动都要输入还是有一点点麻烦的。

将加密密钥导入 TPM,便可以像 Windows 那样,启动时自动解密。

当然这样做会降低系统的安全性。

systemd-cryptenroll --tpm2-device=/dev/tpmrm0 --tpm2-pcrs=0+2+5+7+12+14  /dev/sdxx

后记

本文仅仅是一篇简单的操作记录,更多内容还请参考 Arch Linux wiki。