LUKS + TPM2 + 启动时自动解锁(systemd-cryptenroll)

LUKS + TPM2 + 启动时自动解锁(systemd-cryptenroll)

请帮助我完成 LUKS + TPM2 + 启动时自动解锁的设置。

我已经安装了干净的 Ubuntu 22.04.2,在安装操作系统时我在 GUI 中加密了分区。我已经安装了所有更新。

Ubuntu 22.04.2 LTS
5.19.0-43-generic
systemd 249 (249.11-0ubuntu3.9)

我正在尝试使用本手册:https://wiki.archlinux.org/title/Trusted_Platform_Module#systemd-cryptenroll

我已经安装了:

tpm2-tools
dracut-core_059-3_amd64.deb
dracut_059-3_all.deb

下一个:

sudo dracut --add tpm2-tss
sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 /dev/nvme0n1p3

我已经添加了/etc/crypttab

nvme0n1p3_crypt UUID=1fce6364-485c-4524-9c73-7bd4dac5bd32 none luks,discard

系统启动时仍要求输入密码。

我不明白我需要做什么才能在启动时通过 TPM 自动解锁 LUKS。

答案1

这是我在同一个 Ubuntu 22 中使用 TPM2 进行 LUKS 解密的方法。不是使用 systemd-cryptenroll,而是使用 clevis。唯一的“缺点”是它在启动时显示密码提示,但在从 tpm 获取密钥后消失。

    #!/bin/bash
    
    #install needed packages
    apt-get -y install clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools tss2
    
    #proceed
    echo -n Enter LUKS password:
    read -s LUKSKEY
    echo ""
    
    clevis luks bind -d /dev/nvme0n1p3 tpm2 '{"pcr_bank":"sha256"}' <<< "$LUKSKEY"
    
    update-initramfs -u -k all
    
    #check
    clevis luks list -d /dev/nvme0n1p3
    
    #delete example; -s is one of the slots reported by the previous command
    #clevis luks unbind -d /dev/nvme0n1p3 -s 1 tpm2

无需修改任何其他内容(甚至不需要修改 crypttab 文件)。

答案2

我只看到您在步骤中存在的一个问题/etc/crypttab。需要添加tpm2-device=auto

这是更新后的文件

nvme0n1p3_crypt UUID=1fce6364-485c-4524-9c73-7bd4dac5bd32 none tpm2-device=auto,luks,discard

一旦 /etc/crypttab 更新运行dracut -f

如果这些细节还不够的话详细指南与您的步骤相比,只有一个主要区别。我不确定 dracut_059 是否与 Ubuntu 22.04 兼容,因为 Ubuntu 附带 051 版本。作为一种解决方法,我只是手动将几个 dracut 模块文件夹添加到 051 版本中。

01systemd-sysusers
01systemd-udevd
91tpm2-tss

相关内容