如何在 dracut 為 centOS 7 創建的 initramfs 映像中執行 tpm2_nvread?
我想在啟動時使用 TPM 2.0 載入解鎖我的 LUKS 分區(根文件系統)。
keyscript=/path/to/script
我在我的文件中使用 a 沒有成功,但是我使用我在這裡/etc/crypttab
找到的方法取得了進展。我正在使用 dracut 建構初始 ram fs 圖像。
所以在 中
/usr/lib/dracut/modules.d/90crypt
,我對幾個文件進行了修改(根據我連結的指南):module-setup.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 }
cryptroot-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
,並且在使用密碼啟動後,我已經在 shell 的命令行中測試了我的功能。我遇到的問題是
tpm2_nvread
關於資源管理器無法初始化(錯誤0x1
)的錯誤。但是我注意到,在正常啟動中,資源管理器在這裡也失敗了,但並沒有阻止我使用這些
tpm2-tools
命令。我已經嘗試從 elrepo (4.something) 升級到最新的核心,並且我已經添加了帶有 dracut 的核心驅動程序,如下所示:
dracut --add-drivers tpm_crb --force
這似乎沒有幫助。
關於如何
tpm2_nvread
在 initrd 中工作的任何建議?
我找到了解決辦法!
我添加
/sbin/strace
到我安裝的二進製文件中,module-setup.sh
以便我可以手動檢查tpm2_nvread
dracut shell 中的命令。原來錯誤是我的網路無法訪問。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
不知道我是否需要睡覺,但我還是把它放了。