FIDO2 (YubiKey) 在 Fedora 36 上启动时解锁 LUKS 不起作用

clo*_*ack 5 linux fedora luks fido-u2f

我尝试在 Fedora 36 中使用 FIDO2 (YubiKey 5) 在系统启动时解锁 LUKS 卷,但没有成功,因为它不断要求提供常规 LUKS 密码,而不使用令牌来解锁 LUKS 卷。

我按照Lennart Poettering在他的博客上的示例,systemd-cryptenroll注册了 YubiKey,然后/etc/crypttab使用适当的配置修改了文件。cryptsetup luksDump显示令牌已添加到 LUKS 标头中。然而,在系统启动时,会显示 Plymouth 启动屏幕,提示输入常规 LUKS 密码来解锁卷。

我认为 Plymouth 可能不会显示输入 FIDO2 PIN 的提示,因此我删除并重新添加了 LUKS 键槽和带有额外参数的令牌,以便不需要用户存在或 PIN:

systemd-cryptenroll --fido2-device=auto --fido2-with-user-verification=false --fido2-with-client-pin=false /dev/sda3
Run Code Online (Sandbox Code Playgroud)

这仍然不起作用,并且仍然提示输入 LUKS 密码。

Fedora 36 正在运行 systemd 版本 250。

知道为什么 FIDO2 无法解锁 LUKS 卷吗?

clo*_*ack 10

TL;DR 运行dracut --regenerate-all --force

dracut --regenerate-all --force于是我就发现了问题,重启之前修改后没有执行/etc/crypttab。我相信在基于 Debian 的发行版上您需要运行update-initramfs -u。当需要 FIDO2 PIN 时,请在 Plymouth 界面输入。它看起来与输入 LUKS 密码短语时相同,但如果您按 Esc 键,您将看到要求输入 FIDO2 令牌 PIN 码的提示。

此处提供了配置 FIDO2 令牌(例如 YubiKey)以解锁 RH/Fedora 发行版上的 LUKS 卷的完整过程(注意:仅 systemd 版本 248 支持此功能。systemctl --version请检查。)

  1. 查看现有的 LUKS 键槽信息。如果最初配置为仅使用密码短语,您将仅看到一个密钥槽(槽 0)和零个令牌。

cryptsetup luksDump /dev/sda3(将 sda3 替换为您的块设备)

  1. 注册令牌。在此示例中,指定 FIDO2 PIN 和用户存在的要求(例如“触摸”)。

systemd-cryptenroll --fido2-device=auto --fido2-with-client-pin=true --fido2-with-user-presence=true /dev/sda3

  1. 再次检查 LUKS 令牌和键槽。这次您应该看到一个附加的键槽(槽 1)和一个新的令牌(令牌 0),如果在注册期间指定,它们还将列出上述参数。

cryptsetup luksDump /dev/sda3

  1. 修改/etc/crypttab. 默认情况下,Fedora 36 将使用 UUID。

vim /etc/crypttab

修改一下,看起来像这样。

luks-a6c32afd-3c35-4628-8653-5be499eaf0ce UUID=a6c32afd-3c35-4628-8653-5be499eaf0ce - fido2-device=auto

  1. 生成新的 initramfs 映像

dracut --regenerate-all --force

  1. 重新启动并测试。如前所述,Plymouth 启动屏幕看起来相同,但不是输入 LUKS 密码,而是输入 FIDO2 PIN。或者按“Esc”验证它是否确实提示输入 FIDO2 PIN(如果需要)。如果指定了存在要求,您将需要触摸令牌。系统应该启动。

附加功能:

从 LUKS 卷中删除令牌。

cryptsetup token remove --token-id 0 /dev/sda3

并去掉相应的键槽。

systemd-cryptenroll --wipe-slot=1 /dev/sda3

我注意到,如果注册多个 FIDO2 令牌并指定 PIN 和存在要求,您将需要触摸令牌 X 次,其中 X 是已注册的第 n 个令牌。例如,如果您注册了四个令牌,则在使用第四个注册令牌时,您需要在系统启动之前触摸它四次。我认为这与SYSTEMD-CRYPTENROLL(1) 中提到的有关:

另请注意,对注册多个 FIDO2 令牌的支持目前不太有用,因为解锁 systemd-cryptsetup 无法识别当前插入的令牌,因此不知道要向设备发送哪个身份验证请求。