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