撤消可执行文件上的“sbsign”,删除附加的图像签名

撤消可执行文件上的“sbsign”,删除附加的图像签名

我已经使用 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

相关内容