Linux-PAM & PAM-MySQL的總結
1、理論知識
1.1、PAM模組
1.1.1、PAM的介紹
Pluggable Authentication Modules簡稱PAM,是一個微縮的可插入認證模組(PAM is an acronym for Pluggable Authentication Modules)
1.1.2、PAM的結構
1)模組層(PAM服務模組) - PAM結構最底層
作用:為介面層提供使用者鑑別等服務
--驗證使用者名稱、密碼、賬號是否過期等 --完成賬戶管理、會話管理和口令管理等
2)應用程式介面層(PAM API) - PAM結構中間層
作用:
--向上遮蔽使用者鑑別等過程的細節 --向下呼叫模組層的具體模組提供特定的服務
介面分類:
介面與模組相對應型別(呼叫下層特定介面):
--鑑別類介面 --pam_authenticate()鑑別使用者 --pam_setcred()修改使用者密碼資訊 --賬號類介面 --pam_acct_mgmt()鑑別使用者賬號是否有許可權登入以及賬號是否過期 --會話類介面 --pam_open_session() --pam_close_session() --口令類介面 --pam_chauthok()
介面與模組不相對應(對底層模組提供支援以及實現應用程式與模組的通訊):
--管理性介面 --pam_start()標記PAM事務開始 --pam_end()標記PAM事務結束 --pam_get_item()獲取PAM事務狀態資訊 --pam_set_item()設定PAM事務狀態資訊 --pam_str()輸出PAM事務錯誤資訊 --應用程式與模組間通訊介面 --pam_start()應用程式初始化可呼叫此函式存放使用者名稱之類的資訊到PAM介面層 --pam_putenv()嚮應用程式傳遞特定的環境變數 --pam_getenv()獲取應用程式環境變數 --pam_getenvlist()獲取應用程式環境變數 --使用者與模組間的通訊介面 --pam_start()函式可通過會話式回撥函式,讓底層模組通過他讀寫模組相關的鑑別資訊 --模組間通訊介面 --相互獨立的模組可通過呼叫pam_get_item()與pam_set_item()共享某些與鑑別會話有關的公共資訊。 --讀寫模組狀態資訊介面 --介面pam_get_data()和pam_set_data()用於按照PAM控制代碼要求獲取和設定特定的模組資訊。
3)應用程式層-PAM結構最上層 靈活呼叫中間層的各種鑑別功能介面
1.1.3、PAM驗證檔案配置目錄
ls/etc/pam.d/
顯示如下:
chfnnewrolerunuserssh-keycat chshotherrunuser-lsu config-utilpasswdsmartcard-authsudo crondpassword-authsmartcard-auth-acsudo-i fingerprint-authpassword-auth-acsmtpsu-l fingerprint-auth-acremotesmtp.postfixsystem-auth loginrun_initsshdsystem-auth-ac
如上所示,其中sshd是sshd服務的驗證檔案(定義驗證規則,服務找不到相應的驗證檔案則會與other匹配)
1.1.4、驗證檔案的語法
1)PAM的格式
vim編輯/etc/pam.d/sshd
配置檔案如下:
#%PAM-1.0 authrequiredpam_sepermit.so authincludepassword-auth accountrequiredpam_nologin.so accountincludepassword-auth passwordincludepassword-auth #pam_selinux.socloseshouldbethefirstsessionrule sessionrequiredpam_selinux.soclose sessionrequiredpam_loginuid.so #pam_selinux.soopenshouldonlybefollowedbysessionstobeexecutedintheusercontext sessionrequiredpam_selinux.soopenenv_params sessionoptionalpam_keyinit.soforcerevoke sessionincludepassword-auth
由以上可知PAM驗證檔案格式分為四列:
module_typecontrol_flagmodule_pathmodule_optional
2)module-type(模組型別)
--auth(驗證模組)-用於驗證使用者或設定/銷燬憑證 --account(賬戶管理模組)-執行訪問、賬戶及憑證有效期、密碼限制/規則等操作 --session(會話管理模組)-初始化或終止會話 --passwd(密碼模組)-執行密碼更改或更新操作
3)control-flag(控制標記)
--required-模組須有返值才通過驗證,成功繼續下一模組;失敗需待同一stack中所有模組執行完才返值到應用程式 --requisite-模組須有返值才通過驗證,成功繼續下一模組;失敗將不再執行同一stack內任何模組而返值給應用程式 --sufficient-模組返成功值則通過驗證,成功則停止執行;失敗值可忽略,繼續執行下一模組 --optional-模組可選,模組返值對認證不起關鍵作用,無論成敗都繼續執行下一模組,返值一般被忽略 --include-
4)module-path(模組路徑)
模組的位置查詢
find/-namepam_sepermit.so
顯示如下:
/lib64/security/pam_sepermit.so
如上所示:
模組位於“/lib64/security/”目錄下(可只寫模組名稱,32位系統位置不同)
5)module-optional(模組選項,可選)
常見公用選項如下:
--debug-該模組呼叫syslog()將除錯資訊寫入系統日誌 --no_warn-該模組不向應用程式傳送警告資訊 --use_first_pass-使用同一stack首次獲取的密碼(不向使用者提示) --try_first_pass-嘗試使用同一stack首次獲取的密碼(不通過則向用戶提示) --use_mapped_pass-使用對映過的密碼(不向使用者提示) --expose_account-允許該模組顯示使用者賬號等資訊
1.2、PAM-MySQL的介紹
----------------------------------------------------------------------
參閱資料:
Linux-PAM的簡介:
http://drops.wooyun.org/tips/1288
http://www.2cto.com/os/201303/198419.html
http://os.51cto.com/art/200510/9034.htm
http://my.oschina.net/lionel45/blog/110512
動態連結庫的概念:
http://www.cnblogs.com/TianFang/archive/2013/01/19/2867296.html
pam-mysql官網:
http://pam-mysql.sourceforge.net/
yum源:
https://fedoraproject.org/wiki/EPEL
轉載於:https://blog.51cto.com/cmdschool/1737006