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请检查。)
cryptsetup luksDump /dev/sda3(将 sda3 替换为您的块设备)
systemd-cryptenroll --fido2-device=auto --fido2-with-client-pin=true --fido2-with-user-presence=true /dev/sda3
cryptsetup luksDump /dev/sda3
vim /etc/crypttab
修改一下,看起来像这样。
luks-a6c32afd-3c35-4628-8653-5be499eaf0ce UUID=a6c32afd-3c35-4628-8653-5be499eaf0ce - fido2-device=auto
dracut --regenerate-all --force
附加功能:
从 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 无法识别当前插入的令牌,因此不知道要向设备发送哪个身份验证请求。