我的一位朋友在没有系统的情况下使用全磁盘加密(包括与/使用LVM位于同一个分区上的/boot )运行Debian。启动时会提示她两次输入加密密码:一次由grub提示,另一次由内核提示。我们的目标是让她只被提示一次。
我发现了一个适用于基于Arch的GNU/Linux的本指南,它声称可以克服这个问题。但是它不适用于基于Debian的GNU/Linux,因为至少其中一个包有点不同。指南的第11章解释了如何在驱动器解锁后创建内核可以使用的密钥文件。这样,用户就会被提示一次。如何将这些步骤转换为基于Debian的发行版?以下是指南。
指南
启动并以root用户或用户身份登录。然后生成密钥文件:
# dd bs=512 count=4 if=/dev/urandom of=/etc/mykeyfile iflag=fullblock将其插入LUKS卷:
# cryptsetup luksAddKey /dev/sdX /etc/mykeyfile当出现提示时,...and将输入您的LUKS密码。编辑/etc/mkinitcpio.conf以将键包含在文件数组中。
FILES="/etc/mykeyfile"从头创建initramfs映像:
# mkinitcpio -p linux-libre
# mkinitcpio -p linux-libre-lts
# mkinitcpio -p linux-libre-hardened在您的grub.cfg中的内核(linux)行中添加以下内容--您现在知道要这样做了,请参阅上面!--例如,如果您遵循了本指南,则在root=/dev/matrix/rootvol之后:
# cryptkey=rootfs:/etc/mykeyfile最后,拒绝对密钥文件的读取访问,即使是根用户:
# chmod 000 /etc/mykeyfile发布于 2022-09-08 06:52:20
至少在Debian 11上,如果您安装了cryptsetup-initramfs包,它的/usr/share/initramfs-tools/hooks/cryptroot脚本将解析您的/etc/crypttab,如果我正确地读取该脚本,它将自动检测您的根文件系统是否位于应该由密钥文件解锁的加密容器上,并且将自动将密钥文件包含到initramfs。
因此,在完成cryptsetup luksAddKey步骤之后,Debian11等效于确保安装了cryptroot-initramfs包,将密钥文件定义添加到根文件系统的/etc/crypttab行中,就像您为一些非根文件系统设置一个LUKS容器一样。
使用与示例中相同的名称,crypttab行如下:
sdX_crypt /dev/sdX /etc/mykeyfile luks或者更确切地说,您应该使用LUKS卷的UUID来实现健壮性:
sdX_crypt UUID=... /etc/mykeyfile luks然后运行update-initramfs -u -k all。
sdX_crypt是映射设备的名称,一旦加密被解锁,它将用于访问加密的内容。Debian将默认使用加密设备的basename并添加_crypt后缀来创建映射设备名,但我相信它也可以定制。
由于您的朋友使用LVM,您需要运行lsblk并查看用于根文件系统和/boot文件系统的LVM设备的NAME列:这些名称将是表单VGname-LVname。您将需要VGname部件,然后以根用户身份运行pvs,并找到包含命名VG的PV的名称。这应该类似于/dev/mapper/sdX_crypt。
钩子脚本将由update-initramfs执行。它将从/etc/crypttab获取信息,并自动添加密钥文件和必要的脚本片段,以便将其使用到initramfs中。
您不需要添加引导选项--自动生成的initramfs脚本将包含它所需的所有参数。
当然可以使用链接您在评论中发布的,但是您确实应该使用这个crypttab(5)您的发行手册页来获取最准确的信息。
将/etc/mykeyfile的保护设置为chmod 600或更少是个好主意。我不确定设置chmod 000是否有任何用处,但您可以尝试;最坏的情况是,您只需要在下次启动时输入两次加密密码,然后重新调整权限并再次运行update-initramfs -u -k all。
https://unix.stackexchange.com/questions/716531
复制相似问题