我有一个使用加密驱动器运行了一段时间的 Debian Wheezy 服务器。/dev/sda5当我的加密密码文件损坏时,加密驱动器 ( ) 的密码丢失。
我希望能够重新启动此服务器,但这当然需要该密码。既然驱动器显然处于解密状态,那么有没有办法在不知道旧密码的情况下更改密码?
cryptsetup luksChangeKey /dev/sda5 需要卷的密码。
我当然可以rsync关闭并重建一切,但我想避免这种情况。我查看了内存 ( #cat /dev/mem | less),但找不到它(这是一件非常好的事情!)。
phe*_*mer 43
是的,您可以通过在解密卷时访问主密钥来做到这一点。
添加新密码的快速而肮脏:
device=/dev/sda5
volume_name=foo
cryptsetup luksAddKey $device --master-key-file <(dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p)
Run Code Online (Sandbox Code Playgroud)
device并volume_name应适当设置。
volume_name是解密卷的名称,您在/dev/mapper.
LUKS 卷使用主密钥加密其数据。您添加的每个密码仅存储使用该密码加密的此主密钥的副本。因此,如果您拥有主密钥,您只需在新的密钥槽中使用它。
让我们拆开上面的命令。
$ dmsetup table --showkeys $volume_name
Run Code Online (Sandbox Code Playgroud)
这会转储有关主动解密的卷的一堆信息。输出如下所示:
0 200704 crypt aes-xts-plain64 53bb7da1f26e2a032cc9e70d6162980440bd69bb31cb64d2a4012362eeaad0ac 0 7:2 4096
Run Code Online (Sandbox Code Playgroud)
字段#5 是主密钥。
$ dmsetup table --showkeys $volume_name | awk '{ print $5 }' | xxd -r -p
Run Code Online (Sandbox Code Playgroud)
不会显示它的输出,因为它是二进制数据,但它的作用是获取卷的主密钥,然后将其转换为稍后需要的原始二进制数据。
$ cryptsetup luksAddKey $device --master-key-file <(...)
Run Code Online (Sandbox Code Playgroud)
这告诉 cryptsetup 向卷添加新密钥。通常这个操作需要一个现有的密钥,但是我们--master-key-file用来告诉它我们想要使用主密钥。
的<(...)是外壳命令替换&重定向。它基本上执行内部的所有内容,将输出发送到管道,然后用<(...)指向该管道的路径替换。
所以整个命令只是一行代码来浓缩几个操作。
| 归档时间: |
|
| 查看次数: |
15846 次 |
| 最近记录: |