Debian

為什麼這個 PAM 程式碼會阻止所有登錄到 Debian 系統?

  • March 1, 2021

為什麼將此行添加到/etc/pam.d/common-auth

auth        required      pam_tally2.so deny=4 unlock_time=1200 even_deny_root

並將這一行添加到/etc/pam.d/common-account

account     required      pam_tally2.so

阻止所有登錄到我的 Debian 10 系統?我的所有其他pam配置文件(logincommon-sessioncommon-password與預設值相比沒有變化,但如有必要,我也可以發布這些文件)。

我已經看到了一些其他討論的問題pam_tally,例如this onethis onethis one,但他們要麼沒有特定的答案,pam_tally要麼根本沒有任何答案。

(作為背景,我正在嘗試為 Debian 系統調整此更新指南)

編輯:libpam-modules軟體包已安裝。

來自common-auth

auth    [success=1 default=ignore]  pam_unix.so nullok_secure
auth    required      pam_tally2.so deny=4 unlock_time=1200 even_deny_root
auth    requisite     pam_deny.so
auth    required      pam_permit.so

來自common-account

account required      pam_tally2.so
account [success=1 new_authtok_reqd=done default=ignore]    pam_unix.so 
account requisite     pam_deny.so
account required      pam_permit.so

這個答案有兩個部分。第一個添加pam_tally2auth. 第二個將其添加到account. 您需要這兩個部分pam_tally2才能正常工作

讓我們來看看common-auth

auth    [success=1 default=ignore]  pam_unix.so nullok_secure
auth    required      pam_tally2.so deny=4 unlock_time=1200 even_deny_root
auth    requisite     pam_deny.so
auth    required      pam_permit.so

第一行說:“嘗試使用 UNIX ( /etc/passwd) 身份驗證。如果成功,則跳過一行並繼續。否則繼續下一步。”

  1. 成功:我們跳過一行(success=1),即pam_tally2,並點擊pam_deny拒絕登錄
  2. 失敗:我們點擊pam_tally2then pam_deny,拒絕登錄

部分解決方案是將pam_tally2列表放入堆棧頂部。(您可能認為更改success=2會起作用,但這會跳過pam_tally2成功的身份驗證,因此只能在超時到期後從失敗中重置。)這是我的,來自一個相當普通的 Debian 系統:

auth    required                        pam_tally2.so deny=5 unlock_time=1200 even_deny_root
# here are the per-package modules (the "Primary" block)
auth    [success=1 default=ignore]      pam_unix.so nullok_secure
# here's the fallback if no module succeeds
auth    requisite                       pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth    required                        pam_permit.so
# and here are more per-package modules (the "Additional" block)
auth    optional                        pam_cap.so
# end of pam-auth-update config

這會增加計數,但您需要一種在成功登錄後無需使用pam_tally2命令即可重置它的方法。不是特別明顯的是,你需要添加pam_tally2.so到該account部分,也作為第一個條目

account required                        pam_tally2.so onerr=fail

我已經對此進行了測試,但是當您嘗試它時,請確保您在目標機器上打開了一個額外的 root shell,以便您可以恢復對 PAM 配置的任何更改!

tail -F /var/log/auth.log您可以看到和發生了什麼watch pam_tally2 --user {user}

請注意,一旦嘗試進行身份驗證,計數就會增加,並且僅在成功時重置,因此計數限制必須比允許的嘗試次數大一。

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