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

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

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

我跟着伦纳特·珀特林的例子在他的博客上,用于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

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

Fedora 36 正在运行 systemd 版本 250。

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

答案1

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 无法识别当前插入的令牌,因此不知道要向设备发送哪个身份验证请求。

答案2

Fedora F38 Silverblue(带有 systemd v253)也有类似的问题,FIDO2 安全令牌无法在启动时解锁 LUKS2。仅密码输入有效。

问题是libfido2.so不可变的 F38 Silverblue initrd/中缺少所需的文件( 等) initramfs。列出当前可用的文件lsinitrd以用于验证。

可以将 Silverblue 切换到本地生成initramfs并添加dracut模块的/usr/lib/dracut/modules.d.

sudo rpm-ostree initramfs --enable --arg='--add' --arg='fido2'

启动时,Plymouth(图形)LUKS2 密码提示将照常显示。要验证 PIN 输入是否已启用,请按Esc查看终端提示Please enter LUKS2 token PIN::。请注意,您现在可以选择在任一提示中输入密码或 PIN。

相关内容