暗号化されたドライブを使用してしばらく実行している 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)
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 行のコマンドになります。