!!!注意!

!!!注意!

我最近嘗試了 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

相關內容