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과 직접 통신할 수도 있습니다.

관련 정보