我尝试在 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
请检查。)
- 查看现有的 LUKS 键槽信息。如果最初配置为仅使用密码短语,您将仅看到一个密钥槽(槽 0)和零个令牌。
cryptsetup luksDump /dev/sda3
(将 sda3 替换为您的块设备)
- 注册令牌。在此示例中,指定 FIDO2 PIN 和用户存在的要求(例如“触摸”)。
systemd-cryptenroll --fido2-device=auto --fido2-with-client-pin=true --fido2-with-user-presence=true /dev/sda3
- 再次检查 LUKS 令牌和键槽。这次您应该看到一个附加的键槽(槽 1)和一个新的令牌(令牌 0),如果在注册期间指定,它们还将列出上述参数。
cryptsetup luksDump /dev/sda3
- 修改/etc/crypttab.默认情况下,Fedora 36 将使用 UUID。
vim /etc/crypttab
修改一下,看起来像这样。
luks-a6c32afd-3c35-4628-8653-5be499eaf0ce UUID=a6c32afd-3c35-4628-8653-5be499eaf0ce - fido2-device=auto
- 生成新的 initramfs 映像
dracut --regenerate-all --force
- 重新启动并测试。如前所述,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。