我想了解有关 Linux 启动过程以及启动分区加密如何工作的更多信息。我有几个问题。
我知道UEFI系统必须有ESP分区,可以挂载在
/boot/efi
或/efi
. ESP 分区包含引导加载程序和内核。在我的 Endeavor OS 系统上,我也有/boot
,它只包含英特尔微代码。我的理解是,系统首先加载引导加载程序(在我的例子中是 systemd-boot),然后加载所选的内核。那么,根据我当前的配置以及一般在 UEFI 系统中的情况,/boot
如果单独/efi
存在的话,其目的是什么?然后,我想加密我的系统,并且我正在阅读 Arch Wiki 指南“加密启动分区 (GRUB)”。在这种情况下,未加密的是 GRUB 和 ESP。对于UEFI系统来说,这种方式有什么好处呢?现在加密的内容在“正常”配置中是这样的? ESP 里面还有什么?
我也在尝试了解什么是 EFISTUB 以及它是如何工作的。据我了解,不使用引导加载程序,统一的内核映像放在 ESP 内部。这种情况下
/boot
还有必要吗?
答案1
当您拥有 UEFI 系统时,其固件将期望至少找到您想要在 ESP 中启动的任何内容的第一部分。第一部分可能是 GRUB 的 UEFI 版本、其他一些引导加载程序(例如systemd-boot
)或带有 EFISTUB 的统一内核映像。
(如果您使用安全启动,并且固件不允许您更改内置安全启动密钥,则您必须shimx64.efi
首先使用安全启动垫片 ( ),然后才能使用其他任何内容。如果您可以将固件配置为使用您自己的安全启动密钥,并使用您自己的密钥自行签署引导加载程序和内核,您不需要垫片。)
除非你有一些非常特殊的 UEFI 固件,否则 ESP 永远不会加密的,否则固件无法理解它。但通过安全启动,ESP 中的任何可执行代码都必须签,因此对 ESP 的任何重大篡改都会阻止系统启动(假设实现正确)。
内核需要位于何处取决于您用作引导加载程序的内容。如果您使用 GRUB,内核可以位于 GRUB 可以理解的任何文件系统上(LVM 或经典分区;加密与否)。有了systemd-boot
,我知道内核需要位于 ESP 上;对于 EFISTUB,固件被告知直接读取适当准备的内核文件,因此它显然需要位于 ESP 上。
GRUB 可以执行某些形式的磁盘加密,但它可能尚不支持最新的磁盘加密算法。另外,如果您想使用智能卡或 Yubikey 之类的安全设备作为磁盘加密密钥,那么您可能需要一个 initramfs 文件,该文件将包含访问该安全设备所需的基础结构,并向系统提供任何必要的提示。用户。通常,initramfs 文件位于内核所在的同一位置。
如果您将内核(以及 initramfs,如果需要)放置到 ESP,您可能根本不需要单独的/boot
(或者您的 ESP 可以安装在 处/boot
,如 @muru 所评论的)。如果您使用 GRUB,情况也是如此,它可以直接从根文件系统读取内核(如果需要,还可以读取 initramfs),即如果需要加密并且对 GRUB 提供的加密选项感到满意。
但“以一定便利为代价的绝对最大安全性”选项可能是这样的:
- ESP 仅包含安全启动垫片(如果需要)和 GRUB,两者均受安全启动签名保护
- GRUB 将提示输入密码来解锁加密的
/boot
,并从那里读取内核和 initramfs (已加密,但可能不是最好的加密) - initramfs 包含请求智能卡/Yubikey/等的基础设施。其中将包含用于解锁任何其他文件系统的密钥。这些现在可以使用硬件安全设备和/或内核支持的最新和最好的加密算法。如果系统包含 TPM 芯片,您甚至可以使用其 PCR 寄存器来验证固件或启动过程的任何先前组件没有被篡改。