CentOS-pam認證機制簡介
前言
linux下PAM模組全稱是Pluggable Authentication Module for linux(可插入式授權管理模組),該由Sun公司提供,在Linux中,PAM是可動態配置的,本地系統管理員可以自由選擇應用程式如何對使用者進行身份驗證。PAM應用在許多程式與服務上,比如登入程式(login、su)的PAM身份驗證(口令認證、限制登入),passwd強制密碼,使用者程序實時管理,向用戶分配系統資源等。
配置檔案
PAM的配置檔案位置 /etc/pam.conf,也可以在/etc/pam.d/資料夾下配置單獨的檔案,當存在/etc/pam.d資料夾時,Linux-PAM將會使用/etc/pam.d資料夾下的配置檔案而忽略/etc/pam.conf配置檔案。
pam.conf配置檔案中,配置內容寫在一行內,也可以以""作為連線符將配置內容寫在多行;pam.conf以空格作為分割標記,#代表標註資訊;“-”如果在配置語句前面加上該符號,在系統登入時如果該模組未被正確載入,不會將該事件記錄到系統日誌中,即“-”表示可選項。
如果配置檔案放置在/etc/pam.d資料夾下,則配置檔案中沒有service選項,且配置檔案的名字為service名字,檔名必須小寫,配置語法區分大小寫,配置規則格式為:
service type control module-path module-arguments
服務名稱 型別 控制 模組路徑 模組引數
type型別
account manager(account):提供賬戶服務驗證,如賬戶密碼是否過期,是否對該賬戶提供服務
authentication manager(auth):負責對使用者進行認證並建立使用者憑證;通常該模組通過互動式方法進行認證,比如你應當輸入密碼證明你是你,但並非所有的認證都是該型別
password manager(password):進授權認證機制進行更新,如更改密碼
session manager(session):當開啟一個新會話時,該模組負責處理會話的準備任務,而當關閉某一個會話時,該模組負責善後工作,如解除安裝該使用者home目錄。
control控制
control分為簡單和複雜兩種語法結構,簡單語法中僅有一個關鍵字,而複雜語法通過[ ]引入[value=action]選項
1、control簡單語法包含以下值:
required:當使用此關鍵字的PAM模組驗證失敗,最終會導致PAM-API返回失敗,但是會等到後續模組全部被驗證後才會返回失敗
requisite:該關鍵字與required使用方法類似,但是當PAM驗證失敗時,requisite會立刻向呼叫程式或父PAM桟返回失敗值;該關鍵字可以防止攻擊者獲得系統已存在使用者資訊,通常該關鍵字用在重要的系統環境中
sufficient:如果該模組驗證成功,而且該模組前無required模組驗證失敗,sufficient關鍵字將會向呼叫程式或者父PAM棧返回成功值而不會再呼叫後續的驗證模組;當呼叫sufficient模組失敗,PAM模組不會受sufficient模組失敗影響,將會繼續執行驗證。
optional:當配置檔案中僅有service+optional這一條規則時,optional模組才會起作用
include:將指定配置檔案中所有的type型別作為引數包含在此控制語句中
substack:將指定配置檔案中type作為引數包含在此控制語句中,和Include不同的是,在substack中完成任務或者die,只會影響substack內控制命令,不會影響完整的stack桟
2、control複雜語法
[value1=action1 value2=action2 ...]
valueN代表對應模組中控制語句的返回值,可以是下面的值:success,open_err,symbol_err,service_err,system_err,buf_err,perm_denied,deault等,其中default表示所有未被顯式提到的所有值
PAM所有的錯誤資訊列表在 /usr/include/security/_pam_types.h資料夾中
actionN可以使下列值中的某一個:
ignore:當在模組桟中使用該引數時,該模組桟的返回值不會影響應用程式獲得返回值
bad:當使用bad關鍵字,證明模組桟的返回值代表失敗;當該模組式PAM桟中第一個模組時,該模組的狀態將會在整個PAM桟中使用
die:和bad關鍵字作用相同,當使用該動作關鍵時,會立刻終止模組桟,PAM會立刻返回到呼叫的應用程式中
ok:該動作指示將PAM的返回值直接用於所有的模組桟中,即如果前一個桟返回的狀態是PAM_SUCCESS,'OK‘中的值會重寫返回值;如果返回的是失敗,則此'OK'的值不會重寫返回值。
done:和'OK'動作基本相同,但是PAM會立刻返回到應用程式當中
reset:清空所有模組桟的狀態值並以下一個模組進行驗證
N:和'OK'副作用相同,但是會跳過接下來的N個模組桟,不允許使用'0'(在某些情況是使用'0'和'OK'作用類似)
四個關鍵字required;requisite;sufficient;optional和以下語句有相同作用
required
[success=ok new_authtok_reqd=ok ignore=ignore default=bad]
requisite
[success=ok new_authtok_reqd=ok ignore=ignore default=die]
sufficient
[success=done new_authtok_reqd=done default=ignore]
optional
[success=ok new_authtok_reqd=ok default=ignore]
module-path
模組路徑可以使應用程式使用的PAM模組的檔名,也可是是預設模組的相對路徑名:/lib/security 或者/lib64/security
module-arguments
模組引數是以空格作為分隔符的列表,可以用來指定PAM特殊的動作,如果需要在引數中包含空格,需要使用"[ ]",當需要在語法中使用[]時,需使用"",如 [..[..]..]->..[..]..;語法中的任何一個錯誤都會導致驗證失敗,而且會被記錄到系統日誌中
總結
pam認證機制還是挺好用了,OpenVPN就可以呼叫這個目錄,去資料庫取使用者使用者名稱密碼進行驗證,方便管理。