web-dev-qa-db-ja.com

cryptoptsとcrypttabの違い

以前に行った暗号化されたルートfsを設定していますが、今回は、プロセスに慣れるために、対称パスワードを持つPGP暗号化キーファイルを使用しています。

暗号化されたルートの構成が発生するように見える場所は2つあります。cryptoptsの下のカーネルinitオプションとmkinitramfsが特定のものをベイクするために使用するように見える/etc/crypttabです。 initramfsに。

両方の場所で物事を更新するのはちょっと面倒です。結局のところ、1つで十分な場合、2つの場所に配置することの意味は何ですか? LUKSボリュームが存在する場合、initramfsは異なるフックとスクリプトで異なる方法で生成される可能性があるため、/etc/crypttabにあるものの価値はわかります。

この質問のために修正された前の例を使用して、これが私のcrypttabです:

picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg

おそらく、これはinitramfsに/dev/mmcblk0p2を復号化して名前picryptを使用し、luksを使用し、/boot/diskkey.gpgファイルをに渡すことを指定する必要があることを通知します。 /lib/cryptsetup/scripts/decrypt_gnupgボリュームのパスフレーズを生成するスクリプト。

次に、カーネルのinit行からの暗号文を次に示します。

cryptopts=target=picrypt,source=/dev/mmcblk0p2,lvm=pi

繰り返しになりますが、/dev/mmcblk0p2picryptを作成することを再指定しています。この場合、piと呼ばれるLVMボリュームが内部にあることも通知しています。 root=/dev/mapper/pi-rootカーネルパラメータで指定されたルートファイルシステムをマウントしようとする前。

この設定は、奇妙なことに、crypttabのキーファイルとキースクリプトパラメータを無視し、GPG対称キーパスフレーズを要求せず、キーを直接要求しているように見えるため、機能していません。スクリプトを修正して、keyscriptkeyfilecryptoptsに含めますが、なぜこれを行う必要がありますか?

これらすべて(または少なくともそのほとんど)を/etc/crypttabに含め、カーネルの初期化行のすべてを複製しない方法はありますか?すべてを2回変更しなければならないのはちょっとばかげています。これらの異なるソースは、単に異なる関数、フックの形式のcrypttabとcryptsetupへの実際のパラメーターの形式のcryptoptsを提供しますか?

3
Naftuli Kay

ワオ。これがDebian/Stretchでどのように機能するかを理解するのに2日近くかかりました(これは以前にすべて行ったことがありますが)。私はあなたの質問に出くわし、答えが見つかった場合に備えて、これに答えるために開いたままにしました。

そして、はい、 crypttab(5) オプションinitramfsがあります。これは、あなたが求めていることを正確に実行します。

initramfs

Initramfsフックは、ルートデバイス、再開デバイス、および「initramfs」オプションが設定されたデバイスを処理します。これらのデバイスは、ブートのinitramfsステージ内で処理されます。例として、これにより、dropbearを使用したリモートロック解除の使用が可能になります。

(信じられないかもしれませんが、cryptsetupソースの TODO-File を読んで、偶然このオプションを見つけました。)

したがって、crypttab行は次のようになります。

picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg,initramfs

もう1つ:cryptsetupモジュールは、「initramfsステージでロックを解除する必要のあるデバイス(ルートデバイスやレジュームデバイスなど)がある場合」にのみinitramfsイメージに追加されます(参照: cryptroot-conf フック;最近 名前が変更されました ちょうど conf-hook )に。ただし、これは現在、ルートデバイスがLVMにない場合にのみ(確実に)機能します。 cryptsetupモジュールをinitramfsイメージに強制するには、CRYPTSETUP=y/etc/cryptsetup-initramfs/conf-hookを設定する必要がありました。

いずれの場合も、上記のファイルのいずれかを変更した後、update-initramfs -k all -uを実行する必要があります。

2
dpat