!!!注意!

!!!注意!

我最近尝试了 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

相关内容