PAM認證機制

1.PAM介紹

?認證庫:文本文件,MySQL,NIS,LDAP等
?PAM 是關(guān)注如何為服務(wù)驗證用戶的 API,通過提供一些動態(tài)鏈接庫和一套統(tǒng)一的API,將系統(tǒng)提供的服務(wù)和該服務(wù)的認證方式分開
? 使得系統(tǒng)管理員可以靈活地根據(jù)需要給不同的服務(wù)配置不同的認證方式而無需更改服務(wù)程序
? 一種認證框架,自身不做認證
? 它提供了對所有服務(wù)進行認證的中央機制,適用于login,遠程登錄(telnet,rlogin,fsh,ftp,點對點協(xié)議(PPP)),su等應(yīng)用程序中。系統(tǒng)管理員通過PAM配置文件來制定不同應(yīng)用程序的不同認證策略;應(yīng)用程序開發(fā)者通過在服務(wù)程序中使用PAM API(pam_xxxx( ))來實現(xiàn)對認證方法的調(diào)用;而PAM服務(wù)模塊的開發(fā)者則利用PAM SPI來編寫模塊(主要是引出一些函數(shù)pam_sm_xxxx( )供PAM接口庫調(diào)用),將不同的認證機制加入到系統(tǒng)中;PAM接口庫(libpam)則讀取配置文件,將應(yīng)用程序和相應(yīng)的PAM服務(wù)模塊聯(lián)系起來。

2.PAM架構(gòu)

Paste_Image.png

pam認證原理
? PAM認證一般遵循這樣的順序:
Service(服務(wù))→PAM(配置文件)→pam_\*.so
? PAM認證首先要確定那一項服務(wù),然后加載相應(yīng)的PAM的配置文件(位于/etc/pam.d下),最后調(diào)用認證文件(位于/lib/security下)進行安全認證

3. PAM認證過程:(以passwd為例)

(1)使用者執(zhí)行/usr/bin/passwd 程序,并輸入密碼
(2)passwd開始呼叫PAM模塊,PAM模塊會搜尋passwd程序的PAM相關(guān)設(shè)定文件,這個
  設(shè)定文件一般在/etc/pam.d/里邊的與程序同名的文件,即PAM會尋/etc/pam.d/passed這個設(shè)置文件
(3)經(jīng)由/etc/pam.d/passwd設(shè)定文件的數(shù)據(jù),取用PAM所提供的相關(guān)模塊來進行驗證
(4)將驗證結(jié)果回傳給passwd這個程序,而passwd這個程序會根據(jù)PAM回傳的結(jié)果決定下一個動作(重新輸入密碼或者通過驗證)

eg:passwd→PAM模塊→/etc/pam.d/passwd→調(diào)用庫文件來生效/lib64/seturity/*.so

4. PAM相關(guān)文件

? 模塊文件目錄:/lib64/security/*.so
? 環(huán)境相關(guān)的設(shè)置,獨立的配置文件,完成用戶對系統(tǒng)資源的使用和控制:/etc/security/
?主配置文件:/etc/pam.conf,默認不存在
? 為每種應(yīng)用模塊提供一個專用的配置文件:
/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

Paste_Image.png

? 說明:

? 服務(wù)名(application)telnet、login、ftp等,服務(wù)名字“OTHER”代表所有沒有在該文件中明確配置的其它服務(wù)
? 模塊類型(type)
? control PAM庫該如何處理與該服務(wù)相關(guān)的PAM模塊的成功或失敗情況
? module-path 用來指明本模塊對應(yīng)的程序文件的路徑名
? Arguments 用來傳遞給該模塊的參數(shù)
Paste_Image.png

contrl 復雜詳細實現(xiàn):使用一個或多個“status=action”
? [status1=action1 status2=action …]
Status:檢查結(jié)果的返回狀態(tài)
Action:采取行為 ok,done,die,bad,ignore,reset
? ok 模塊通過,繼續(xù)檢查
? done 模塊通過,返回最后結(jié)果給應(yīng)用
? bad 結(jié)果失敗,繼續(xù)檢查
? die 結(jié)果失敗,返回失敗結(jié)果給應(yīng)用
? ignore 結(jié)果忽略,不影響最后結(jié)果
? reset 忽略已經(jīng)得到的結(jié)果

Paste_Image.png
模塊通過讀取配置文件完成用戶對系統(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文件內(nèi)容,并拒絕登陸

(4)示例模塊:pam_limits.so

? 功能:在用戶級別實現(xiàn)對其可使用的資源的限制,例如:可打開的文件數(shù)量,可運行的進程數(shù)量,可用內(nèi)存空間
?① 修改限制的實現(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> 應(yīng)用于哪些對象
? Username 單個用戶
? @group 組內(nèi)所有用戶
? * 所有用戶
? <type> 限制的類型
? Soft 軟限制,普通用戶自己可以修改
? Hard 硬限制,由root用戶設(shè)定,且通過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個進程
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容