しばらくの間、暗号化されたドライブで稼働しているDebian Wheezyサーバーがあります。暗号化されたドライブのパスワード(/dev/sda5
)暗号化されたパスワードファイルが破損すると失われました。
このサーバーを再起動できるようにしたいのですが、もちろんそのパスワードが必要になります。ドライブは明らかに復号化された状態にあるため、古いパスワードを知らずにパスワードを変更する方法はありますか?
cryptsetup luksChangeKey /dev/sda5
には、ボリュームのパスワードが必要です。
もちろん、rsync
すべてをオフにして再構築することもできますが、それは避けたいです。私はメモリ(#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
_を使用して、代わりにマスターキーを使用することを伝えます。<(...)
は、シェルコマンドの置換とリダイレクトです。基本的には内部ですべてを実行し、出力をパイプに送信してから、<(...)
をそのパイプへのパスに置き換えます。
したがって、コマンド全体は、いくつかの操作を要約するための1行にすぎません。