pam認證機制
- 是一種與認證相關的通用框架機制,但是自身不做認證
- 它同時面向驗證服務的開發者和被驗證服務者:淘寶、商家、買家
- 應用程序開發者通過 在服務程序中使用PAM API來實現對認證方法的調用;而PAM服 務模塊的開發者則利用PAM SPI來編寫模塊供 PAM接口庫調用,將不同的認證機制加入到系統中;PAM接口庫則 讀取配置文件,將應用程序和相應的PAM服務模塊聯繫起來
- 系統管理員可以靈活的根據需要給不同的服務配置不同的認證方式而無需更改服務程序
- 修改服務的配置文件來修改認證方式
PAM相關文件
- 模塊文件目錄:/lib64/security/*.so
- 模塊的配置文件:/etc/security/,該目錄下存放/lib64/security/下複雜模塊的子配置文件
- 主(專門的)配置文件:/etc/pam.conf,默認不存在
- 爲每種應用模塊提供一個專用的配置文件:/etc/pam.d/APP_NAME,/etc/pam.d/下的應用程序通過對應的/etc/pam.d/APP_NAME配置文件來調用功能模塊
- 調用模塊需要的工作參數如果簡單就放在/etc/pam.d./下的配置文件中,複雜就放在/lib64/security/下
- 注意:如/etc/pam.d存在,/etc/pam.conf將失效
PAM認證原理
- PAM認證首先要確定那一項服務,然後加載相應的PAM的配置文件(位於 /etc/pam.d下),最後調用認證文件(位於/lib/security下)進行安全認證
- 過程,以執行passwd程序爲例
- 使用者執行/usr/bin/passwd 程序,並輸入密碼
- passwd開始調用PAM模塊,PAM模塊會搜尋passwd程序的PAM相關配置文 件,這個設置文件一般是在/etc/pam.d/裏邊的與程序同名的文件,即PAM會 搜尋/etc/pam.d/passwd此設置文件
- 經由/etc/pam.d/passwd設定文件的數據,取用PAM所提供的相關模塊來進 行驗證
- 將驗證結果回傳給passwd這個程序,而passwd這個程序會根據PAM回傳的 結果決定下一個動作(重新輸入密碼或者通過驗證)
PAM文件格式
- 通用配置文件格式/etc/pam.conf,太大,內容太多,不用
- 專用配置文件格式/etc/pam.d/*,分四個類型
- type
- Auth 賬號的認證和授權
- Account 與賬號管理相關的非認證類的功能,如:用來限制/允許用戶對某 個服務的訪問時間,當前有效的系統資源(最多可以有多少個用戶),限制用 戶的位置(例如:root用戶只能從控制檯登錄)
- Password 用戶修改密碼時密碼複雜度檢查機制等功能
- Session 用戶獲取到服務之前或使用服務完成之後需要進行一些附加的操作, 如:記錄打開/關閉數據的信息,監視目錄等
- -type 表示因爲缺失而不能加載的模塊將不記錄到系統日誌,對於那些不總是 安裝在系統上的模塊有用
- control,PAM庫如何處理與該服務相關的PAM模塊成功或失敗情況
- 分兩種方式:簡單、複雜
- 簡單方式實現,用一個關鍵字實現
- required:一票否決,表示本模塊必須返回成功才能通過認證,但是如果該 模塊返回失敗,失敗結果也不會立即通知用戶,而是要等到同一type中的所有模塊全部執行完畢再將失敗結果返回給應用程序
- requisite:一票否決,該模塊必須返回成功才能通過認證,但是一旦該模塊返 回失敗,將不再執行同一type內的任何模塊,而是直接將控制權返回給應用程序
- sufficient:一票通過,BOSS發話好使,表明本模塊返回成功則通過身份認證的要求,不必再執 行同一type內的其它模塊,但如果本模塊返回失敗可忽略
- opitional:可選可不選,返回值一般對最終結果沒影響
- include:可以調用其他的配置文件中定義的配置信息
- 複雜詳細實現,一般不用
- modules-path
- 相對路徑:
- /lib64/security目錄下的模塊可使用相對路徑,如:pam_shells.so、 pam_limits.so
- 絕對路徑:
- 模塊通過讀取配置文件完成用戶對系統資源的使用控制,/etc/security/*.conf
- 注意:修改PAM配置文件將馬上生效
- 建議:編輯pam規則時,保持至少打開一個root會話,以防止root身份驗證錯誤
- 相對路徑:
- arguments,用來傳遞給該模塊的參數
PAM文檔說明
- /user/share/doc/pam-*/txts/*
- rpm -qd pam查看pam的man文件
- man modules-name,man rootok
常用的PAM模塊
pam_shells.so
- 模塊:pam_shells
- 功能:檢查有效shell
- man pam_shells
- 示例:模擬非shell類型的用戶無法登錄
/* 原本的shell類型內容 */
cat /etc/shells
/* 修改登錄程序的配置文件 */
vim /etc/pam.d/login
/* 添加auth required pam_shells.so */
/* 將一名系統用戶的登錄類型設爲/bin/csh */
usermod/chsh -s /bin/csh huang
/* 但是使用su命令可以用huang登錄,同理修改su的配置文件*/
vim /etc/pam.d/su
auth required pam_shells.so
- 使用huang用戶將無法登錄
pam_securetty.so
- 功能:只允許root用戶在/etc/securetty列出的安全終端上登陸
- 示例:允許root在telnet登陸
- 可以以在/etc/securetty中添加talnet的登錄終端
- 或是在/etc/pam.d/remote中刪除auth required pam_securetty.so
pam_nologin.so
- 功能
- 如果/etc/nologin文件存在,將導致非root用戶不能登陸
- 如果用戶shell類型是/sbin/nologin時,當該用戶登陸時,會顯示**/etc/nologin文件內容**,並拒絕登陸,維護時使用
pam_limits.so
- 功能:在用戶級別實現對其可用資源的控制,比如可打開的文件數量、可運行的進程數量、可用內存
- 修改限制
- 使用ulimit命令,立即生效但不永久
- -n,最大能打開的文件個數
- -u,最大的用戶進程數
- -S,使用軟資源限制
- -H,硬資源限制
- 寫到文件中中永久保存
- /etc/security/limits.conf,總配置文件
- /etc/security/limits.d/*.conf,分成子配置來修改
- domain type item value
- 指定用戶 限制類型 限制的資源 具體數值
- huang - nproc 8
總結的不深,希望剛接觸這些的人有所幫助。