パスワードを知らなくても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代わりにマスター キーを使用するように指示するために使用します。
これは<(...)、シェル コマンドの置換とリダイレクトです。基本的に、内部のすべてを実行し、出力をパイプに送信してから、<(...)そのパイプへのパスに置き換えます。

 

したがって、コマンド全体は、複数の操作を凝縮した 1 行のコマンドになります。

関連情報