使用 FIDO2 的 systemd-homed - 仍然可以僅使用密碼從 tty 登錄
我最近嘗試了 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...
配置更改為required
1。