crypttab:luks头文件的位置

crypttab:luks头文件的位置

嗨,我的 crypttab 如下所示:

crypt_device /dev/sda luks,header=/boot/header.img

update-initramfs -u -k all工作成功,但由于某种原因,cryptsetup 在启动过程中找不到驻留在 USB 记忆棒(也包含启动分区)上的 header.img。它存储在/boot/header.img

(使用带有分离标头的 luks 加密,以及 USB 上的单独启动分区,操作系统:lubuntu 18)

答案1

除非您采取特殊步骤将/boot文件系统挂载到 initramfs 下,否则它还不会被挂载。在默认引导顺序中,系统在 initramfs 中执行时只关心根文件系统(可能还有交换分区)。

/boot检查并安装真正的根文件系统(如果适用)后,将安装其余文件系统(通常包括)。您需要进行一些特殊的安排来挂载/boot文件系统,同时仍在 initramfs 中才能访问/boot/header.img.或者你可以将你的包含header.img到 initramfs 中。

答案2

由于您的 USB 驱动器也是启动驱动器,因此系统仅将 initramfs 映像加载到内存,直到根分区被解密并newroot重新映射。此时需要从 initramfs 内手动挂载 USB 驱动器,或者fstab需要进行更新以挂载包含密钥文件的分区。尽管您提到在启动过程中它会存储在其中,/boot/header.img但这是因为当 initramfs 加载到 RAM 中进行启动过程时,USB 不再挂载。因此,在crypttab启动时,cryptsetup无法找到 /boot/header.img 文件,因为 USB 上的 /boot 目录尚未安装在当前加载以解密硬盘驱动器根文件夹的 initramfs 环境中。

可以肯定的是,正如 telcoM 所解释的那样,如果您之前启动到系统并在操作系统解锁且分区已解密时创建了密钥文件,然后/boot在该时间点将 keyfile.img 的副本放入您的目录中(并且再次,并且这是在系统未加密并且您已经在访问系统的情况下),那么它与/boot您在启动时找到的目录不同,并且 USB 包含启动驱动器;这就是我们都想说的。这是因为在启动过程中,它已经打开并复制了initrd-4.15.33-通用映像(例如),并且不会自动将 USB 设备挂载为存储容器。

因此,要解决此问题,您需要fstab将 USB 挂载到该/boot目录,以便crypttab在调用时可以找到该目录cryptsetup

请参阅fstab 手册页如果需要以下解释:例如

# First find the UUID of the partition holding your USB thumb drive
$ blkid

# You can also use grep or whatever you're more comfortable with as a text editor
$ nano /etc/fstab

# then add a line for your USB device 
UUID={device partition UUID} {mount point} {filesystem} {mount options}  {dump order}{fsck order}
# Example
UUID=66E53SSD988 /boot ext4  defaults  0 1

但是,我建议将驱动器安装在 /boot 目录之外的其他位置,除非这只是 USB 中的目录,然后修改 crypttab,以便减少 header.img 文件所在文件夹之间的混淆。

IE UUID=66E53SSD988 /mnt/usb ext4 defaults 0 1

然后,如果挂载点已更改,则crypttab需要依次更改为以下内容:

crypt_device /dev/sda luks,header=/mnt/usb/boot/header.img

相关内容