1. 程式人生 > 實用技巧 >Linux-PAM & PAM-MySQL的總結

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的結構

wKioL1agOrug7pRDAAEeYP0aulI824.png

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