背景

背景

背景

CentOS 8 Streamで自動LUKSロック解除を設定しようとしています。暗号化されていないブートパーティションにキーファイルを配置し、それを使用してLUKSで保護されているLVM PV(ルートファイルシステムを含む)のロックを解除します。 私はこれが奇妙なことであり、ディスク暗号化の価値をかなり破壊することであることを知っています。しかし、ユーモアをお願いします。

現在のレイアウトの概要は次のとおりです。

$ lsblk
NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
nvme0n1                                       259:0    0 931.5G  0 disk  
├─nvme0n1p1                                   259:1    0   256M  0 part  /boot/efi
├─nvme0n1p2                                   259:2    0     1G  0 part  /boot
└─nvme0n1p3                                   259:3    0 930.3G  0 part  
  └─luks-3d33d226-9640-4343-ba5a-b9812dda1465 253:0    0 930.3G  0 crypt 
    └─cs-root                                 253:1    0    20G  0 lvm   /
$ sudo e2label /dev/nvme0n1p2
boot

現在、これには/etc/crypttab手動で入力したパスワード(読みやすくするために編集されたUUID)から起動するための次の内容が含まれています。これはうまく機能します。

luks-blah UUID=blah none discard

自動ロック解除を達成するためにキーファイルを生成し/boot/keys/keyfileますluksAddKey

1回試してください

最初の試みで、crypttab行を次のように変更しました。

luks-blah UUID=blah /keys/keyfile:LABEL=boot discard,keyfile-timeout=10s

これにより、ルートファイルシステムが自動的にロック解除されマウントされますが、起動プロセスが失敗し、システムをマウントできないため、回復モードになります/boot。その理由は、ブートパーティションがすでに(キーファイルを取得するために任意の場所に)マウントされているためです/run/systemd/cryptsetup/keydev-luks-blah

2回試してください

crypttabを次のように変更してみました。

luks-blah UUID=blah /boot/keys/keyfile discard,keyfile-timeout=10s

/boot/keys/keyfile私はおそらく、ブートスクリプトがまだインストールさ/bootれていない場合でもアクセスする方法を理解するのに十分スマートであると思いました。しかし、これはうまくいきません。パスワードを手動で入力するように求められます。

質問

通常のインストールに使用する必要があるパーティションに格納されているキーファイルを使用してルートファイルシステムをロック解除する方法はありますか?

答え1

以下は、Nikitaの提案に基づくソリューションです。キーファイルをinitramfsに配置し、CentOS 8で動作するように調整してみてください。

この方法では、元のキーファイルを暗号化されていないファイルシステムに配置する必要はありません。 initramfsの作成中に暗号化されていない(ただし圧縮された)initramfsにコピーされます。これは少し混乱を加えることができます。

1. クリプトタブのアップデート

crypttabinitramfsに配置するキーファイルのパスを指定するように更新します。

luks-blah UUID=blah /boot/keys/keyfile discard,keyfile-timeout=10s

2. dracutの設定

/etc/dracut.conf.dinitramfsにコピーするキーファイルを構成するファイルをこのファイルの下に作成します(参考文献を参照man 5 dracut.conf)。キーファイルは initramfs の同じ場所にあります。

$ cat /etc/dracut.conf.d/copy-keyfile.conf 
install_items+=/boot/keys/keyfile

ここで initramfs を更新します。dracut -f

3. 確認

任意に選択できる:lsinitrd次に、initramfsにファイルがあることを確認してください。これは私に次のことを示しています:

-r-------- 1 root root 32 Aug 9 20:09 boot/keys/keyfile

答え2

キーファイルを次の場所に配置します。ファイルシステムの初期化これにより、起動スクリプトがそこでそれを見つけることができます。

しかし、CentOSではこれをやったことはありません。私はLUKSを使用していませんが、アイデアを実演するにはそれほど重要ではありません。

Debian でこれを行う方法は次のとおりです。

ファイル/etc/crypttabは次のとおりです。

lvm0 /dev/md/lvm0 none cipher=aes-xts-plain64,hash=ripemd160,keyscript=/etc/initramfs-tools/lvm0.sh

md raid(スーパーブロックバージョン1.2)という基本デバイスを使用しており、UUIDでデバイスを効果的に識別できるので安全です。暗号化されていないデバイスは/dev/mapper/lvm0この例と同じであり、推測できるようにLVM PVです。

keyscript は、キーを標準出力に出力するシェルスクリプトです。ここで与えられるパスはパスですルートファイルシステムで(暗号化されている)Debianのinitramfs生成スクリプトは、lvm0.shinitramfsにコピーする必要があるファイルを見つけ、initスクリプトが実際にinitramfsで重要なスクリプトを見つけることができるようにパスを調整するのに十分スマートです。主なスクリプト自体は次のとおりです(文字通りコピーするのではなく、必要な長さのランダムな文字列を生成してください)。

#!/bin/sh

cat - <<EOF
egjseoius9usajogj8g...
EOF

実際の設定は次のとおりです。ブートパーティションは、コンピュータの起動に必要なリムーバブルメディアにあります。コンピュータの起動が完了すると、メディアは削除されます。私はこのアイデアに基づいていくつかのシステムを構築しました。ブートメディア(フラッシュスティック)が暗号化されたデバイスをロック解除する唯一の方法であるため、すべての場合において、顧客は常にブートメディアのコピーを2つ以上安全に保管する必要があります。

私はGentooでも同じ概念を使用しましたが、そこのシステムはよりカスタマイズされ、完全にカスタマイズされたinitramfs initスクリプトを発明しました。スクリプトには、暗号化されたデバイスのロックを解除するための次のようなコマンドが含まれています。

cryptsetup open /dev/sda3 pv0 --key-file=/etc/keys/pv0.key --allow-discards --type=plain --cipher=aes-xts-plain64 --key-size=256

(また、initramfsにこのファイルが含まれていることを確認する必要があります/etc/keys/pv0.key)。

これをCentOSに適用できることを願っています。

関連情報