手把手教你如何一步步开启 Secure Boot
启用全盘加密对于移动设备(手机、笔记本)的必要性无须多言,就算防不住条子防不住六扇门,也可以防防修电脑的人(参考陈冠希艳照门),防防手机、笔记本被偷导致的数据泄露。
此外,目前一些品牌笔记本原装系统已经默认启用了 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-signed、sbsigntools。
复制文件
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。
systemd-boot
Unified Extensible Firmware Interface/Secure Boot
dm-crypt/Device encryption
Trusted Platform Module
systemd-cryptenroll