我在具有 SSH + root 访问权限的计算机上有一个加密分区的主密钥。我无权访问与该分区关联的任何密码。有没有办法可以验证主密钥对于该分区是否有效?
我无法卸载该分区,因为它是机器的根分区,所以我认为我不能使用 luksOpen 等。
答案1
就像 @HaukeLaging 所说,dmsetup table --showkeys
可能会显示仍然打开的 LUKS 容器的主密钥(可能不适用于 LUKS2 容器, 也可以看看6.10 如何从映射的 LUKS1 容器恢复主密钥?)。
您可以复制设备的前 128M,然后在家中进行实验。
ssh root@server head -c 128M /dev/sdxy > sdxy.img
可能的实验:
hexedit master.key # hexedit or xxd -r -p to produce binary file
hexdump -C master.key # to verify correctness
cryptsetup luksAddKey --master-key-file master.key sdxy.img
cryptsetup luksOpen sdxy.img luksxy
file -sL /dev/mapper/luksxy
如果您获得随机数据而不是已知的文件系统或 LVM 标头,则它是错误的密钥,或者 LUKS 标头存在其他问题。
您可以直接在服务器上运行相同的实验,但可能会出现其他设备/重复 UUID 出现等副作用,因此最好在单独的计算机或虚拟机内进行。
如果 LUKS 标头损坏,导致 luksAddKey 不起作用,您也可以 luksFormat 一个新的。但是,在这种情况下,除了主密钥之外,您还必须指定正确的密码和数据偏移量。
但是,如果您对此 LUKS 容器有任何疑问,则应在机器仍在运行时备份所有文件。将主密钥存储在各处也会绕过 LUKS 安全概念,因此最好从头开始创建一个具有新主密钥的新 LUKS 容器。