You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:

  1. 启用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
    
  2. 升级systemd:
    sudo apt install -t jammy-backports systemd
    

升级完成后,即可直接使用Ubuntu 24.04中的systemd-cryptenroll命令格式。

注意:升级systemd可能导致系统兼容性问题,建议先在测试环境验证,升级后务必备份重要数据。


内容的提问来源于stack exchange,提问作者TR-eenet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 19:18:13