linux下PAM模塊全稱是Pluggable Authentication Module for linux(可插入式授權管理模塊),該模塊被用來管理LINUX系統下應用、服務等的授權,如login,su等。
- 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
-
- 服務名稱 類型 控制 模塊路徑 模塊參數
- Linux-PAM配置語法:
- type類型共分為四個管理組
- account manager(account):提供賬戶服務驗證,如賬戶密碼是否過期,是否對該賬戶提供服務
- authentication manager(auth):負責對用戶進行認證並建立用戶憑證;通常該模塊通過交互式方法進行認證,比如你應當輸入密碼證明你是你,但並非所有的認證都是該類型
- password manager(password):進授權認證機制進行更新,如更改密碼
- session manager(session):當開啟一個新會話時,該模塊負責處理會話的准備任務,而當關閉某一個會話時,該模塊負責善后工作,如卸載該用戶home目錄
- control分為簡單和復雜兩種語法結構,簡單語法中僅有一個關鍵字,而復雜語法通過[ ]引入[value=action]選項
- 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桟
- 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特殊的動作,如果需要在參數中包含空格,需要使用"[ ]",當需要在語法中使用[]時,需使用"\",如 [..[..\]..]->..[..]..;語法中的任何一個錯誤都會導致驗證失敗,而且會被記錄到系統日志中