以前に行った暗号化されたルート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/mmcblk0p2
がpicrypt
を作成することを再指定しています。この場合、pi
と呼ばれるLVMボリュームが内部にあることも通知しています。 root=/dev/mapper/pi-root
カーネルパラメータで指定されたルートファイルシステムをマウントしようとする前。
この設定は、奇妙なことに、crypttabのキーファイルとキースクリプトパラメータを無視し、GPG対称キーパスフレーズを要求せず、キーを直接要求しているように見えるため、機能していません。スクリプトを修正して、keyscript
とkeyfile
をcryptopts
に含めますが、なぜこれを行う必要がありますか?
これらすべて(または少なくともそのほとんど)を/etc/crypttab
に含め、カーネルの初期化行のすべてを複製しない方法はありますか?すべてを2回変更しなければならないのはちょっとばかげています。これらの異なるソースは、単に異なる関数、フックの形式のcrypttabとcryptsetupへの実際のパラメーターの形式のcryptoptsを提供しますか?
ワオ。これが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
を実行する必要があります。