起動時にTPM 2.0を使用してLUKSパーティション(ルートファイルシステム)をマウントしてロック解除したいと思います。
keyscript=/path/to/script
私のファイルでaを使って成功しませんでしたが、/etc/crypttab
私が見つけた方法を使って進歩しました。ここ。
私はdracutを使って初期のram fsイメージを構築しています。
そのため、/usr/lib/dracut/modules.d/90crypt
リンクしたガイドに従っていくつかのファイルを修正しました。
モジュール設定.sh
# gives me access to these binaries at boot time in initramfs
function install() {
# existing code
# ...
inst /sbin/tpm2_nvread
inst /bin/tail
inst /bin/perl
inst /sbin/resourcemgr
}
暗号通貨-ask.sh
resourcemgr &
# yum is only at tpm2-tools 1.1.0, so I can't read keys to a file
# this is my solution to grab from tpm, and convert the spaced out hex to binary
function gettpmkeyfile() {
key=`tpm2_nvread -x 0x1500001 -a 0x40000001 -s 32 -o 0 | tail -n 1`
key=${key//[[:blank:]]/}
key=`echo $key | /bin/perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'`
printf $key
}
gettpmkeyfile | cryptsetup luksOpen $device $luksname --key-file=-
/etc/dracut.conf
omit_dracutmodules+="systemd"
add_dracutmodules+="crypt"
バイナリが正しくロードされていることがわかり、TPMを使用してキーを追加し、luksAddKey
パスワードで起動した後、シェルのコマンドラインで機能をテストしました。
私が経験している問題は、tpm2_nvread
リソースマネージャが初期化できないというエラー(エラー)を引き起こすことです0x1
。
しかし、通常の起動では、Explorerがここでも失敗することがわかりました。しかし、これがコマンドの使用を妨げることはありませんtpm2-tools
。
elrepo(4.something)から最新のカーネルにアップグレードしようとしましたが、dracutを使用してカーネルドライバを追加しました。
dracut --add-drivers tpm_crb --force
これは役に立たないようです。
tpm2_nvread
initrdでこれを行う方法について提案がありますか?
答え1
解決策を見つけました!
dracutシェルでコマンドを手動で確認できるようにインストールされた/sbin/strace
バイナリに追加しました。その結果、ネットワークにアクセスできないというエラーが発生します。module-setup.sh
tpm2_nvread
tpm2コマンドは、libtcti
ソケットを使用するtpmと通信するために使用されます127.0.0.1:2323
。
これでループバックが失敗した理由はわかりません。私の考えでは、90crypt
ネットワークが利用可能になる前にdracutが実行されているか無効になっているようですsystemd
。
だから私/sbin/ifup
に追加し、module-setup.sh
これを私cryptroot-ask.sh
:
ifup lo inet loopback
sleep 3
睡眠が必要かどうかはわかりませんが、とにかく寝ました。
答え2
また、tpm2_nvreadに「-T device」を追加して、リソースマネージャを介さずに/ dev / tpm0と直接通信することもできます。