使用pam_tally2鎖定和解鎖SSH失敗的登錄嘗試

pam_tally2模塊可於用於在對系統進行一定次數的失敗ssh登錄嘗試后鎖定用戶
pam_tally2模塊分為兩部分,一部分是pam_tally2.so,另一部分是pam_tally2。它基於PAM模塊,可用於檢查和操作計數器文件。它可以顯示用戶登錄嘗試次數,單獨設置計數,也可清除計數,解鎖所有用戶登錄鎖定
一、先說說PAM
Linux-PAM (Pluggable Authentication Modules for Linux)可插拔認證模塊
Linux-PAM是一套適用於Linux的身份驗證共享庫系統,它為系統中的應用程序或服務提供動態身份驗證模塊支持。在Linux中,PAM是可動態配置的,本地系統管理員可以自由選擇應用程序如何對用戶進行身份驗證。PAM應用在許多程序與服務上,比如登錄程序(login、su)的PAM身份驗證(口令認證、限制登錄),passwd強制密碼,用戶進程實時管理,向用戶分配系統資源等。
PAM的主要特征是認證的性質是可動態配置的。PAM的核心部分是庫(libpam)和PAM模塊的集合,它們是位於文件夾/lib/security/中的動態鏈接庫(.so)文件,以及位於/etc/pam.d/目錄中(或者是/etc/pam.conf配置文件)的各個PAM模塊配置文件。/etc/pam.d/目錄中定義了各種程序和服務的PAM配置文件,其中system-auth文件是PAM模塊的重要配置文件,它主要負責用戶登錄系統的身份認證工作
1) 如何判斷程序是否使用了PAM

2)PAM身份驗證配置文件
/etc/pam.d/目錄包含應用程序的PAM配置文件

3)PAM配置文件語法格式
每個PAM配置文件都包含一組指令,用於定義模塊以及控制標志和參數。每條指令都有一個簡單的語法,用於標識模塊的目的(接口)和模塊的配置設置,語法格式如下:
module_interface control_flag module_name module_arguments

4)PAM模塊接口(模塊管理組)
PAM為認證任務提供四種類型可用的模塊接口,它們分別提供不同的認證服務:
√ auth |
- 認證模塊接口,如驗證用戶身份、檢查密碼是否可以通過,並設置用戶憑據 |
---|---|
√ account |
- 賬戶模塊接口,檢查指定賬戶是否滿足當前驗證條件,如用戶是否有權訪問所請求的服務,檢查賬戶是否到期 |
√ password |
- 密碼模塊接口,用於更改用戶密碼,以及強制使用強密碼配置 |
√ session |
- 會話模塊接口,用於管理和配置用戶會話。會話在用戶成功認證之后啟動生效 |
單個PAM庫模塊可以提供給任何或所有模塊接口使用。例如,pam_unix.so提供給四個模塊接口使用。
5)PAM控制標志
所有的PAM模塊被調用時都會返回成功或者失敗的結果,每個PAM模塊中由多個對應的控制標志決定結果是否通過或失敗。每一個控制標志對應一個處理結果,PAM庫將這些通過/失敗的結果整合為一個整體的通過/失敗結果,然后將結果返回給應用程序。模塊可以按特定的順序堆疊。控制標志是實現用戶在對某一個特定的應用程序或服務身份驗證的具體實現細節。該控制標志是PAM配置文件中的第二個字段,PAM控制標志如下:
> required |
- 模塊結果必須成功才能繼續認證,如果在此處測試失敗,則繼續測試引用在該模塊接口的下一個模塊,直到所有的模塊測試完成,才將結果通知給用戶。 |
---|---|
> requisite |
- 模塊結果必須成功才能繼續認證,如果在此處測試失敗,則會立即將失敗結果通知給用戶。 |
> sufficient |
- 模塊結果如果測試失敗,將被忽略。如果sufficient模塊測試成功,並且之前的required模塊沒有發生故障,PAM會向應用程序返回通過的結果,不會再調用堆棧中其他模塊。 |
> optional |
- 該模塊返回的通過/失敗結果被忽略。當沒有其他模塊被引用時,標記為optional模塊並且成功驗證時該模塊才是必須的。該模塊被調用來執行一些操作,並不影響模塊堆棧的結果。 |
> include |
- 與其他控制標志不同,include與模塊結果的處理方式無關。該標志用於直接引用其他PAM模塊的配置參數 |
6)PAM配置方法
所有的PAM配置方法都在man手冊中有說明,比如要查找某個程序支持PAM模塊的配置,可以使用man 加模塊名(去掉.so)查找說明,如# man pam_unix。(模塊名可以在目錄/lib/security/或/lib64/security/中找到。)

man pam_tally2

二、下面演示一下使用Pam_Tally2鎖定和解鎖SSH失敗的登錄嘗試
根據man pam_tally2幫助說明文檔
pam_tally2主要認證選項
* deny 指定最大幾次認證錯誤,如果超出此錯誤,將執行后面的策略。如鎖定N秒,如果后面沒有其他策略* 指定時,默認永遠鎖定,除非手動解鎖。
* file 記錄日志的路徑,默認是/var/log/tallylog
* lock_time 鎖定多長時間,按秒為單位;
* unlock_time 指定認證被鎖后,多長時間自動解鎖用戶;
* even_deny_root root用戶在認證出錯時,一樣被鎖定
* root_unlock_time root用戶在失敗時,鎖定多長時間。該選項一般是配合even_deny_root 一起使用的。
配置示例
vi /etc/pam.d/sshd auth配置處添加如下一行
auth required pam_tally2.so file=/var/log/tallylog deny=5 unlock_time=30 even_deny_root root_unlock_time=20
account配置處添加account required pam_tally2.so

保存配置后,測試效果
新建連接輸錯5次密碼,SSH登錄時root賬戶會被鎖定,使用pam_tally2 -u root查看登錄失敗的計數

從其它服務器上ssh登錄輸錯5次以上密碼,鎖定后,待鎖定時間結束后,再輸入正確密碼,登錄成功后會有如下類似提示
Account locked due to 13 failed logins
Account locked due to 14 failed logins

如果鎖定的時間較長的話,需要手動解鎖,清空計數
pam_tally2 -u root -r

pam_tally的主要兩個命令參數-u 和-r

本文分享自微信公眾號 - WalkingCloud(WalkingCloud2018)
原文出處及轉載信息見文內詳細說明,如有侵權,請聯系 yunjia_community@tencent.com 刪除。
原始發表時間:2019-08-26