如何使用 PAM 管理 ssh 公鑰驗證方法的鎖定策略

如何使用 PAM 管理 ssh 公鑰驗證方法的鎖定策略

我已按照 redhat 上有關如何在 Linux 伺服器上強化身份驗證的說明進行操作,但我們僅使用帶有公鑰身份驗證的 SSH。根據這些說明: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/chap-hardening_your_system_with_tools_and_services

這是我的 /etc/pam.d/system-auth 和 /etc/pam.d/password-auth 文件,它們實際上是相同的:

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        required      pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=60
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_faillock.so
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

透過此配置,如果使用者在 3 次嘗試後嘗試使用錯誤的金鑰進行身份驗證,我希望能夠實現某種鎖定訊息。但沒有彈出有關鎖定的訊息,我無法判斷鎖定策略是否有效。還有 pam_tally2 模組,但我不知道它與 pam_faillock 模組有什麼區別。

除了 root 權限被拒絕之外,日誌沒有顯示任何內容:

[some_user@ip-10-10-2-53 ~]$ cat /var/run/faillock/some_user
[some_user@ip-10-10-2-53 ~]$ cat /var/run/faillock/root 
cat: /var/run/faillock/root: Permission denied

我嘗試使用錯誤的 ssh 金鑰some_user,但它似乎並沒有將我鎖定,因為我在故障鎖定日誌中沒有看到任何內容,也沒有在我嘗試 ssh 的地方看到任何 ssh 訊息。

答案1

問題是您試圖在身份驗證堆疊內部強制執行這些策略。

auth        required      pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        required      pam_faillock.so preauth silent audit deny=3 even_deny_root unlock_time=60
auth        sufficient    pam_unix.so nullok try_first_pass
auth        [default=die] pam_faillock.so authfail audit deny=3 even_deny_root unlock_time=60
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so

account     required      pam_faillock.so
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so

SSH 守護程式本身內實作的公鑰驗證繞過了身份驗證堆疊。 (沒有呼叫 PAM 驗證模組來驗證提交的金鑰,因此它必須以這種方式工作)唯一的例外是當您執行自訂配置時,該配置也需要在鍵盤互動內部成功。由於這不是預設設置,因此在這些身份驗證過程中幾乎肯定會忽略您的身份驗證堆疊。

雖然account堆疊是通常如果您對僅限公鑰的登入進行限制,我認為這裡不起作用,因為您必須先成功進行身份驗證才能呼叫 PAM 模組。如果您的 PAM 模組未調用,則它無法在每次登入失敗時增加計數。

我可以看到此工作的唯一方法是調整 sshd 配置以要求鍵盤互動式身份驗證另外公鑰認證。 (您可以使用本次問答作為起點)也就是說,正如 JohnA 指出的那樣,這是否真正能提供任何價值是值得商榷的。

答案2

我非常確定您將無法以這種身分使用 PAM。如果使用者沒有與伺服器上的 ssh 公鑰對應的 ssh 私鑰,則他們將無法進行身份驗證。

密碼失敗鎖定的目的是防止對使用者帳戶的密碼進行暴力破解。如果強制執行 ssh 金鑰身份驗證,則無需考慮使用者帳戶密碼。

對於 ssh 金鑰身份驗證請求的密碼,這是私鑰的密碼。未能根據私鑰進行身份驗證不會導致伺服器身份驗證失敗。

相關內容