1.PAM介紹
?認證庫:文本文件,MySQL开呐,NIS,LDAP等
?PAM 是關注如何為服務驗證用戶的 API规求,通過提供一些動態(tài)鏈接庫和一套統(tǒng)一的API,將系統(tǒng)提供的服務和該服務的認證方式分開
? 使得系統(tǒng)管理員可以靈活地根據(jù)需要給不同的服務配置不同的認證方式而無需更改服務程序
? 一種認證框架瓦戚,自身不做認證
? 它提供了對所有服務進行認證的中央機制,適用于login较解,遠程登錄(telnet,rlogin,fsh,ftp,點對點協(xié)議(PPP))赴邻,su等應用程序中。系統(tǒng)管理員通過PAM配置文件來制定不同應用程序的不同認證策略姥敛;應用程序開發(fā)者通過在服務程序中使用PAM API(pam_xxxx( ))來實現(xiàn)對認證方法的調用;而PAM服務模塊的開發(fā)者則利用PAM SPI來編寫模塊(主要是引出一些函數(shù)pam_sm_xxxx( )供PAM接口庫調用)与帆,將不同的認證機制加入到系統(tǒng)中;PAM接口庫(libpam)則讀取配置文件玄糟,將應用程序和相應的PAM服務模塊聯(lián)系起來。
2.PAM架構
pam認證原理
? PAM認證一般遵循這樣的順序:
Service(服務)→PAM(配置文件)→pam_\*.so
? PAM認證首先要確定那一項服務嫂拴,然后加載相應的PAM的配置文件(位于/etc/pam.d下)贮喧,最后調用認證文件(位于/lib/security下)進行安全認證
3. PAM認證過程:(以passwd為例)
(1)使用者執(zhí)行/usr/bin/passwd 程序,并輸入密碼
(2)passwd開始呼叫PAM模塊箱沦,PAM模塊會搜尋passwd程序的PAM相關設定文件谓形,這個
設定文件一般在/etc/pam.d/里邊的與程序同名的文件,即PAM會尋/etc/pam.d/passed這個設置文件
(3)經(jīng)由/etc/pam.d/passwd設定文件的數(shù)據(jù),取用PAM所提供的相關模塊來進行驗證
(4)將驗證結果回傳給passwd這個程序寒跳,而passwd這個程序會根據(jù)PAM回傳的結果決定下一個動作(重新輸入密碼或者通過驗證)
eg:passwd→PAM模塊→/etc/pam.d/passwd→調用庫文件來生效/lib64/seturity/*.so
4. PAM相關文件
? 模塊文件目錄:/lib64/security/*.so
? 環(huán)境相關的設置,獨立的配置文件聘萨,完成用戶對系統(tǒng)資源的使用和控制:/etc/security/
?主配置文件:/etc/pam.conf童太,默認不存在
? 為每種應用模塊提供一個專用的配置文件:
/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf將失效
5.文件格式
(1)通用配置文件/etc/pam.conf格式
application type control module-path arguments
(2)專用配置文件/etc/pam.d/* 格式
type control module-path arguments
? 說明:
? 服務名(application)telnet翘贮、login爆惧、ftp等,服務名字“OTHER”代表所有沒有在該文件中明確配置的其它服務
? 模塊類型(type)
? control PAM庫該如何處理與該服務相關的PAM模塊的成功或失敗情況
? module-path 用來指明本模塊對應的程序文件的路徑名
? Arguments 用來傳遞給該模塊的參數(shù)
contrl 復雜詳細實現(xiàn):使用一個或多個“status=action”
? [status1=action1 status2=action …]
Status:檢查結果的返回狀態(tài)
Action:采取行為 ok芍耘,done熄阻,die,bad窃页,ignore,reset
? ok 模塊通過脖卖,繼續(xù)檢查
? done 模塊通過,返回最后結果給應用
? bad 結果失敗袖扛,繼續(xù)檢查
? die 結果失敗十籍,返回失敗結果給應用
? ignore 結果忽略,不影響最后結果
? reset 忽略已經(jīng)得到的結果
模塊通過讀取配置文件完成用戶對系統(tǒng)資源的使用控制
/etc/security/*.conf
? 注意:修改PAM配置文件將馬上生效
? 建議:編輯pam規(guī)則時惨篱,保持至少打開一個root會話围俘,以防止root身份驗證錯誤
pam文檔說明
? /user/share/doc/pam-*
? rpm -qd pam
? man –k pam_
? man 模塊名 如man rootok
? 《The Linux-PAM System Administrators' Guide》
(1)示例模塊:pam_shells
? 功能:檢查有效shell
? man pam_shells
? 示例:不允許使用/bin/csh的用戶本地登錄
vim /etc/pam.d/login
auth required pam_shells.so
vim /etc/shells
去掉 /bin/csh
useradd –s /bin/csh testuser
testuser將不可登錄
tail /var/log/secure
(2)示例模塊:pam_securetty.so
? 功能:只允許root用戶在/etc/securetty列出的安全終端上
登陸
? 示例:允許root在telnet登陸
vi /etc/pam.d/login
#auth required pam_securetty.so #將這一行加上注釋
或者/etc/securetty文件中加入
pts/0,pts/1…pts/n
(3)示例模塊:pam_nologin.so
? 功能:如果/etc/nologin文件存在,將導致非root用戶不能登陸,如果用戶shell是/sbin/nologin 時界牡,當該用戶登陸時,會顯示/etc/nologin.txt文件內容常遂,并拒絕登陸
(4)示例模塊:pam_limits.so
? 功能:在用戶級別實現(xiàn)對其可使用的資源的限制挽荠,例如:可打開的文件數(shù)量,可運行的進程數(shù)量坤按,可用內存空間
?① 修改限制的實現(xiàn)方式:
ulimit命令,立即生效,但無法保存
-n 最多的打開的文件描述符個數(shù)
-u 最大用戶進程數(shù)
-S 使用 soft(軟)資源限制
-H 使用 hard(硬)資源限制
②配置文件:/etc/security/limits.conf,
/etc/security/limits.d/*.conf
? 配置文件:每行一個定義腹忽;
<domain> <type> <item> <value>
? <domain> 應用于哪些對象
? Username 單個用戶
? @group 組內所有用戶
? * 所有用戶
? <type> 限制的類型
? Soft 軟限制,普通用戶自己可以修改
? Hard 硬限制,由root用戶設定,且通過kernel強制生效
? - 二者同時限定
? <item> 限制的資源
? nofile 所能夠同時打開的最大文件數(shù)量,默認為1024
? nproc 所能夠同時運行的進程的最大數(shù)量,默認為1024
? <value> 指定具體值
eg:
? 限制用戶最多打開的文件數(shù)和運行進程數(shù)
/etc/pam.d/system-auth
session required pam_limits.so
? vim /etc/security/limits.conf
apache – nofile 10240 apache用戶可打開10240個文件
student hard nproc 20 不能運行超過20個進程