我已经使用 sbsigntools 包中的实用程序签署了 EFI 映像sbsign
,例如:
# sbsign --key db.key --cert db.pem \
--output /boot/efi/EFI/Grub/grubx64.efi /boot/efi/EFI/Grub/grubx64.efi
例如,其结果是:
# sbverify --list /boot/efi/EFI/Grub/grubx64.efi
signature 1
image signature issuers:
- /CN=My Signature DB Key
image signature certificates:
- subject: /CN=My Signature DB Key
issuer: /CN=My Signature DB Key
我的问题很简单,是否有一个 Linux 实用程序可以正确删除它随附的来自该二进制文件的签名?
答案1
sbsigntools 包中还包含sbattach
实用程序,它可以完成工作,尽管它的作用不是很明显。
我只想说,你需要知道你在做什么以及为什么要这样做。如果你不了解即将发生的事情,你可能会破坏安全启动。例如,如果你要从图像中删除第三方签名(即 Microsoft 的签名),你将无法在没有发行者私钥的情况下重新签名该图像。
...请务必检查man sbattach
...尽管它很简短。
从我的问题中的例子...
# sbverify --list /boot/efi/EFI/Grub/grubx64.efi
signature 1
...
签名 1是我的,我想将其从镜像中删除。镜像可能有来自多个发行者的多个签名。
要创建一个分离的中的签名备份$PWD
,您可以执行以下操作:
# sbattach --signum 1 --detach grubx64.sig /boot/efi/EFI/Grub/grubx64.efi
(当然,您也应该备份该文件。)
请注意,这--signum
是可选的,但如果没有它,命令将默认为第一个签名。这意味着,如果您要修改最初由第三方签名的图像,目的是删除您添加的签名,则默认行为是删除第三方签名,不是你的。
要删除签名,您可以执行以下操作:
# sbattach --signum 1 --remove /boot/efi/EFI/Grub/grubx64.efi
您也可以同时执行这两项操作(备份和删除):
# sbattach --signum 1 --detach grubx64.sig --remove /boot/efi/EFI/Grub/grubx64.efi
如果一切顺利,并且图像中不存在其他签名,则结果将是:
# sbverify --list /boot/efi/EFI/Grub/grubx64.efi
No signature table present