![基于 Debian 的 GNU/Linux 上分离的 LUKS 标头](https://linux22.com/image/211751/%E5%9F%BA%E4%BA%8E%20Debian%20%E7%9A%84%20GNU%2FLinux%20%E4%B8%8A%E5%88%86%E7%A6%BB%E7%9A%84%20LUKS%20%E6%A0%87%E5%A4%B4.png)
Stack Exchange 上有关于如何为 LUKS 加密磁盘设置分离标头的分散信息。通过使用谷歌搜索网络,我发现了有限的信息。我发现的一些最好的信息链接到问题的底部。其中一些很有帮助,即使对于像我这样的新手也是如此。但有些似乎不完整,因此我有动力写这篇文章。请看看您是否可以帮助解决以下问题,使其完整并正常工作。
我假设读者曾经lsblk
发现应分离的标头驱动器是sdb
,并存储在其他驱动器上sda
。
方法一:将header制作成分区
找出标头的大小,并将分区设置为正确的大小。以下命令将为您提供大量信息。记下
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 状态=进度
在哪里X和K是上面选择的数字
fdisk
。现在标头存储在 上,并且为了好玩,如果您打开(并在必要时安装)该程序,您将看到 gparted 认为是一个很小的 LUKS 加密分区!您将看到的 UUID与 的 UUID 相同。因此,您必须生成一个新的 UUID(在 Google 中搜索“uuid 生成器”)。假设新生成的UUID是sdaX
gparted
sdaX
lsblk -f
/dev/sda1
/dev/sdb1
新建UID;然后改变它$ cryptsetup luksUUID /dev/sda1 --uuid新建UID
现在我们必须将此信息输入到
/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
- 选项。我已尽力确保一切正确且详细。但可能有一个错误。请随意编辑。当然,如果您丢失数据或损坏某些东西,我们将无法提供保修。
来源/其他阅读:
- cryptsetup,分离现有卷上的标头(关于超级用户)
- 使用 Ubuntu 为现有全盘加密设备分离 LUKS 标头(在 USB 上)
- 如何将 LUKS 与分离标头一起使用(在 LinuxConfig.org 上)
- 密码表(5)在 Debian 联机帮助页上
- 密码表(5)在 man7.org 上
答案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