首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ubuntu现有全磁盘加密设备的分离LUKS报头(在USB上)

Ubuntu现有全磁盘加密设备的分离LUKS报头(在USB上)
EN

Unix & Linux用户
提问于 2021-08-14 22:29:58
回答 1查看 2.4K关注 0票数 2

我已经在USB上有一个/boot分区,在我的计算机上有一个LUKS分区,这与Ubuntu 21的全磁盘加密方案相对应,我想把LUKS分区的头放到USB上(或者在/boot分区上或者在USB上的另一个新分区上)。

我已经将头(与cryptsetup luksHeaderBackup一起)放在了我的引导分区(假设在设备/dev/sda3上)的boot_header.luks中,然后在带有header=选项的crypttab文件中尝试了以下操作:

  • /boot/boot_header.luks
  • /dev/sda3/boot_header.luks
  • /dev/sda3:/boot_header.luks/boot_header.luks:/dev/sda3 (当然)

/dev/sda3的uuid和/dev/disk/by-uuid/[uuid]的uuid也一样

因此,我认为设备sda3并没有按照密塔布的文档安装(如果我正确理解的话)。

可以选择地,路径包含标题的文件的后面可以是":“和/etc/fstab设备规范(例如,以"UUID=”或类似的开头);在这种情况下,路径相对于设备文件系统根目录。设备将自动挂载,因为只在LUKS设备激活持续时间。

因此,我希望在执行带有local-bottominit-bottom中的自定义脚本的cryptroot脚本之前安装引导分区。同时,正如建议的那样,这里试图将头合并到回答后面的initramfs中。

但是,启动时的结果总是相同的:

“标头”选项的错误值

我发现使用拱门是非常可行的,但是对于Ubuntu有同样的方法吗(而不修改像cryptroot这样的现有脚本)?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-08-23 09:28:35

正如@A.B在注释中指出的那样,解决方案是一个原始分区,它包含标题,而不是分区内的头文件(这是由于需要先挂载文件系统而引起的麻烦)。

若要将标头(LUKS2大约为16 To )复制到分区(/dev/sdb大于标头大小),可以使用两个选项。

  • 第一种方法是使用dd复制原始头。

首先,您需要找到数据的偏移量(自标题总是从0开始.以来)。对于LUKS设备/dev/sda4,使用cryptsetup luksDump /dev/sda4并在节数据段中查找ligne偏移量。然后用stat -fc %s /dev/sda4查找文件系统块大小。最后,dd if=/dev/sda4 of=/dev/sdb bs=<fs_block_size> count=<data_offset>

  • 第二种方法是将所有头数据打包到将复制到分区/dev/sdb的备份文件中。

因为备份文件可能会导致一些安全问题,即使它保存在加密的磁盘上,所以最好只为该文件创建一个ramdisk。

代码语言:javascript
复制
mkdir /tmp/header_backup
mount -t tmpfs -o size=512m tmpfs /tmp/header_backup
cryptsetup luksHeaderBackup /dev/sda4 --header-backup-file /tmp/header_backup/header.luks
dd if=/tmp/header_backup/header.luks of=/dev/sdb
umount /tmp/header_backup

然后在/etc/crypttab中将选项header=/dev/sdb添加到相应的行(例如,sda4_crypt [UUID] none luks,discard,header=/dev/sdb)

若要删除旧的LUKS标题:cryptsetup luksErase /dev/sda4。这只会擦除键槽,但保留所有元数据。如果您希望(没有必要)完全擦除标头,则需要有另一个文件系统头,以便将UUID保留在该分区上。但请注意,完全擦除LUKS头可能不会导致安全擦除取决于您的存储设备(SSD或HDD)。为SSD被删除的块有可能停留在队列中,直到设备需要分配更多的空间。

否则,要擦除标头:用<fs_block_size>获取文件系统块大小( stat -fc %s /dev/sda4 ),用cryptsetup luksDump /dev/sdb获取LUKS数据偏移量(<luks_data_offset>),获取分区/dev/sda4 (<uuid_sda4>)的UUID,然后:

代码语言:javascript
复制
dd if=/dev/urandom of=/dev/sda4 bs=<fs_block_size> count=<luks_data_offset>
mkfs.ext4 fs.img
tune2fs -U <uuid_sda4> fs.img
dd if=fs.img of=/dev/sda4

分区/dev/sdb将具有与LUKS相同的UUID,这可能是一个问题。您可以更改它,而不需要使用cryptsetup luksUUID /dev/sdb --uuid $(uuidgen)来破坏LUKS进程。

最后,使用update-initramfs -u -k all更新initramfs。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/664705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档