cryptopts 和 crypttab 之间的区别

cryptopts 和 crypttab 之间的区别

我正在设置一个加密的根文件系统,我之前已经这样做过,但这次我使用带有对称密码的 PGP 加密密钥文件来熟悉该过程。

有两个地方似乎会发生加密根的配置,在 和 下的内核 init 选项中cryptopts/etc/crypttab这似乎用于mkinitramfs将某些内容烘焙到 initramfs 中。

两个地方都更新有点麻烦;毕竟,如果一个地方就足够了,那么把它放在两个地方又有什么意义呢?我确实看到了将东西放入 中的价值/etc/crypttab,因为如果存在 LUKS 卷,则可以使用不同的挂钩和脚本以不同的方式生成 initramfs。

使用之前针对此问题修正的示例,这是我的 crypttab:

picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg

据推测,这告诉 initramfs/dev/mmcblk0p2应该解密以使用 name picrypt,指定我们要使用luks该文件并将其传递/boot/diskkey.gpg/lib/cryptsetup/scripts/decrypt_gnupg脚本以生成卷的密码。

接下来,这是我的内核 init 行中的加密选项:

cryptopts=target=picrypt,source=/dev/mmcblk0p2,lvm=pi

再次,我们重新指定/dev/mmcblk0p2create picrypt,在这种情况下,我们还告诉它内部有一个名为 call 的 LVM 卷,pi在尝试挂载内核参数指定的根文件系统之前,它应该等待该卷root=/dev/mapper/pi-root

奇怪的是,这个设置不起作用,因为它似乎忽略了 crypttab 的密钥文件和密钥脚本参数,并且不提示输入 GPG 对称密钥密码,而是直接输入密钥。我将修改我的脚本以包含keyscript和,keyfile但是cryptopts为什么我必须这样做吗?

有没有一种方法可以将所有这些(或至少大部分)包含在内核初始化行中/etc/crypttab,并且不重复内核初始化行中的所有内容?必须将所有内容更改两次,这有点荒谬。这些不同的源是否只是提供不同的功能,crypttab 以钩子的形式,cryptopts 以 cryptsetup 的实际参数的形式?

答案1

哇。我花了将近两天的时间才弄清楚这一切在 Debian/stretch 中是如何工作的(尽管我之前已经完成了这一切)。我偶然发现了你的问题,并保持开放状态来回答这个问题,以防我找到答案。

是的,有一个crypttab(5)选项initramfs正是您所要求的:

初始化文件系统

initramfs 挂钩处理根设备、任何恢复设备以及设置了“initramfs”选项的任何设备。这些设备在启动的 initramfs 阶段进行处理。例如,允许使用 dropbear 进行远程解锁。

(不管你信不信,我通过阅读一篇文章偶然发现了这个选项TODO文件在 cryptsetup 源中。)

所以你的crypttab行应该是这样的:

picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg,initramfs

还有一件事:只有“当有需要在 initramfs 阶段解锁的设备(例如 root 或恢复设备)”时,cryptsetup 模块才会添加到 initramfs 映像中(请参阅:cryptroot-conf钩;最近重命名只是conf-hook)。但目前只有当根设备不在 LVM 中时,此方法才有效(可靠)。为了将 cryptsetup 模块强制到 initramfs 映像,我必须CRYPTSETUP=y/etc/cryptsetup-initramfs/conf-hook.

无论如何,您必须update-initramfs -k all -u在更改任何提到的文件后运行。

相关内容