今天小編來說說PAM,談到這個他是Pluggable Authentication Modules的縮寫,是 Sun公司於1995 年開發的一種與認證相關的通用框架機制,PAM 是關注如何爲服務驗證用戶的 API,通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開。使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程序,是一種認證框架,自身不做認證,認證庫:文本文件,MySQL,NIS,LDAP等。怎麼樣高不高端,接下來小編將從它的認證原理,認證過程,相關文件,實現方式來介紹介紹PAM,當然也有模塊演示。
pam認證原理
1.PAM認證一般遵循這樣的順序:Service(服務)→PAM(配置文件)→pam_*.so
2.PAM認證首先要確定那一項服務,然後加載相應的PAM的配置文件(位於/etc/pam.d下),最後調用認證文件(位於/lib/security下)進行安全認證
PAM認證過程:
1.使用者執行/usr/bin/passwd 程序,並輸入密碼
2.passwd開始呼叫PAM模塊,PAM模塊會搜尋passwd程序的PAM相關設定文件,這個設定文件一般是在/etc/pam.d/裏邊的與程序同名的文件,即PAM會搜尋/etc/pam.d/passed這個設置文件
3.經由/etc/pam.d/passwd設定文件的數據,取用PAM所提供的相關模塊來進行驗證
4.將驗證結果回傳給passwd這個程序,而passwd這個程序會根據PAM回傳的結果決定下一個動作(重新輸入密碼或者通過驗證)
PAM認證機制
PAM相關文件
模塊文件目錄:/lib64/security/*.so
環境相關的設置:/etc/security/
主配置文件:/etc/pam.conf,默認不存在
爲每種應用模塊提供一個專用的配置文件:/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf將失效
用配置文件/etc/pam.conf
格式application type control module-path arguments
專用配置文件/etc/pam.d/*
格式type control module-path arguments
說明:
1. 服務名(application)telnet、login、ftp等,服務名字“OTHER”代表所有沒有在該文件中明確配置的其它服務
2. 模塊類型(module-type)
3. control PAM庫該如何處理與該服務相關的PAM模塊的成功或失敗情況
4. module-path 用來指明本模塊對應的程序文件的路徑名
5. Arguments 用來傳遞給該模塊的參數
模塊類型(module-type)
1. Auth 賬號的認證和授權
2. Account 與賬號管理相關的非認證類的功能,如:用來限制/允許用戶對某個服務的訪問時間,當前有效的系統資源(最多可以有多少個用戶),限制用戶的位置(例如:root用戶只能從控制檯登錄)
3. Password 用戶修改密碼時密碼複雜度檢查機制等功能
4. Session 用戶獲取到服務之前或使用服務完成之後需要進行一些附加的操作,如:記錄打開/關閉數據的信息,監視目錄等
5. -type 表示因爲缺失而不能加載的模塊將不記錄到系統日誌,對於那些不總是安裝在系統上的模塊有用
6. Control:PAM庫如何處理與該服務相關的PAM模塊成功或失敗情況
兩種方式實現:簡單和複雜
1.簡單方式實現:一個關健詞實現
required :一票否決,表示本模塊必須返回成功才能通過認證,但是如果該模塊返回失敗,失敗結果也不會立即通知用戶,而是要等到同一type中的所有模塊全部執行完畢再將失敗結果返回給應用程序。即爲必要條件
requisite :一票否決,該模塊必須返回成功才能通過認證,但是一旦該模塊返回失敗,將不再執行同一type內的任何模塊,而是直接將控制權返回給應用程序。是一個必要條件
sufficient :一票通過,表明本模塊返回成功則通過身份認證的要求,不必再執行同一type內的其它模塊,但如果本模塊返回失敗可忽略,即爲充分條件
optional :表明本模塊是可選的,它的成功與否不會對身份認證起關鍵作用,其返回值一般被忽略
include: 調用其他的配置文件中定義的配置信息
2. 複雜詳細實現:使用一個或多個“status=action”
[status1=action1 status2=action …]
Status:檢查結果的返回狀態
Action:採取行爲 ok,done,die,bad,ignore,reset
ok 模塊通過,繼續檢查
done 模塊通過,返回最後結果給應用
bad 結果失敗,繼續檢查
die 結果失敗,返回失敗結果給應用
ignore 結果忽略,不影響最後結果
reset 忽略已經得到的結果
module-path: 模塊路徑
1. 相對路徑:
/lib64/security目錄下的模塊可使用相對路徑 如:pam_shells.so、pam_limits.so
2. 絕對路徑:
a.模塊通過讀取配置文件完成用戶對系統資源的使用控制/etc/security/*.conf
b.注意:修改PAM配置文件將馬上生效
c. 建議:編輯pam規則時,保持至少打開一個root會話,以防止root身份驗證錯誤
3. Arguments 用來傳遞給該模塊的參數
pam文檔說明
/user/share/doc/pam-*
rpm -qd pam
man –k pam_
man 模塊名 如man rootok
《The Linux-PAM System Administrators' Guide》
PAM模塊示例
v 模塊:pam_securetty.so
v 功能:只允許root
示例:允許root在telnet登陸
/etc/pam.d/login
#auth required pam_securetty.so #將這一行加上註釋或者/etc/securetty文件中加入pts/0,pts/1…pts/n
1. Pam 功能模塊存放位置:
2.配置文件
3.爲每個應用模塊提供配置文件:
4. 調用過程:
5.1 用的shell在/etc/shells 裏就能登陸,否則就登陸不了
在該文件加上shells檢測,required,一票否決
現在發現該shell登陸不了
5.2 本地登陸出現問題,更改 vim login
該終端註釋掉 ,(如果上面改的不是login界面,將不受影響)
在字符界面登陸不上
日誌會有記錄
2. 模塊二:limit
限制root安全登陸,在/etc/securetty裏就能登陸,否則就登陸不了
root賬戶不能通過telnet登錄上去
在/etc/securetty文件中加入pts/0,pts/1…pts/n
在vi /etc/pam.d/login
#auth required pam_securetty.so #將這一行加上註釋
3. 模塊:pam_nologin.so
v 功能:如果/etc/nologin文件存在,將導致非root用戶不能登陸,如果用戶shell是/sbin/nologin時,當該用戶登陸時,會顯
示/etc/nologin.txt文件內容,並拒絕登陸
查看一下該模塊功能
touch該文件就會發現,用戶登陸不了
普通用戶登陸不了
root用戶可以登錄
如果該文件有內容,也會顯示出來
root可以
好了,現在可以刪除/etc/nologin,要不然以後普通用戶都登陸不了
4. 模塊:pam_limits.so
v 功能:在用戶級別實現對其可使用的資源的限制,例如:可打開的文件數量,可運行的進程數量,可用內存空間
v 修改限制的實現方式:
ü (1) ulimit 命令,立即生效,但無法保存
-n 最多的打開的文件描述符個數
-u 最大用戶進程數
-S 使用 soft(軟)資源限制
-H 使用 hard(硬)資源限制
ü (2) 配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf
v 配置文件:每行一個定義;
<domain> <type> <item> <value>
pam_limits.so
v <domain> 應用於哪些對象
ü Username 單個用戶
ü @group 組內所有用戶
ü * 所有用戶
v <type> 限制的類型
ü Soft 軟限制,普通用戶自己可以修改
ü Hard 硬限制,由root用戶設定,且通過kernel強制生效
ü - 二者同時限定
v <item> 限制的資源
ü nofile 所能夠同時打開的最大文件數量,默認爲1024
ü nproc 所能夠同時運行的進程的最大數量,默認爲1024
v <value> 指定具體值
查看一下功能
登陸之後使用資源,怎麼控制:ulimit
修改:
修改配置文件:/etc/security/limits.conf, /etc/security/limits.d/*.conf
限制用戶進程數:
查看運行進程:
好了,到此小編已經把PAM介紹完了,歡迎指錯。