轉載:http://drops.wooyun.org/tips/1288linux
PAM (Pluggable Authentication Modules )是由Sun提出的一種認證機制。它經過提供一些動態連接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員能夠靈活地根據須要給不一樣的服務配置不一樣的認證方式而無需更改服務程序,同時也便於向系統中添加新的認證手段。PAM最初是集成在Solaris中,目前已移植到其它系統中,如Linux、SunOS、HP-UX 9.0等。shell
module-type control-flagmodule_path optional
在/etc/pam.d/
下的文件中,與服務名稱相對應的文件,爲該服務的pam驗證文件,例如服務爲sshd,則在/etc/pam.d
下存在sshd這個文件,裏面包含sshd驗證規則。其中有個一特殊的文件爲other,若是有的服務與之沒有向對應的文件,則對應other。安全
服務類型,即 auth、account、session 或 password。網絡
驗證模塊(auth)用於驗證用戶或設置/銷燬憑證。 賬戶管理模塊(account)將執行與訪問、賬戶及憑證有效期、密碼限制/規則等有關的操做。 會話管理模塊(session)用於初始化和終止會話。 密碼管理模塊(passwd)將執行與密碼更改/更新有關的操做。
用於指明在肯定服務的集成成敗值過程當中模塊所起的做用。有效的控制標誌包括 include、optional、required、requisite 和 sufficient。session
required 表示本模塊必須返回成功才能經過認證,可是若是該模塊返回失敗的話,失敗結果也不會當即通知用戶,而是要等到同一stack 中的全部模塊所有執行完畢再將失敗結果返回給應用程序。能夠認爲是一個必要條件。 requisite 與required相似,該模塊必須返回成功才能經過認證,可是一旦該模塊返回失敗,將再也不執行同一stack內的任何模塊,而是直 接將控制權返回給應用程序。是一個必要條件。 sufficient 代表本模塊返回成功已經足以經過身份認證的要求,沒必要再執行同一stack內的其它模塊,可是若是本模塊返回失敗的話能夠 忽略。能夠認爲是一個充分條件。 optional代表本模塊是可選的,它的成功與否通常不會對身份認證起關鍵做用,其返回值通常
用於實現服務的庫對象的路徑,通常都只寫庫名,庫的路徑通常爲/lib/security(32位),/lib64/security(64位)app
傳遞給服務模塊的選項,可選。ssh
幾個公用的參數:ide
debug 該模塊應當用syslog( )將調試信息寫入到系統日誌文件中。 no_warn 代表該模塊不該把警告信息發送給應用程序。 use_first_pass 代表該模塊不能提示用戶輸入密碼,而應使用前一個模塊從用戶那裏獲得的密碼。 try_first_pass 代表該模塊首先應當使用前一個模塊從用戶那裏獲得的密碼,若是該密碼驗證不經過,再提示用戶輸入新的密碼。 use_mapped_pass 該模塊不能提示用戶輸入密碼,而是使用映射過的密碼。 expose_account 容許該模塊顯示用戶的賬號名等信息,通常只能在安全的環境下使用,由於泄漏用戶名會對安全形成必定程度的威脅。
圖1:PAM造成堆棧的過程(solaris,有的linux不包含)ui
圖2:PAM如何肯定最終的返回值(solaris)
0x04 經常使用PAM模塊spa
從官方文檔翻譯出來的(/usr/share/doc/pam-1.1.1
),翻譯可能有不對的地方
類型:auth
做用:只對root有限定,限定root登錄的終端,系統默認的「安全」中斷保存在/etc/securetty中。
類型:account
做用:基於登陸名,主機名或者所屬域,ip地址或者網絡
終端編號(相似於/etc/securetty)。默認的配置文件爲/etc/security/access.conf
類型:auth 做用:當用戶輸入密碼的錯誤次數超過指定次數時,鎖定帳戶參數:
onerr=[fail|succeed]:
file=/path/to/counter:當登錄超過容許次數時,日誌保存的地方。默認的爲/var/log/tallylog。當開啓的時候,每當登錄失敗一次,則會寫入一次,使用pam_tally2 能夠讀出
audit:若是用戶找不到,則把此用戶名記錄到日誌中 silent:不輸出任何信息 no_log_info:不進行日誌記錄
deny=N:當用戶連續輸錯n次是,在第n+1次鎖定該用戶,沒有 設定解鎖解鎖時間,則鎖定以後須要手工解鎖。
pam_tally.so -u username --reset lock_time=n:當輸入密碼錯誤一次時,在N秒內不能再次登錄該帳戶。
unlock_time=n:解鎖時間,當帳戶被鎖定時,過n秒時,該帳戶 被接觸鎖定(清空/var/log/tallylog中的相關信息),配合deny參數使用 magic_root:當uid=0時,不會往/var/log/tallylog中寫入計 數,即這個PAM不生效 even_deny_root:對root用戶生效(不加magic_root參數,對 root也是不處理的) root_unlock_time=n:是針對even_deny_root的,root用戶的解鎖時間 每當用戶成功登錄過一次後,/var/log/tallylog中關於這個用 戶的記錄就會清空
類型:password
做用:限定更改密碼的長度,複雜度等等。
參數:
dubug:把修改密碼的行爲記錄到日誌中 retry=N:修改密碼時,容許錯誤的次數,默認是1次 difok=N:新密碼與舊密碼不一樣的位數。若是超過一半不一樣,則經過驗證,則忽略difok的設置 minlen=N:密碼的最短長度 dcredit=N:至少有N的數字 ucredit=N:至少有N的大寫字碼 lcredit=N:至少有N個小寫字母 ocredit=N:至少有N個特殊字符 minclass=N:密碼組成的範圍(數字,大小寫字母,特殊字符) maxrepeat=N:最多與上一個密碼重複
類型:session
做用:限制資源的使用,默認的配置文件爲/etc/security/limits.conf是全局的,/etc/security/limits.d/下存放各個子文件
類型:auth
做用:驗證用戶是否可以登錄
參數:
item=[tty|user|rhost|ruser|group|shell]:控制的對象 sense=[allow|deny]:控制的方法 file=/path/filename:文件的路徑,每一個佔一行 onerr=[succeed|fail]:指定某類事件發生時的返回值。 實例: authrequired pam_listfile.soonerr=succeed item=user sense=deny file=/etc/ftpusers 保存在/etc/ftpusers中的用戶,是不容許的。
類型:auth做用:用於拒絕除root外的不一樣用戶的登錄(當/etc/nologin存在,或者從新制定file的狀況下)參數:authfile=/path/nologin:若是文件存在,當拒絕用戶登錄的時候,同時會輸出該文件中保存的內容。默認文件爲/etc/nologin。