在 Gentoo 上使用 shim 和 GRUB 进行安全启动

主要观点:在 Gentoo 上使 Secure Boot 工作传统上较棘手,因自定义内核广泛使用及缺少主流二进制 Linux 发行版使用的预签名引导加载程序,作者决定写易遵循教程使其信息更易获取,有多种使 Secure Boot 工作的方法,此教程使用shim 引导加载程序启动独立的GRUB安装。
关键信息和重要细节

  • 系统准备:需挂载 EFI 启动分区,假设其在/boot/efi,若未挂载则执行mount /boot/efi
  • 设置签名密钥:生成用于签名 GRUB 的 RSA-2048 证书(PEM 格式),并转换为二进制 DER 格式,修改make.conf启用securebootUSE 标志及设置相关签名密钥变量。
  • 配置和安装所需包:安装sys-boot/efibootmgrsys-boot/mokutil(先解掩码)、sys-boot/shim,推荐重建sys-apps/kmod包并添加pkcs7USE 标志。
  • 安装内核

    • Gentoo 二进制发行版内核:安装sys-kernel/gentoo-kernel-bin,导入内核签名密钥(mokutil --import)。
    • Gentoo 从源代码构建的内核:设置modules-signUSE 标志,安装sys-kernel/gentoo-kernel
    • 自定义内核:在.config 文件中指定模块签名密钥并强制签名检查,构建并安装内核,手动签名内核镜像。
  • 安装 shim 和 GRUB 引导加载程序:添加引导加载程序文件夹,移动 shim 引导加载程序,安装 GRUB 并调整配置,生成 GRUB 配置和独立引导加载程序,签名 GRUB 引导加载程序。
  • 导入密钥到 MOK 列表:导入用于签名 GRUB(及可能的内核)的密钥到 MOK 列表,分两步,第一次导入,第二次在下次重启时通过 shim 完成实际注册。
  • 创建新 EFI 启动项:使用efibootmgr创建新的 EFI 启动项,将 shim 引导加载程序添加到启动项列表,可设置为默认启动项。
  • 重启并在 MOK 列表中注册密钥:重启后,shim 引导加载程序会启动密钥管理菜单,按步骤完成密钥注册。
  • 更新和故障排除

    • 内核更新:自定义内核需重新生成grub.cfg等,分布内核可使用sys-kernel/installkernel包的插件脚本自动更新。
    • GRUB 更新:更新sys-boot/grub包时重新创建配置和签名。
    • shim 引导加载程序更新和故障排除:更新sys-boot/shim包,若更新后出现启动失败可临时禁用 Secure Boot 或使用其他引导加载程序修复,更新 shim 可解决问题。
    • 主板 UEFI 固件更新和故障排除:更新主板 UEFI 固件有时会清除 MOK 列表,需重新注册密钥,也可能清除 UEFI 启动列表,需重新创建 shim 启动项。
阅读 22
0 条评论