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

Mik*_*Rev 7 debian header-file linux-kernel luks crypttab

关于如何在 Stack\xc2\xa0Exchange 上为 LUKS 加密磁盘设置 \xe2\x80\xafup 分离标头\n的信息分散。\xc2\xa0\n通过使用 Google 搜索网络,我发现了有限的信息。\ xc2\xa0\n我发现的一些最好的信息\nis链接到问题的底部。\xc2\xa0\n其中一些很有帮助,甚至对像我这样的\xc2\xa0新手也很有帮助。\xc2\xa0\n但是有些似乎不完整,因此我有动力写这个。\​​xc2\xa0\n请看看你是否可以帮助解决下面的问题,\n使其完整并正常工作。

\n

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

\n
\n

方法一:将header制作成分区

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

    \n
    $ cryptsetup luksDump /dev/sdb\n...\nData segments:\n  0: crypt\n    offset: 16777216 [bytes]\n    length: (whole device)\n    cipher: aes-xts-plain64\n    sector: 512 [bytes]\n...\n
    Run Code Online (Sandbox Code Playgroud)\n

    执行fdisk(如果没有则安装)\n与$\xc2\xa0fdisk\xc2\xa0/dev/sda.

    \n

    给它命令n并按 Enter。\xc2\xa0\n使用默认分区号创建一个主分区;假设它是X。\xc2\xa0\n选择并记下默认第一个扇区的值\n(假设它是数字M)。\xc2\xa0\n它将提示您输入最后一个扇区;我们称之为K。\xc2\xa0\n要\xc2\xa0找到一个合适的数字K进入(并假设一个扇区的大小为 512\xe2\x80\xafbytes),计算K \xe2\x80\ xaf=\xe2\x80\xaf M \xe2\x80\xaf+\xe2\x80\xaf偏移量/512; 其中offsetluksDump是您在上面使用 .\xc2\xa0 \n命令找到的数字cryptsetup。\xc2\xa0\nIt\xc2\xa0 将创建一个与 luks-header 大小完全相同的分区。最后,用 写入更改w。现在将 luks-header 导出到~/some/file/path/header.img并将其写入您创建的分区:

    \n
    \n$ cryptsetup luksHeaderBackup /dev/sdb --header-backup-file ~/some/file/path/header.img\n$ dd if=~/some/file/path/header.img of=/dev/sda X计数= K bs=512 状态=进度\n
    \n

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

    \n
    $ cryptsetup luksUUID /dev/sda1 --uuid newuuid
    \n
  2. \n
  3. 现在我们必须将此信息输入到/etc/crypttab.\xc2\xa0\n使用文本编辑器打开该文件,并找到引用 的行sdb。\xc2\xa0\n在\xc2\xa0第四列中添加选项。header=/dev/sdaX

    \n

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

    \n

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

    \n
  4. \n
\n
\n

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

\n

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

\n
UUID=###########-############-####-########\n
Run Code Online (Sandbox Code Playgroud)\n

相对于sda1,标题位于/some/path/header.img.\xc2\xa0\n,然后crypttab(5)表示在/etc/crypttabI\xc2\xa0 的第四列中应该写

\n
header=/some/path/header.img:UUID=###########-############-####-########\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

问:请您看一下并引用要写的内容。\xc2\xa0\n我刚刚安装的 DEBIAN,不幸的是我无法让它工作。

\n
\n

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

\n

来源/其他阅读:

\n\n

fro*_*utz 4

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


如果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 来识别它。