我想了解有关 Linux 启动过程以及启动分区加密如何工作的更多信息。我有几个问题。
我知道UEFI系统必须有ESP分区,可以挂载在
/boot/efi
或/efi
. ESP 分区包含引导加载程序和内核。在我的 Endeavor OS 系统上,我也有/boot
,它只包含英特尔微代码。我的理解是,系统首先加载引导加载程序(在我的例子中是 systemd-boot),然后加载所选的内核。/boot
那么,根据我当前的配置以及一般在 UEFI 系统中的情况,如果单独存在的话,其目的是什么/efi
?然后,我想加密我的系统,并且我正在阅读 Arch Wiki 指南“加密启动分区 (GRUB)”。在这种情况下,未加密的是 GRUB 和 ESP。对于UEFI系统来说,这种方式有什么好处呢?现在加密的内容在“正常”配置中是这样的?ESP 里面还有什么?
我也在尝试了解什么是 EFISTUB 以及它是如何工作的。据我了解,不使用引导加载程序,统一的内核映像放在 ESP 内。这种情况下
/boot
还有必要吗?
当您拥有 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 文件位于内核所在的同一位置。
/boot
如果您将内核(以及 initramfs,如果需要)放置到 ESP,您可能根本不需要单独的(或者您的 ESP 可以安装在 处/boot
,如 @muru 所评论的)。如果您使用 GRUB,情况也是如此,它可以直接从根文件系统读取内核(如果需要,还可以读取 initramfs),即如果需要加密并且对 GRUB 提供的加密选项感到满意。但“以一定便利为代价的绝对最大安全性”选项可能是这样的:
/boot
,并从那里读取内核和 initramfs (已加密,但可能不是最好的加密)