Systemd

使用 FIDO2 的 systemd-homed - 仍然可以僅使用密碼從 tty 登錄

  • October 26, 2021

我最近嘗試了 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,負責使用者身份驗證的預設文件如下所示:

$ 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 配置時,始終保持 root 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

現在pam_systemd_home.so首先執行,成功時將跳過預設密碼提示。對於 LUKS,這也足夠了,因為 FIDO2 設備在那裡註冊為令牌。

如果您想擁有一個“真正的”2FA,您需要做的就是將[success=2 default=ignore][success=1...配置更改為required1。

引用自:https://unix.stackexchange.com/questions/674453