Eu quero carregar minha partição LUKS (sistema de arquivos raiz) no momento da inicialização usando um TPM 2.0.
Eu não tive sucesso usando um keyscript=/path/to/script
no meu arquivo /etc/crypttab
, mas progredi usando métodos que encontrei aqui .
Eu estou usando o dracut para construir imagens iniciais de ram fs.
Então, em /usr/lib/dracut/modules.d/90crypt
, fiz modificações em vários arquivos (de acordo com o guia que eu vinculei):
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"
Eu sei que os binários estão carregados corretamente e adicionei as chaves do TPM com luksAddKey
, e testei minha função na linha de comando em um shell após inicializar com uma frase secreta.
O problema que tenho é que o tpm2_nvread
está jogando um erro sobre o gerenciador de recursos não inicializar (erro 0x1
).
No entanto, notei que, em uma inicialização normal, o gerenciador de recursos também falha aqui, mas não me impede de usar os comandos tpm2-tools
.
Eu tentei atualizar para o kernel mais recente a partir do elrepo (4.something), e adicionei drievrs do kernel com o dracut da seguinte forma:
dracut --add-drivers tpm_crb --force
Isso não parece ajudar.
Algum conselho sobre como posso obter tpm2_nvread
para trabalhar no initrd?