使用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前提、恢复口令警告与命令。











暂无评论内容