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/顯示如下:
chfn?????????????????newrole???????????runuser????????????ssh-keycat chsh?????????????????other?????????????runuser-l??????????su config-util??????????passwd????????????smartcard-auth?????sudo crond????????????????password-auth?????smartcard-auth-ac??sudo-i fingerprint-auth?????password-auth-ac??smtp???????????????su-l fingerprint-auth-ac??remote????????????smtp.postfix???????system-auth login????????????????run_init??????????sshd???????????????system-auth-ac如上所示,其中sshd是sshd服務的驗證文件(定義驗證規則,服務找不到相應的驗證文件則會與other匹配)
1.1.4、驗證文件的語法
1)PAM的格式
vim編輯/etc/pam.d/sshd
配置文件如下:
#%PAM-1.0 auth???????required?????pam_sepermit.so auth???????include??????password-auth account????required?????pam_nologin.so account????include??????password-auth password???include??????password-auth #?pam_selinux.so?close?should?be?the?first?session?rule session????required?????pam_selinux.so?close session????required?????pam_loginuid.so #?pam_selinux.so?open?should?only?be?followed?by?sessions?to?be?executed?in?the?user?context session????required?????pam_selinux.so?open?env_params session????optional?????pam_keyinit.so?force?revoke session????include??????password-auth由以上可知PAM驗證文件格式分為四列:
module_type???control_flag???module_path???module_optional2)module-type(模塊類型)
--?auth(驗證模塊)?-?用于驗證用戶或設置/銷毀憑證 --?account(賬戶管理模塊)?-?執行訪問、賬戶及憑證有效期、密碼限制/規則等操作 --?session(會話管理模塊)?-?初始化或終止會話 --?passwd(密碼模塊)?-?執行密碼更改或更新操作3)control-flag(控制標記)
--?required?-?模塊須有返值才通過驗證,成功繼續下一模塊;失敗需待同一stack中所有模塊執行完才返值到應用程序 --?requisite?-?模塊須有返值才通過驗證,成功繼續下一模塊;失敗將不再執行同一stack內任何模塊而返值給應用程序 --?sufficient?-?模塊返成功值則通過驗證,成功則停止執行;失敗值可忽略,繼續執行下一模塊 --?optional?-?模塊可選,模塊返值對認證不起關鍵作用,無論成敗都繼續執行下一模塊,返值一般被忽略 --?include?-4)module-path(模塊路徑)
模塊的位置查找
find?/?-name?pam_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
總結
以上是生活随笔為你收集整理的Linux-PAM PAM-MySQL的总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用jQuery的attr方法来修改on
- 下一篇: junit--eclipse插件