暗号化されたルートファイルシステムを設定しています。以前はこれを行いましたが、今回はプロセスに慣れるために対称パスワードを含むPGP暗号化キーファイルを使用しています。
暗号化ルート設定が発生しているように見える2つの場所があります。以下のカーネル初期化オプションとcryptopts
initramfsに何かを書き込む/etc/crypttab
ために使用されるようです。mkinitramfs
両方の場所を更新するのは少し面倒です。結局、1つの場所で十分であれば、2つの場所に置くことはどういう意味ですか?/etc/crypttab
LUKSボリュームがある場合は、異なるフックとスクリプトを使用してinitramfsを異なる方法で作成できるため、物を入れる価値を見てください。
この問題に対して以前に修正された例では、次のパスワードタブがあります。
picrypt /dev/mmcblk0p2 /boot/diskkey.gpg luks,keyscript=/lib/cryptsetup/scripts/decrypt_gnupg
おそらくこれはinitramfsに/dev/mmcblk0p2
nameを使用するために復号化する必要があることを知らせ、ファイルを使用することを指定し、picrypt
それをスクリプトに渡してボリュームのパスワードを生成するようにします。luks
/boot/diskkey.gpg
/lib/cryptsetup/scripts/decrypt_gnupg
次に、カーネル初期化ラインの暗号化オプションは次のとおりです。
cryptopts=target=picrypt,source=/dev/mmcblk0p2,lvm=pi
/dev/mmcblk0p2
もう一度createを再指定してください。この場合、カーネルパラメータで指定されたルートファイルシステムをマウントする前に待たなければならないpicrypt
callというLVMボリュームが内部的に存在することを知らせます。pi
root=/dev/mapper/pi-root
奇妙なことに、この設定はcrypttabのキーファイルとキースクリプトの引数を無視し、GPG対称キーパスワードの入力を求めずにキーを直接入力するため、機能しません。含めるようにスクリプトを変更しますkeyscript
が、keyfile
cryptopts
なぜ必ずこのことをしなければなりませんか?
/etc/crypttab
カーネル初期化ラインのすべてを複製せずに、カーネル初期化ラインにこれらすべて(または少なくともほとんど)を含めることができる方法はありますか?すべてを2回変更する必要があるのは少し面白いです。これらのさまざまなソースは、フックの形のcrypttab、cryptsetupの実際の引数の形のcryptoptsなどのさまざまな機能を提供しますか?
答え1
うわー。これらすべてがDebian / stretchでどのように機能するかを理解するのにほぼ2日かかりました(以前はこれをやったことにもかかわらず)。質問を誤って見つけたので、回答を見つけるために回答を開いておきます。
ええ、crypttab(5)
オプションはinitramfs
まさにあなたが要求したものです:
ファイルシステムの初期化
initramfsフックは、ルートデバイス、リカバリデバイス、および「initramfs」オプションが設定されているすべてのデバイスを処理します。これらのデバイスは、開始のinitramfsステップで処理されます。たとえば、dropbear を使用してリモートのロック解除を許可します。
(信じたり、話したり、記事を読んだり、偶然にこのオプションを見つけました。TODOファイルcryptsetup ソースから。 )
したがって、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
それにもかかわらず、言及されたファイルを変更したら、それを実行する必要があります。