Centos

如何在 dracut 為 centOS 7 創建的 initramfs 映像中執行 tpm2_nvread?

  • March 11, 2018

我想在啟動時使用 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_nvreaddracut shell 中的命令。原來錯誤是我的網路無法訪問。

tpm2 命令用於libtcti與 tpm 通信,後者使用127.0.0.1:2323.

現在,至於為什麼環回關閉,我不確定。我的猜測是90crypt在網路可用之前執行 dracut,或者與我禁用systemd.

所以我添加/sbin/ifupmodule-setup.sh,並將其添加到我的cryptroot-ask.sh

ifup lo inet loopback
sleep 3

不知道我是否需要睡覺,但我還是把它放了。

引用自:https://unix.stackexchange.com/questions/402167