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 *
(文字列)を受け入れます。
答え2
ct=$(cat /etc/crypttab)
[[ $ct =~ ((sda[0-9])_crypt[[:blank:]]) ]] || _fail Could not find crypted partition
part="/dev/${BASH_REMATCH[2]}"
echo Partition is $part
(echo "$existingPW"; echo "$newPW"; echo "$newPW") | cryptsetup luksAddKey $part
...完了するのに数秒かかります。
答え3
次のように新しいボリュームを作成するとします。
echo -n pass0 | cryptsetup luksFormat /dev/sda2 -
したがって、キーウェイ#0のパスワードは「pass0」です。
次に、キーウェイ#1のパスワードを「pass1」に設定します。
echo -n "pass0pass1" | cryptsetup luksAddKey --key-file /dev/stdin --keyfile-size 5 --key-slot 1 /dev/sda2 /dev/stdin
最初のパスワード「pass0」は5文字の長さなので、「--keyfile-size 5」を指定しました。