在不知道密码的情况下更改 LUKS 文件系统上的密码

在不知道密码的情况下更改 LUKS 文件系统上的密码

我有一个 Debian Wheezy 服务器,它已经使用加密驱动器运行了一段时间。/dev/sda5当我的加密密码文件损坏时,加密驱动器 ( ) 的密码丢失。

我希望能够重新启动该服务器,但这当然需要该密码。由于驱动器显然处于解密状态,是否有一种方法可以在不知道旧密码的情况下更改密码?

cryptsetup luksChangeKey /dev/sda5需要卷的密码。

我当然可以把rsync所有东西都关掉然后重建,但我想避免这种情况。我翻遍了记忆(#cat /dev/mem | less),但找不到它(这是一件非常好的事情!)。

答案1

是的,您可以通过在解密卷时访问主密钥来执行此操作。

添加新密码的快速而肮脏的方法:

device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)

devicevolume_name应适当设置。
volume_name是解密卷的名称,即您在 中看到的那个/dev/mapper


解释:

LUKS 卷使用主密钥加密其数据。您添加的每个密码仅存储使用该密码加密的主密钥的副本。因此,如果您有主钥匙,您只需在新的钥匙槽中使用它即可。

让我们分解上面的命令。

$ dmsetup table --showkeys $volume_name

这会转储有关主动解密卷的大量信息。输出如下所示:

0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096

字段 #5 是主密钥。

 

$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p

不会显示其输出,因为它是二进制数据,但它的作用是获取卷的主密钥,然后将其转换为稍后需要的原始二进制数据。

 

$ cryptsetup luksAddKey $device --master-key-file <(...)

这告诉 cryptsetup 将新密钥添加到卷中。通常此操作需要现有密钥,但我们通常--master-key-file告诉它我们要使用主密钥。
<(...)是 shell 命令替换和重定向。它基本上执行内部的所有内容,将输出发送到管道,然后用<(...)该管道的路径替换 。

 

所以整个命令只是一句话,浓缩了几个操作。

相关内容