我正在使用新的自动安装方法部署 Ubuntu 20.04。我的部署过程正常,我们正在使用 LUKS 加密根卷。
我想要使用 TPM2 和 Clevis 在启动时设置根卷的自动解密。部署后,我可以使用以下脚本成功手动配置此功能:
#!/bin/bash
# LUKS Bind - Enroll LUKS key with TPM for full-disk encryption
apt-get install clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools
clevis luks bind -d /dev/nvme0n1p3 tpm2 '{"pcr_bank":"sha256"}' <<< 'luks_passphrase'
update-initramfs -u -k all
但是,我希望此步骤在自动安装阶段作为后期命令运行,在系统重新启动之前,避免手动输入 LUKS 密码。
脚本在部署期间成功运行,我可以看到 U 形夹 TPM 引脚已安装,但是自动解密仍然不起作用。
$ sudo clevis luks list -d /dev/nvme0n1p3
1: tpm2 '{"hash":"sha256","key":"ecc","pcr_bank":"sha256","pcr_ids":"7"}'
如果我在部署后解开 U 形夹销,然后重新运行上述脚本,一切都会正常工作。
所以我不确定是什么导致了这个问题。我尝试删除 pcr_ids 参数并打开和关闭安全启动。
答案1
我自己也在为此苦苦挣扎。我猜(如果我错了请纠正我)有两个原因导致这种情况不可能实现:
- 在部署/自动安装期间,您将在实时 ubuntu 环境中运行。当您将密钥添加到 TPM 时,我猜测它是用当前启动/BIOS 配置密封的(取决于使用的 PCR)。在已安装的操作系统中启动时,这将与 PCR 不匹配,并且密钥不会被解封。
- 运行 clevis/update-initramfs 时,您实际上是在更新实时环境的 initram 映像,而不是已安装操作系统的 initram 映像。不确定是否可以(轻松)更新已安装操作系统的 initram。
我的想法是创建一个自定义的 ubuntu 安装介质,其中包含更新的 initram 映像,该映像可以使用安装介质上的预定义密钥文件解密 luks 卷。然后使用自动安装中的 runcmd,在首次启动时运行一个脚本,该脚本将设置 TPM 并将 luks 卷的当前密钥替换为 TPM 中的密钥。