Security
pam_tally2 添加一個額外的失敗登錄
我正在嘗試
pam_tally2
在/etc/pam.d
銀河系中使用我把 sshd 改成如下內容
#%PAM-1.0 auth required pam_securetty.so auth required pam_tally2.so deny=3 unlock_time=600 auth required pam_env.so auth required pam_unix.so auth required pam_nologin.so account required pam_unix.so password required pam_unix.so session required pam_limits.so session required pam_unix.so session required pam_lastlog.so nowtmp session optional pam_mail.so standard
我創建了一個測試帳戶;在登錄之前,我測試了失敗的登錄計數:
pam_tally2 -u tst3402 (empty)
現在我使用正確的密碼登錄(這是由
expect
腳本完成的,密碼就像aaa12BBB,
)spawn ssh -l tst3402 172.9.2.1 Password: No mail. Last login: Tue Mar 20 14:25:17 2018 from 172.2.2.2 tst3402@hostname:~> status OK
在哪裡
- 狀態 OK由發送
expect
我重新檢查失敗次數
pam_tally2 -u tst3402 Login Failures Latest failure From tst3402 1 03/20/18 14:25:17 172.2.2.2
這意味著在 3 次成功登錄後,該帳戶被鎖定。
問題
為什麼在成功登錄後會
pam_tally2
看到 1 次失敗?通常的嫌疑人:
- 我知道我可以使用 ssh 密鑰,但我受到 ISAE3420 的詛咒
- 使用 ssh -vvv -l …我看到兩個交換 ..我應該看到 2 個失敗?
debug3: send packet: type 50 debug3: receive packet: type 51
- 沒有 SELinux
- 我在 security.SE 中沒有找到任何 pam_tally2 問題
問題
我在我的一台機器上看到了類似的行為:使用
sudo
正確的密碼會在pam_tally2
’s 的計數器中生成一個條目。語境
該
pam.d/sudo
條目是預設條目,非常簡單:session required pam_env.so readenv=1 user_readenv=0 session required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0 @include common-auth @include common-account @include common-session-noninteractive
在
common-auth
中,我pam_tally2.so
在頂部的行之前添加了該pam_unix.so
行:auth required pam_tally2.so onerr=fail audit deny=5 unlock_time=900 # 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
解釋
pam_tally2
手冊頁狀態(強調我的):身份驗證階段首先增加嘗試登錄計數器並檢查是否應拒絕使用者訪問。如果使用者通過身份驗證並且登錄過程繼續呼叫 pam_setcred(3),它會重置嘗試計數器。
所以,到目前為止,我相信堆棧沒有正確呼叫
pam_setcred
. 沒有文件pam.d
可以呼叫pam_setcred
(它甚至沒有安裝在我的系統上)。解決方案
在範例中,手冊頁狀態(強調我的):
該模組不必在帳戶階段呼叫,因為登錄正確地呼叫了 pam_setcred(3)。
因此,如果沒有呼叫
pam_setcred
,則需要在account
階段呼叫模組。我編輯了
pam.d/common-account
文件並在頂部添加:account required pam_tally2.so
當使用者設法進行身份驗證時,這將重置計數器。
全部
如果使用者取消身份驗證(例如,在提示輸入密碼時按 Ctrl+C),那麼這會增加計數器而不減少它,因此它與失敗的嘗試無法區分。