centOS 7用のdracutで作成されたinitramfsイメージでtpm2_nvreadを実行するには?

centOS 7用のdracutで作成されたinitramfsイメージでtpm2_nvreadを実行するには?

起動時に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_nvreadinitrdでこれを行う方法について提案がありますか?

答え1

解決策を見つけました!

dracutシェルでコマンドを手動で確認できるようにインストールされた/sbin/straceバイナリに追加しました。その結果、ネットワークにアクセスできないというエラーが発生します。module-setup.shtpm2_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と直接通信することもできます。

関連情報