LUKSパスワードを非対話式に変更しますか?

LUKSパスワードを非対話式に変更しますか?

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

ただし、非対話式ではパスワードを変更することはできません。そして次の理由でキーファイルは使用されません。

  1. cryptsetupパスワードはコマンドラインでは許可されていません。パスワードがシェル履歴に漏洩するのを防ぐために、ファイルでのみ対話的に許可されています。
  2. 標準入力をキーファイルとして使用できますが、パスワードを追加または変更するには、既存のパスワードと新しいパスワードを入力する必要があります。これは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」を指定しました。

関連情報