请帮助我完成 LUKS + TPM2 + 启动时自动解锁的设置。
我已经安装了干净的 Ubuntu 22.04.2,在安装操作系统时我在 GUI 中加密了分区。我已经安装了所有更新。
Ubuntu 22.04.2 LTS
5.19.0-43-generic
systemd 249 (249.11-0ubuntu3.9)
我正在尝试使用本手册:https://wiki.archlinux.org/title/Trusted_Platform_Module#systemd-cryptenroll
我已经安装了:
tpm2-tools
dracut-core_059-3_amd64.deb
dracut_059-3_all.deb
下一个:
sudo dracut --add tpm2-tss
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 /dev/nvme0n1p3
我已经添加了/etc/crypttab
:
nvme0n1p3_crypt UUID=1fce6364-485c-4524-9c73-7bd4dac5bd32 none luks,discard
系统启动时仍要求输入密码。
我不明白我需要做什么才能在启动时通过 TPM 自动解锁 LUKS。
答案1
这是我在同一个 Ubuntu 22 中使用 TPM2 进行 LUKS 解密的方法。不是使用 systemd-cryptenroll,而是使用 clevis。唯一的“缺点”是它在启动时显示密码提示,但在从 tpm 获取密钥后消失。
#!/bin/bash
#install needed packages
apt-get -y install clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools tss2
#proceed
echo -n Enter LUKS password:
read -s LUKSKEY
echo ""
clevis luks bind -d /dev/nvme0n1p3 tpm2 '{"pcr_bank":"sha256"}' <<< "$LUKSKEY"
update-initramfs -u -k all
#check
clevis luks list -d /dev/nvme0n1p3
#delete example; -s is one of the slots reported by the previous command
#clevis luks unbind -d /dev/nvme0n1p3 -s 1 tpm2
无需修改任何其他内容(甚至不需要修改 crypttab 文件)。
答案2
我只看到您在步骤中存在的一个问题/etc/crypttab
。需要添加tpm2-device=auto
。
这是更新后的文件
nvme0n1p3_crypt UUID=1fce6364-485c-4524-9c73-7bd4dac5bd32 none tpm2-device=auto,luks,discard
一旦 /etc/crypttab 更新运行dracut -f
如果这些细节还不够的话详细指南与您的步骤相比,只有一个主要区别。我不确定 dracut_059 是否与 Ubuntu 22.04 兼容,因为 Ubuntu 附带 051 版本。作为一种解决方法,我只是手动将几个 dracut 模块文件夹添加到 051 版本中。
01systemd-sysusers
01systemd-udevd
91tpm2-tss