Fedora IoTでディスク暗号化しつつTPMで自動アンロックする
scope🌐
created at
links
[]
toc
[...]
histories
[...]
Fedora IoTを入れたのでその時のメモ。
ただし2024-05-05現在だとFedora IoT 40ではinitramfsの再生成に失敗して動かないので39に落とすとかSilverblue 40とかでやる必要あり
インストールする
インストールする時に適当なパスワードでディスクを暗号化する(ディスクと言っているが実際はパーティション単位)
この時のパスワードは後で消しちゃうので短いやつでも問題なし
TPMに鍵を登録
systemd-cryptenrollで鍵の設定をする
- まずはリカバリーキーを登録する:
systemd-cryptenroll /dev/disk --recovery-key
- パスワードを削除:
systemd-cryptenroll /dev/disk --wipe-slot=password
- スロット0をTPMにしたいのでパスワードを一旦消している、がこだわりがないならやる必要はない
- TPMを登録:
systemd-cryptenroll /dev/disk --tpm2-device=auto --tpm2-pcrs=0,2,4,7
- Fedora IoTだとアップグレードの度にカーネルのコマンドラインが変わって面倒なのでPCR8は入れていない
- どのPCRを見るかはhttps://uapi-group.org/specifications/specs/linux_tpm_pcr_registry/を眺めながら決めるのがオススメ
- もし登録に失敗する場合はhttps://github.com/tpm2-software/tpm2-tools/issues/1956#issuecomment-601914151のとおりにしてTPMを初期化する必要あり
- 念の為仮パスワードを登録:
systemd-cryptenroll /dev/disk --password
- TPMでアンロックできなかった場合にリカバリーキーを入力させられるけど文字数多くてしんどいので入れておくとよい
/etc/crypttabを編集
/etc/crypttab
を編集してTPMでアンロックしてくれるようにする
対象のディスクのオプションにtpm2-device=auto
を追加する
luks-hoge UUID=hoge none tpm2-device=auto,discard
initramfsにTPM関連のモジュールを追加
tpm2-tss
をinitramfsに追加しないとアンロックされないので追加する
rpm-ostree initramfs --enable --arg=--force-add --arg=tpm2-tss
を実行するとinitramfsが再生成される
カーネルコマンドラインを編集
rpm-ostree kargs --editor
を実行するとエディタが立ち上がってカーネルに渡すコマンドラインを編集できるので rd.luks.options=tpm2-device=auto
を追加する
# Current kernel arguments are shown below, and can be directly edited.
# Empty or commented lines (starting with '#') will be ignored.
# Individual kernel arguments should be separated by spaces, and the order
# is relevant.
# Also, please note that any changes to the 'ostree=' argument will not be
# effective as they are usually regenerated when bootconfig changes.
rd.luks.uuid=luks-hoge rd.luks.options=tpm2-device=auto root=UUID=hoge rootflags=subvol=root rw
編集を終えると反映される
再起動してみる
以上の手順で自動アンロックされるようになっているはずなので再起動してみる、自動でアンロックされてログイン画面まで飛んでいれば🆗
仮パスワードを残している場合はsystemd-cryptenroll /dev/disk --wipe-slot=password
で削除しておく