LUKSを使用するためにホストを起動しています。その一部として、キックスタートファイルにはかなり基本的な「基本」パスワードがあります。
私たちはansibleを介して新しいビルドを「実行する」ので、その一部としてデフォルトのluksパスワードをより強力なパスワードに変更したいと思います(そしてAnsibleを介して管理)。
しかし、私が理解していないことは、非対話型の方法でcryptsetup(または他のもの)を使用してパスワードを更新するにはどうすればよいかということです。
欲しい維持するパスワード(キーファイルではありません)の使用 - ルートドライブにネットワークバインディングディスク暗号化を使用してClevis / Tang展開を開始し、パスワードの起動オプションを維持したかったです。
そうだ
echo "oldpassphrase
newpassphrase" | cryptsetup luksAddKey /dev/sda2
それで問題は解決するかもしれませんが、混乱した選択のように感じますか?
ベストアンサー1
可能作る標準入力をキーファイルとして使用して、非対話式のLUKSコンテナを作成します。echo -n "mypassword" cryptsetup luksFormat --key-file - dev/sda2
ただし、非対話式ではパスワードを変更することはできません。そして次の理由でキーファイルは使用されません。
cryptsetup
パスワードはコマンドラインでは許可されていません。パスワードがシェル履歴に漏洩するのを防ぐために、ファイルでのみ対話的に許可されています。- 標準入力をキーファイルとして使用できますが、パスワードを追加または変更するには、既存のパスワードと新しいパスワードを入力する必要があります。これは2つの入力と1つの標準入力です。
オプション1 - 名前付きパイプの使用
技術的にはここではファイルが必要ですが、そのファイルはキーファイルではなく名前付きパイプです。
mkpipe fifo
echo -n "oldpass" | cryptsetup luksAddKey --key-file - test.img fifo &
echo -m "newpass" > fifo
最初のコマンドは名前付きパイプを生成し、2番目のコマンドはstdinを使用して元のパスワードを提供し、パイプから新しいパスワードを読み込みます。 2番目のコマンドはブロックされているため、&
バックグラウンドに残します。 3番目のコマンドは、パイプに新しいパスワードを記録し、cryptsetupがロックを解除して続行できるようにします。
オプション2 - cryptsetup APIの使用
Cryptsetupはユーティリティであるだけでなく、ライブラリ(libcryptsetup)でもあります。次の機能を使用できます。crypt_keyslot_add_by_passphrase()自分のコードに新しいパスワードを追加してください。この特定の関数は、既存のパスワードと新しいパスワードchar *
(文字列)を受け入れます。