sxk*_*xkx 6 grub2 lubuntu signature
如何对我的内核和引导加载程序进行签名?
更新(2021 年 2 月 4 日) 我认为我没有明确说明我正在尝试做什么。我想取消 OEM 密钥,只使用我自己的密钥。我正在尝试使用全盘加密运行安全启动,包括Boot。
对配置文件进行了一些更改(这些是我为反映我的设置而进行的更改)。
# Encrypted boot device name (/dev/mapper/$BOOT_CRYPT_NAME)
# (have to be specified in /etc/crypttab)
BOOT_CRYPT_NAME="LUKS_BOOT"
# Boot entry in UEFI Boot Manager (if using GRUB boot loader)
EFI_ID_GRUB="ubuntu"
# Path to GRUB boot loader EFI file (relative to EFI System partition)
EFI_PATH_GRUB="EFI/ubuntu/grubx64.efi"
Run Code Online (Sandbox Code Playgroud)
# Create and enroll keys (must be in setup mode, verify with bootctl)
cryptboot-efikeys create
cryptboot-efikeys enroll
# Sign kernel
cryptboot-efikeys sign /boot/vmlinuz-5.4.0-65-generic
# Sign bootloader
cryptboot update-grub
Run Code Online (Sandbox Code Playgroud)
当我重新启动并启用安全启动时,我会收到此错误:
error: Secure Boot forbids loading module from (cryptouuid/abcdef0123456789)/grub/x86_64-efi/normal.mod
Run Code Online (Sandbox Code Playgroud)
当我通过捆绑/预加载(使用--modules参数 on grub-install)模块来修复该问题时,我收到此错误:
error: /vmlinuz-5.4.0-65-generic has invalid signature.
error: you need to load the kernel first
Press any key to continue...
Run Code Online (Sandbox Code Playgroud)
当我验证签名时,我得到一个输出,显示它有多个签名,但它们没问题:
所以我想也许删除 Canonical 签名会有所帮助。找到了一个名为 的程序pesign,它可以让我从二进制文件中删除签名。我删除了 Canonical 签名,然后通过运行以下命令验证签名是否仍然正常:
error: Secure Boot forbids loading module from (cryptouuid/abcdef0123456789)/grub/x86_64-efi/normal.mod
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好,它说签名有效(OK)。当我重新启动时,我仍然遇到与以前相同的错误。不要认为这是问题所在(上面有 Canonicals 签名)。
我已仔细检查我的钥匙是否已正确注册。
error: /vmlinuz-5.4.0-65-generic has invalid signature.
error: you need to load the kernel first
Press any key to continue...
Run Code Online (Sandbox Code Playgroud)
双重检查
cryptboot-efikeys verify /boot/vmlinuz-5.4.0-65-generic
Run Code Online (Sandbox Code Playgroud)
当我运行时mokutil --list-enrolled,它告诉我 MOK 列表为空。
cryptboot-efikeys list
# All UEFI Secure Boot keys enrolled in your UEFI firmware:
# Variable PK, length 835
# PK: List 0, type X509
# ...
# Variable KEK, length 837
# KEK: List 0, type X509
# ...
# Variable db, length 835
# db: List 0, type X509
# ...
# Variable dbx, length -4
# Variable MokList has no entries
Run Code Online (Sandbox Code Playgroud)
在查看各种指南和文章时,他们都说在导入密钥时mokutil会提示您输入密码,然后必须重新启动并选择所需的密钥。然后在重新启动后验证密钥是否已正确注册。
由于我的输出mokutil --list-enrolled显示列表为空,我感觉这就是导致我看到的错误的原因。我已经通读了该cryptboot-efikeys脚本,它没有mokutil在任何地方使用,也许这有帮助。
我的钥匙已经注册,mokutil不会拿走它们,所以如果这导致了问题,我不知道如何解决它,而不需要放弃cryptboot并自己完成所有操作,我宁愿不必这样做。
还尝试了该grub-efi-amd64-signed软件包,该软件包将为您提供使用该--uefi-secure-boot选项的选项grub-install,但这似乎没有任何区别。
20.042.045.4.0-65我已经放弃了该cryptboot工具并开始手动执行所有步骤。不拿走我的密钥的问题mokutil仍然存在,但是如果我首先将密钥加载到 MOK 中,然后加载到 UEFI 中,一切都会正常。
我后来发现删除它grub-efi-amd64-signed会导致您丢失shimx64.efi和mmx64.efi,这可能是我无法启动 MokManager 以及安全启动无法正常工作的原因。
我没有grub-efi-amd64-signed安装,而是尝试grub-install在安装时shim运行grub-efi-amd64。没有给我shimx64.efi因此无法启动 MokManager 的信息。我可以通过复制/usr/lib/shim/shimx64.efi到/boot/efi/EFI/ubuntu/然后将其添加为启动项来克服这个问题efibootmgr。这会让我在重新启动时运行 MokManger,但仍然会添加默认键(稍后会详细介绍默认键)。
退后一步,在没有任何加密的情况下重新安装了我的系统,只是为了看看普通的 Ubuntu 20.04 在设置方面会做什么。我可以仅使用我自己的密钥(有点)在普通 Ubuntu 20.04 桌面安装上设置安全启动。
使用添加密钥时,mokutil --import key.der我还获得了 Microsoft shim 签名密钥和 Canonical 安全启动签名密钥。这是我不想要的,但还不能确定,因为我不完全理解 MOK 键的作用。mokutil无法使用 MOK 删除 Microsoft 和 Canonical 密钥。我现在正在研究从源代码编译填充程序,希望默认密钥没有注册。
| 归档时间: |
|
| 查看次数: |
2804 次 |
| 最近记录: |