我最近尝试了 systemd-homed 并且这样做我将我的 Yubikey 注册为 FIDO2 设备。当我尝试通过homectl authenticate <user>
它正确激活 Yubikey 对创建的家庭进行身份验证时,要求输入 PIN 并等待触摸,然后是通常的密码提示。
但是当我继续从 tty 登录该帐户时,只会提示我输入密码,完全省略了 U2F。尽管如此,即使 Yubikey 断开连接,先前锁定的家也会被解密并打开。
如何强制 U2F 用于任何身份验证?我知道pam-u2f
,但如果它在这里相关,我不知道如何。我无法将保护“传统”用户登录的资源与pam-u2f
这种情况相匹配,它们总是从创建密钥开始,但在这种情况下这些似乎是由管理的systemd-homed
(我找不到关于此的明确信息)。
我想通了,我想与你分享我的发现,以防万一有人偶然发现同样的问题。
这一切都与 PAM 的配置有关。我可以从网络上的不同发现中看出,这在很大程度上取决于所使用的 Linux 发行版。就我而言,在 Arch Linux 上
system-auth
,负责用户身份验证的默认文件如下所示:这意味着
pam_unix.so
首先执行模块(通过密码进行身份验证)并在成功时跳过以下两个模块。所以如果密码正确,pam_systemd_home.so
将永远不会被执行,从而不会查询U2F。由于帐户密码注册为 LUKS 密钥,因此足以解锁主分区容器。!!!注意!!!
像往常一样摆弄 PAM 配置时,始终保持 root shell 处于打开状态,直到您成功验证您的更改,否则您可能会将自己锁定在 PC 之外!
我只想通过我的 FIDO2 设备实现身份验证,所以我这样做了:
现在
pam_systemd_home.so
首先执行,成功时将跳过默认密码提示。对于 LUKS,这也足够了,因为 FIDO2 设备在那里注册为令牌。如果您想拥有一个“真正的”2FA,您需要做的就是将
[success=2 default=ignore]
和[success=1...
配置更改为required
1。