web-dev-qa-db-ja.com

ヘッドレスサーバー上のLUKSを使用したフルシステム暗号化-dropbearとbusyboxでロックを解除します。どうやって?

Cryptsetup/LUKSでヘッドレスサーバーを暗号化しました。
512個のHDDが/ dev/md0および1,61 TB LUKSで暗号化された2つのHDDは、/、swapなどを含むLVMで/ dev/md1を暗号化しました。
dropbearをインストールしました(そしてbusyboxは既にインストールされていました)ブートプロセス中にすべてのロックを解除します。 GRUB2を使用します。

これまでのところ、すべてが正常に機能しています。ポート22でリッスンしているdropbearの秘密キーでログインし、コマンドでLUKSのロックを解除できます

echo -n "passphrase" > /lib/cryptsetup/passfifo

これを行うとすぐに、サーバーは暗号化されていないものとして起動します。それはまさに私が欲しいものです。

今、これは問題なく動作しますが、私がそれを動作させたい方法ではありません。
まず最初に、/ lib/cryptsetup/passfifoにドキュメントが見つかりません。それはどのように機能しますか?次に、パスワードの代わりに使用するGPG(ループバックデバイスとしてcryptsetupを含む)を含むキーファイルを生成しました。しかし、busyboxでこれを行う方法についてのドキュメンタリーは見つかりません。 GPGがインストールされていないようですので、そのキーを使用できません(GPGをbusyboxで使用できるようにすることはできますか?)

したがって、現時点でシステムをロック解除する唯一の方法は、使用したくないパスワードを/ lib/cryptsetup/passfifoに渡すことです。私はそのようなbusyboxパスで直接cryptsetupを使用してみました

cryptsetup luksOpen /dev/md1 cryptdisk

エラーは表示されませんでしたが、システムはブートを続行しませんでした。

私ができること、またはこれを処理する私のアプローチに何か問題がありますか?

フランク

2
FrankM

これは回答というよりもコメントです。ごめんなさい。しかし、あなたはまだ返事を受け取っていないので、とにかく何かを書きたかった。

どのように機能するのか:

Initramfsには通常、1つのマスタープロセス(通常はbusyboxベースの/init Shellスクリプト)があり、Ubuntuインストールの実際のinitシステムにブートプロセスを渡す前にルートパーティションを使用可能にします。

Initramfsのdropbearの場合、それは/initによって開始される別個のプロセスです。 dropbearにログインすると、さらに別のプロセスであるシェルが取得されます。その間、元の/initが実行され、何か(この場合はLUKSパスワード)を待機している必要があります。

したがって、/initスクリプトがdropbearを開始すると、おそらくここで行うことは、名前付きパイプまたはfifo、つまり/lib/cryptsetup/passfifoを作成することです。そして、その名前付きパイプから読み取ります。この読み取りは、実際に読み取るものがあるまでブロックされるため、/initがハングして入力を待機します。

それから数年後、dropbearにログインし、echo passphrase > /lib/cryptsetup/passfifoを実行します。この時点で、/initは眠りから覚め、再開してLUKSのロックを解除し、残りのブートプロセスを続行します。

そして、それは基本的にそれがどのように機能するかの一般的な考え方です。ドキュメントがない場合は、シェルスクリプトを読む必要があります。

InitramfsのGPG暗号化キーについては、これが何らかの形でUbuntuの標準的な方法であり、おそらく/etc/crypttabを介してセットアップされると確信しています。 wikiでハウツーを確認しましたか?

確かに、GPGをInitramfsに含める必要があります。しかし、ここでは、追加の依存関係なしで機能する代替アプローチを概説しました。

GnuPGでdm-crypt(LUKS)を使用してFDEに2要素を使用するにはどうすればよいですか?

これの問題は、もちろん標準ではないことです。したがって、理論的には単純かもしれませんが、実際には設定が難しいかもしれません。

1
frostschutz