我正在尝试使用 tpm2-tools 和Tevora Secure boot tpm2的说明创建一个基于 TPM 的解锁脚本。我已经设置了密钥,加载了它cryptsetup luksAddKey secret.bin
,然后使用它进行了测试tpm2_unlock -c 0x81000000 --auth pci:sha1:0,2,3,7
并返回了 secret.bin 的值。为了采取额外措施,为了确保它正常工作,我将 secret.bin 加载到“/etc/crypttab”中,运行# update-initramfs -u -k all
并重新启动。重新启动后,系统解锁。
我将以下代码复制到“/etc/initramfs-tools/hooks/tpm2”
#!/bin/sh -e
if [ "$1" = "prereqs" ]; then exit 0; fi
. /usr/share/initramfs-tools/hook-functions
copy_exec /usr/local/bin/tpm2_unseal
copy_exec /usr/local/lib/libtss2-tcti-device.so
我将我的 etc/crypttab 附加cryptname UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none luks
到cryptname UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx none luks,keyscript=/usr/local/bin/passphrase-from-tpm
我重写了以下脚本,因为 tpm2-tools 命令已过时,在新命令中进行了编辑,并将其存储在 /usr/local/bin/passphrase-from-tpm 中:
#!/bin/sh
set -e
echo "Unlocking via TPM" >&2
export TPM2TOOLS_TCTI="device:/dev/tpm0"
/usr/local/bin/tpm2_unseal -c 0x81000000 --auth pcr:sha1:0,2,3,7
if [ $? -eq 0 ]; then
exit
fi
/lib/cryptsetup/askpass "Unlocking the disk fallback $CRYPTTAB_SOURCE ($CRYPTTAB_NAME)\nEnter passphrase: "
我跑了# update-initramfs -u -k all
然后重新启动。在重新启动时,我收到以下错误:/lib/cryptsetup/scripts/passphrase-from-tpm: line 5: /usr/local/bin/tpm2_unseal: not found
我曾多次尝试编辑 passphrase-from-tpm 失败,包括:
- 将 passphrase-from-tpm 移动到“/boot/efi/EFI/BOOT/”并将 crypttab 引用到该文件
- 修改 passphrase-from-tpm 以使用 tpm_unseal 的相对文件路径
在我弄清楚如何使用以下方法创建备份 linux 引导之前:
objcopy \
--add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \
--add-section .cmdline=cmdline.txt --change-section-vma .cmdline=0x30000 \
--add-section .linux="/boot/vmlinuz" --change-section-vma .linux=0x40000 \
--add-section .initrd="/boot/initrd.img" --change-section-vma .initrd=0x3000000 \
/usr/lib/systemd/boot/efi/linuxx64.efi.stub /boot/EFI/BOOT/BOOT_RECX64.EFI
由于该错误,我将完全被锁定在系统之外,并且不得不重新安装 Ubuntu 大约 40 次。我受了很多苦,想辞职,但我太固执了,不敢插旗。