基于 Debian 的 GNU/Linux 上分离的 LUKS 标头

基于 Debian 的 GNU/Linux 上分离的 LUKS 标头

Stack Exchange 上有关于如何为 LUKS 加密磁盘设置分离标头的分散信息。通过使用谷歌搜索网络,我发现了有限的信息。我发现的一些最好的信息链接到问题的底部。其中一些很有帮助,即使对于像我这样的新手也是如此。但有些似乎不完整,因此我有动力写这篇文章。请看看您是否可以帮助解决以下问题,使其完整并正常工作。

我假设读者曾经lsblk发现应分离的标头驱动器是sdb,并存储在其他驱动器上sda


方法一:将header制作成分区

  1. 找出标头的大小,并将分区设置为正确的大小。以下命令将为您提供大量信息。记下offset下面旁边的数字Data segments:

    $ cryptsetup luksDump /dev/sdb
    ...
    Data segments:
      0: crypt
        offset: 16777216 [bytes]
        length: (whole device)
        cipher: aes-xts-plain64
        sector: 512 [bytes]
    ...
    

    执行fdisk(如果没有则安装)$ fdisk /dev/sda

    给它命令n并按 Enter 键。使用默认分区号创建主分区;说是X。选择并记下默认第一个扇区的值(假设它是中号)。它会提示您最后一个扇区;我们就这样称呼它吧K。寻找合适的号码K输入(并假设扇区大小为512字节),计算K = 中号 + 抵消/512;在哪里抵消luksDump是您在上面使用命令找到的数字cryptsetup。它将创建一个与 luks-header 大小完全相同的分区。最后,用 写入更改w。现在将 luks-header 导出到~/some/file/path/header.img并将其写入您创建的分区:

    $ cryptsetup luksHeaderBackup /dev/sdb --header-backup-file ~/some/file/path/header.img
    $ dd if=~/some/file/path/header.img of=/dev/sdaX计数=Kbs=512 状态=进度
    

    在哪里XK是上面选择的数字fdisk。现在标头存储在 上,并且为了好玩,如果您打开(并在必要时安装)该程序,您将看到 gparted 认为是一个很小的 ​​LUKS 加密分区!您将看到的 UUID与 的 UUID 相同。因此,您必须生成一个新的 UUID(在 Google 中搜索“uuid 生成器”)。假设新生成的UUID是sdaXgpartedsdaXlsblk -f/dev/sda1/dev/sdb1新建UID;然后改变它

    $ cryptsetup luksUUID /dev/sda1 --uuid新建UID
  2. 现在我们必须将此信息输入到/etc/crypttab.使用文本编辑器打开该文件,然后找到引用sdb.在第四列中添加选项。header=/dev/sdaX

    请参阅frostschutz 的答案,了解如何通过设置 header=/dev/disk/by-uuid/UUID 来更好地做到这一点。请务必进行此修改并为他们的答案投票。

    然后写$ update-initramfs -u -k all。如果没有错误,那么我认为你很好。


方法 2:让标头成为文件系统上的文件

文档和其他来源表示,应该可以将标头复制到文件系统sda并从那里引用它。假设我们说分区的文件系统sda1

UUID=###########-############-####-########

相对于sda1,标头位于/some/path/header.img.然后密码表(5)说在第四列/etc/crypttab我应该写

header=/some/path/header.img:UUID=###########-############-####-########

但如果我这样做,update-initramfs就会抱怨找不到标头。

问:您可以看一下并引用要写的内容吗?我的 DEBIAN 是全新安装的,不幸的是我无法让它工作。


结束时;您可以使用 删除现有标头中的信息cryptsetup luksErase /dev/sdb。如果您想应用 cryptsetup 来访问有关加密分区的信息,您现在必须向其传递--header /dev/sdax- 选项。我已尽力确保一切正确且详细。但可能有一个错误。请随意编辑。当然,如果您丢失数据或损坏某些东西,我们将无法提供保修。

来源/其他阅读:

答案1

分离标头是一个特殊的用例。由于很少有人使用它,因此某些地方也可能缺乏对它的支持。所以我不建议使用它们。我也不建议使用没有分区表的驱动器。这个设置有太多的陷阱。


如果header=UUID=x不起作用,请尝试header=/dev/disk/by-uuid/x

对于header=/some/path/file:UUID=x,路径是相对于指定文件系统的。所以,如果你mount UUID=x /mnt/somewhere,那么它会寻找/mnt/somewhere/some/path/file

关于luksErase(或者通过 luksRemoveKey 或 luksKillSlot 删除所有密钥)。没有任何剩余键槽的 LUKS 标头无法再打开(您必须使用分离的标头)。但它仍然提供 UUID,以便您可以识别加密设备。

如果您的分离标头也在分区上并且具有相同的 UUID,则会发生冲突。您必须使用 luksUUID 更改其中之一,以便能够通过 UUID 识别标头和加密设备。如果是 LUKS2,您还可以设置标签。

或者,如果您使用 GPT 分区,则可以使用 PARTUUID 或 PARTLABEL 来识别它。

答案2

Debian 中不需要使用 initramfs-tools 或其他配置来配置任何钩子或参数吗?

在 Arch Linux 中,需要使用 mkinitcpio 配置挂钩脚本,以便配置 initramfs 来解密 LUKS 磁盘并在 LVM 中挂载文件系统。其他内核参数也通过 /etc/default/grub 中的 grub 配置传递(如果使用此引导加载程序)

*Arch Linux 参考:

https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_system_using_a_detached_LUKS_header

相关内容