使用Clevis通过TPM解密LUKS卷

使用Clevis通过TPM解密LUKS卷

Clevis是可插拔的自动解密框架。将可信平台模块(TPM)与通过Linux Unified Key Setup(LUKS)实现的全盘加密(FDE)结合,Clevis可以在启动时自动解锁加密驱动器,无需用户干预。Clevis工具当前通过universe软件仓库提供。

虽然这一方案可以工作,但在完整集成的服务器FDE方案进入未来LTS版本之前,它属于由社区支持的TPM绑定加密后备方案。

本指南适用于使用dracut(8)生成initramfs的系统。

前置条件

  • Ubuntu Server安装采用LVM over LUKS,并以Dracut作为initramfs生成器。
  • 系统具有TPM 2.0模块。
  • 拥有root或sudo权限。

安装Clevis与Dracut集成

安装所需软件包:

sudo apt update && sudo apt install clevis clevis-tpm2 clevis-dracut clevis-luks

绑定LUKS卷

在Dracut能够自动解锁驱动器之前,需要将它绑定到TPM。Clevis可以向LUKS头部加入一把新密钥,并通过TPM封存。

绑定前,先识别加密分区:

lsblk -f

找到FSTYPE为crypto_LUKS的分区,在下面的命令中用其路径替换<encrypted_partition>。

绑定到平台配置寄存器PCR 7,它跟踪安全启动状态。如果环境需要不同的信任保证,应根据威胁模型选择PCR。

sudo clevis luks bind -d <encrypted_partition> tpm2 '{"pcr_ids": "7"}'

系统会提示输入安装时创建的LUKS口令。Clevis生成新的加密秘密并存入新密钥槽,同时创建与该槽关联的token。

更新初始内存盘

clevis-dracut包提供所需Dracut模块,将Clevis解密钩子纳入早期启动环境。绑定根磁盘后,必须重新生成初始内存盘。

强制为当前内核重建初始内存盘:

sudo dracut -f

可通过lsinitrd(1)检查生成的镜像,确认Clevis模块已加入:

sudo lsinitrd | grep '^clevis'
clevis
clevis-pin-null
clevis-pin-sss
clevis-pin-tang
clevis-pin-tpm2

还可确认LUKS元数据中有Clevis token,它应显示设备绑定的TPM pin:

sudo clevis luks list -d <encrypted_partition>
2: tpm2 '{"hash":"sha256","key":"ecc"}'

要进行更底层的检查,可以通过cryptsetup(8)查看LUKS token元数据,确认其中的Clevis token以及绑定的密钥槽:

sudo cryptsetup luksDump <encrypted_partition> | grep -A2 -i Tokens
Tokens:
  0: clevis
        Keyslot:    2

重启后,确认根卷自动解锁,并且系统无需询问LUKS口令即可到达登录提示符。

解锁次级磁盘

服务器如果还有次级加密数据盘,不需要使用dracut解锁,因为它们在启动流程稍后由systemd(1)解锁。

要配置自动解锁,首先将次级磁盘绑定到TPM。用实际次级加密分区替换<secondary_encrypted_partition>。

sudo clevis luks bind -d <secondary_encrypted_partition> tpm2 '{"pcr_ids": "7"}'

然后获取被锁定LUKS分区的UUID:

blkid -s UUID -o value <secondary_encrypted_partition>

将磁盘加入crypttab(5),口令文件字段使用none,让systemd(1)自动拦截口令提示并识别Clevis绑定。

data_vol UUID=<UUID> none luks

/etc/crypttab条目的第一个字段是映射设备名称。上例名称为data_vol,因此LUKS卷解锁后,解密映射设备通过/dev/mapper/data_vol暴露。按常规方式将它加入fstab(5)。

移除TPM绑定

如果需要移除Clevis绑定,例如停用服务器或移动驱动器,可以解除绑定。先列出活动Clevis token,查明正确LUKS槽位:

sudo clevis luks list -d <encrypted_partition>

再解除指定槽位,将下面的1替换为刚才查到的槽编号:

sudo clevis luks unbind -d <encrypted_partition> -s 1

原文:TPM-based LUKS decryption with Clevis,Ubuntu Server官方文档,最后更新2026年6月26日,© 2026。按转载授权汉化,保留原文Dracut前提、恢复口令警告与命令。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容