cryptsetup,分离现有卷上的标头

cryptsetup,分离现有卷上的标头

有没有办法从现有cryptsetup卷中分离/删除标头?这样我就必须指定--header何时要打开 ( cryptsetup luksOpen ...) 该卷?

我还没有找到将标题从 A(卷)“移动”到 B(无论其他什么)的解决方案

答案1

免责声明:应备份重要数据。如果本说明有错误或使用不当,可能会丢失数据。话虽如此……

此答案不涉及启动过程或系统配置。它仅使用手动命令。

我们假设 LUKS 设备是/dev/loop0(例如,可以是/dev/sdb9)并且当前映射为,/dev/mapper/myluks并且不相关的其他设备的文件系统安装在 上/mnt。只需根据实际情况进行调整即可。

使用稀疏文件设置测试:

# truncate -s $((16 * 2**30)) /tmp/myblock.img
# losetup -f --show /tmp/myblock.img 
/dev/loop0
# cryptsetup luksFormat /dev/loop0

WARNING!
========
This will overwrite data on /dev/loop0 irrevocably.

Are you sure? (Type 'yes' in capital letters): YES
Enter passphrase for /tmp/myblock.img: 
Verify passphrase: 
# cryptsetup luksOpen /dev/loop0 myluks
Enter passphrase for /tmp/myblock.img:

直接在 LUKS 块设备中添加一些数据(当然,创建 LVM 或文件系统也可以):

# echo test-data > /dev/mapper/myluks
# head -1 /dev/mapper/myluks
test-data

通过执行 LUKS 标头备份来复制 LUKS 标头:

cryptsetup luksHeaderBackup /dev/loop0 --header-backup-file /mnt/headerbackup.luks

关闭 LUKS 设备并尝试使用分离的标头重新打开它:

cryptsetup close myluks
cryptsetup luksOpen --header /mnt/headerbackup.luks /dev/loop0 myluks

检查数据的偏移量以了解分区中要擦除多少数据。通常,此偏移量应与新创建的大小相同/mnt/headerbackup.luks。在 LUKS2 输出中,这应该类似于:

cryptsetup luksDump /dev/loop0

[...]

Data segments:
  0: crypt
    offset: 16777216 [bytes]
    length: (whole device)
    cipher: [...]
    sector: [...]

[...]

因此需要擦除 16777216 个字节(我认为旧版 LUKS1 可能默认使用 4194304):

dd if=/dev/zero of=/dev/loop0 bs=16777216 count=1

如果直接在文件图像而不是设备上完成,这可能应该包括conv=notrunc

检查它是否仍然有效,但只能使用分离的标题(如果不是...使用备份):

# cryptsetup close myluks
# cryptsetup luksOpen /dev/loop0 myluks
Device /dev/loop0 is not a valid LUKS device.
# cryptsetup luksOpen --header /mnt/headerbackup.luks /dev/loop0 myluks
Enter passphrase for /tmp/myblock.img: 
# head -1 /dev/mapper/myluks
test-data

就是这样。由于偏移量被保留,因此无需重新定位。

如果 LUKS 设备是直接使用分离的标头创建的,则默认情况下不存在偏移量,实际数据将从底层设备的字节 0 开始。要直接创建分离的标头但仍保留空间以供以后更改(或为某种自动检测保留假 LUKS 标头的空间),应在初始创建时使用类似以下内容:

cryptsetup luksFormat --header /mnt/header.luks --offset $((16777216/512)) /dev/loop0

最后说明:根据底层设备技术,无法保证新擦除的 LUKS 信息不能使用先进技术恢复,因为可能会有残留(例如:由于 SSD 的 FTL 重定位或硬盘剩磁……)。如果这是要避免的威胁的一部分,则应直接创建分离的标头,或者在分离标头后重新加密数据(对于 LUKS2 来说,使用 非常容易cryptsetup reencrypt ...)。

相关内容