Ubuntu 22.04无法通过systemd-cryptenroll设置预计算PCR值,求替代方案
在Ubuntu 22.04(systemd 249)中绑定预计算TPM2 PCR值解锁LUKS的方案
由于Ubuntu 22.04自带的systemd 249版本的systemd-cryptenroll不支持指定预计算PCR哈希值,你可以通过以下两种方式实现需求:
方法一:使用tpm2-tools手动创建PCR绑定策略
这是最可靠的原生替代方案,无需修改系统核心组件:
步骤1:安装依赖工具
首先安装tpm2-tools和相关服务:
sudo apt update && sudo apt install -y tpm2-tools tpm2-abrmd sudo systemctl enable --now tpm2-abrmd
步骤2:创建预计算PCR策略文件
用你的预计算SHA256值生成PCR绑定策略:
sudo tpm2_createpolicy --policy-pcr \ -l sha256:0,1,4,5,7 \ -f /etc/cryptsetup/pcr.policy \ -F sha256:0=60d6401905da60ba1610c36a6c7e21e4f6fb75750e0bcc80049d29eb7c01d8a4,\ 1=4975eb86a8ec8053c321adcb2aea978a840fd9304c6076cd2bdccac387bd7904,\ 4=7f0326c0506de8253b1842c01124d36ef400a42e9ee0966917135568aaa31728,\ 5=7787a346d056e0c2cd99be78f2152cba61a592f0f594c9e719029cb6631c77e6,\ 7=0d6f5076088673485ad84f4010b87acb7d50fb38642c948a2d7db3c29d1270e3
-l指定需要绑定的PCR编号和哈希算法-F传入每个PCR对应的预计算SHA256值- 生成的策略文件保存到
/etc/cryptsetup/pcr.policy以便后续调用
步骤3:将LUKS解锁密钥密封到TPM
把你的LUKS解锁密钥(/root/keyfile)密封到TPM,并且绑定到上面生成的PCR策略:
# 创建密封密钥对象 sudo tpm2_create -Q -C o -u /etc/cryptsetup/seal.pub -r /etc/cryptsetup/seal.priv -i /root/keyfile -L /etc/cryptsetup/pcr.policy # 将密钥对象持久化到TPM(避免重启后丢失) sudo tpm2_evictcontrol -Q -C o -c /etc/cryptsetup/seal.priv 0x81000001
0x81000001是TPM持久化句柄,只要不与现有句柄冲突即可
步骤4:配置crypttab自动解锁
编辑/etc/crypttab,添加如下配置行:
cryptroot /dev/mmcblk1p2 /usr/local/bin/unseal-luks-key.sh luks
然后创建解锁脚本/usr/local/bin/unseal-luks-key.sh:
#!/bin/bash sudo tpm2_unseal -Q -c 0x81000001 -L /etc/cryptsetup/pcr.policy
给脚本添加执行权限:
sudo chmod +x /usr/local/bin/unseal-luks-key.sh
步骤5:验证配置
更新initramfs使配置生效:
sudo update-initramfs -u
重启系统后,TPM会自动验证PCR值,匹配时自动解锁LUKS分区。
方法二:升级systemd到支持预计算PCR的版本
如果愿意承担系统稳定性风险,可以通过Ubuntu Backports升级systemd:
- 启用backports仓库:
echo "deb http://archive.ubuntu.com/ubuntu jammy-backports main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/jammy-backports.list sudo apt update - 升级systemd:
sudo apt install -t jammy-backports systemd
升级完成后,即可直接使用Ubuntu 24.04中的systemd-cryptenroll命令格式。
注意:升级systemd可能导致系统兼容性问题,建议先在测试环境验证,升级后务必备份重要数据。
内容的提问来源于stack exchange,提问作者TR-eenet
相关产品推荐
相关产品推荐

