使用引导分区上的密钥文件解锁 LUKS 加密的 Debian 根

Fus*_*yus 7 debian initramfs luks cryptsetup

我正在尝试使用存储在引导分区(解密分区)中的密钥文件解密 Debian 根目录。这会破坏安全性,但现在无关紧要。我必须成功地结束这一点,否则就会尝试死。

我已经创建了挂钩,initramfs并且密钥文件位于文件/boot内的initrd.img-*目录中。密钥文件 ( /boot/keyfile)的路径在/etc/crypttab文件中。

我更新了initramfssudo update-initramfs -u但我收到了这条消息:cryptsetup: WARNING: target sdaX_crypt uses a key file, skipped.

忽略该消息并重新启动会导致磁盘无法启动。该消息Gave up waiting for root device.将显示并放到initramfsshell 中。

initramfs环境中cryptsetup不存在。(它应该存在?)

看到update-initramfs -u“认为”sdaX_crypt设备将以另一种方式安装并且不配置为使用密钥文件解密。

我怎样才能做到这一点?

ign*_*nis 12

根据 Debian 的 cryptsetup文档,与 KEYFILE_PATTERN 中定义的 shell 样式(通配)模式匹配的密钥文件/etc/cryptsetup-initramfs/conf-hook将包含在 initramfs 中,但其他密钥文件不会包含在内:

  • 对于 Debian 9:/usr/share/doc/cryptsetup/README.{initramfs,Debian}.gz
  • 对于 Debian 10 /usr/share/doc/cryptsetup{-initramfs/README.initramfs,-run/README.Debian}.gz:.

我不确定 Debian 的早期版本。

这些文件可以用 读取zless filename.gz,但这里是相关部分,以方便和将来参考。

12. 将密钥文件直接存储在 initrd 中

通常使用密钥文件的设备会被忽略(并发出响亮的警告),并且密钥文件本身不包含在 initrd 中,因为 initramfs 映像通常位于未加密的 /boot 分区上。然而,在某些情况下,需要将密钥文件包含在 initrd 中;例如,最新版本的 GRUB 支持从加密的块设备引导,从而允许加密的 /boot 分区。

在 crypttab(5) 列出的密钥文件中,那些与环境变量 KEYFILE_PATTERN(解释为 shell 模式)的值匹配的文件将包含在 initramfs 映像中。例如,如果 /etc/crypttab 列出了两个密钥文件 /etc/keys/{root,swap}.key,则可以将以下内容添加到 /etc/cryptsetup-initramfs/conf-hook 以将它们添加到 initrd。

KEYFILE_PATTERN="/etc/keys/*.key"

此外,如果 initramfs 映像要包含私钥材料,您将需要使用限制性 umask 来创建它,以阻止非特权用户。这可以通过将以下内容添加到 /etc/initramfs-tools/initramfs.conf 来实现。

乌玛斯克=0077


spi*_*kus 5

您可以改用keyscriptcrypttab 中的选项(man crypttab)。只需创建一个与您的密码相呼应的脚本并将其设置为 keyscript 参数,然后重新生成您的 ramfs。您不需要任何钩子,也不需要将脚本放在 /boot/ 中。

vg1-root_crypt UUID=94a3b301-123-12-a3-ea0403 none luks,keyscript=/etc/echo-root-luks-pass

我不知道为什么 cryptsetup 的 initramfs 挂钩会禁止您仅将密钥文件列在 crypttab 中。可能不想宽恕这种行为。

PS 我不认为它破坏了安全性,它只是或多或少地削弱了它,具体取决于您的 /boot 分区的安全性。例如,您可以 /boot 关闭 USB 驱动器,并将 USB 保存在袜子中等。