系统相关
首页 > 系统相关> > linux – 在不知道密码的情况下更改LUKS文件系统上的密码

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

作者:互联网

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

我希望能够重新启动此服务器,但这当然需要密码.由于驱动器显然处于解密状态,有没有办法在不知道旧密码的情况下更改密码?

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

我当然可以将所有东西都关闭并重建,但我想避免这种情况.我查看了内存(#cat / dev / mem | less),但无法找到它(这是一件非常好的事情!).

解决方法:

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

添加新密码的快速和脏:

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

应正确设置device和volume_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命令替换&重定向.它基本上执行内部的所有内容,将输出发送到管道,然后用<(...)替换该管道的路径. 所以整个命令只是一个单行程来压缩几个操作.

标签:linux,luks
来源: https://codeday.me/bug/20190808/1623710.html