Seele Vol's Blog

OpenSUSE Tumbleweed Enable Secure Boot With Sbctl and Dracut

AI Generate Warning

The Post use MIT LICENSE.

AI generates more than 50% of content

prompts:[
  "bios: setup mode",
  "sbctl: generate",
  "sbctl: find db by plocate",
  "sbctl: /usr/share/secureboot/keys/db",
  "sbctl: add path to dracut.config.d",
  "sbctl: manual sign /boot/efi/EFI/opensuse/shim.efi"
]

在这篇文章中,我将展示如何在 OpenSUSE Tumbleweed 中使用 sbctldracut 启用 Secure Boot。这是一个高级教程,旨在帮助你确保系统的启动过程被完全签名和验证,从而增加安全性。

准备工作

在开始之前,请确保你已经以管理员身份登录,并且你的系统支持 Secure Boot。

1. 设置 BIOS 为 Setup Mode

首先,你需要进入 BIOS 并将其设置为 Setup Mode。这允许你在 BIOS 中加载和使用自定义的安全引导密钥。

步骤:

  1. 重新启动系统并进入 BIOS 设置(通常通过按 F2, F10Del 键)。
  2. 找到 Secure Boot 选项,并将其设置为 Setup Mode
  3. 保存设置并退出。

2. 使用 Sbctl 生成安全引导密钥

sbctl 是一个用于管理安全引导密钥的工具。我们将使用它来生成密钥并将其安装到系统中。

安装 Sbctl

在终端中运行以下命令来安装 sbctl

sudo zypper install sbctl

生成并安装密钥

  1. 生成新的安全引导密钥:

    sudo sbctl create-keys
    

    这将生成 PK, KEK 和 DB 密钥,它们可能被存储在 /var/lib/sbctl/keys/ 目录中,你可以使用 plocate 工具查找 db.key 文件尝试找到实际路径。

  2. 安装密钥到系统:

    sudo sbctl enroll-keys
    

    这会将生成的密钥加载到系统固件中。在再次设置 BIOS 中的 Setup Mode 之前,你只能设置一次。

3. 配置 Dracut 以支持 Secure Boot

Dracut 是一个用于生成 initramfs 的工具。我们需要配置 Dracut 以包含签名的内核和 initramfs。

添加密钥路径到 Dracut 配置

首先,我们需要找到 DB 密钥并将其路径添加到 Dracut 的配置中。

  1. 使用 plocate 找到 DB 密钥的路径:

    plocate db.key
    

    假设你得到了以下路径:

    /var/lib/sbctl/keys/db/db.key
    
  2. 将密钥路径添加到 Dracut 的配置文件中:

    编辑或创建 /etc/dracut.conf.d/10-uefi-secureboot.conf 文件,添加以下内容:

     uefi_secureboot_cert="/var/lib/sbctl/keys/db/db.pem"
     uefi_secureboot_key="/var/lib/sbctl/keys/db/db.key"
    
  3. 生成新的 initramfs:

    sudo dracut --force
    

    这将生成一个新的 initramfs,它会包含签名的内核和 initramfs。

  4. 验证sbctl签名生效

    一切顺利的情况下,运行 sudo sbctl verify,将会输出

     Verifying file database and EFI images in /boot/efi...
       ✗ /boot/efi/EFI/opensuse/shim.efi is signed
       ✗ /boot/efi/EFI/boot/bootx64.efi is not signed
       ✗ /boot/efi/EFI/opensuse/MokManager.efi is not signed
       ✗ /boot/efi/EFI/opensuse/grub.efi is not signed
       ✓ /boot/efi/EFI/opensuse/grubx64.efi is signed
    

4. 手动签名 Shim 引导程序

shim.efi 是一个引导加载程序,支持在 UEFI 系统上实现安全引导。你需要手动对它进行签名。

步骤:

  1. 找到 shim.efi 文件:

    sudo sbctl verify
    

    输出可能会显示出 shim.efi 文件的位置,例如:

    /boot/efi/EFI/opensuse/shim.efi
    
  2. 手动对 shim.efi 进行签名:

    sudo sbctl sign -s /boot/efi/EFI/opensuse/shim.efi
    

    确保这个文件已经被正确签名,这样系统就可以使用 Secure Boot 启动。

5. 启用 Secure Boot 并验证

完成上述步骤后,返回 BIOS 并启用 Secure Boot。然后,重新启动系统,并确保它可以正常启动。

如果一切设置正确,你的系统现在应该已经成功启用了 Secure Boot。

总结

通过这些步骤,你已经成功地在 OpenSUSE Tumbleweed 系统上使用 sbctldracut 配置并启用了 Secure Boot。这将确保系统启动过程的完整性和安全性。