pam_tally2 是 linux 的pam中用來限制存取次數的一個模組
編輯 /etc/pam.d/sshd,在最前面加入
auth required pam_tally2.so deny=1 lock_time=60
我測試了
1. 使用 cross 登入
2. 使用 root 登入
3. 使用 cross 登入,切換 su –
以上三種情況,皆會因為1次密碼失敗後,鎖定60秒後才可再讓你使用正確的密碼登入
在 /var/log/secure裡可以看到它在倒數 (如果一直重試登入,它會顯示還有多久時間解鎖)
May 1 14:05:48 xx-xx su: pam_tally2: user root (0) has time limit [55s left] since last failure.
怎麼手動解鎖,如果不想等到數的話
pam_tally2 –reset -u 使用者名稱
後來再測試明白了一件事 (2011-06-01)
lock_time參數是只要1次失敗就會鎖 60秒,就算我用了 deny=3也是算1失敗就鎖了 (測試時用pam_tally2指令看統計就會知道了,失敗幾次它還是呈現1次)
所以要用 unlock_time=60 搭配 deny=2
auth required pam_tally2.so deny=2 unlock_time=60
它才會讓我2次失敗後鎖60秒,60秒過後才能再讓我用正確密碼成功登入,而失敗的次數就會因為成功登入後被自動清除了
用unlock_time在/var/log/secure裡就不會看到倒數了,呈現的記錄如下
Jun 2 00:38:55 xx-xx sshd[1888]: pam_tally2(sshd:auth): user root (0) tally 6, deny 5
不過以上限制到的是非root的帳號,如果連 root 也要限制的話 ,要多個 even_deny_root
auth required pam_tally2.so deny=2 unlock_time=60 even_deny_root
參數說明:
deny=n 代表拒絕存取,如果超過n次
lock_time=n 代表1次失敗後就鎖n秒
unlock_time=n 代表幾次失敗就鎖n秒,搭配deny=2就是兩次失敗就鎖n秒
even_deny_root 代表也限制root帳號
root_unlock_time=n 這個跟unlcok_time一樣,只是這只給root帳號用,如果要區別一般帳號的話,就可以額外作這個限制
留言
pam_tally2顯示的Latest failure代表最新連線失敗的時間,它會一直顯示是因為30分鐘過後沒有正確的帳號密碼登入過