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