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 *(文字列)を受け入れます。

おすすめ記事