PAM: Pluggable Authentication Modules
插件式鑑別模塊,由Sun提出的一種認證機制。它通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程序,同時也便於向系統中添加新的認證手段。
- PAM體系結構
app1 app2 app3 應用層
|
PAM-API <=> /etc/pam.d 接口層
|
mod1 mod2 mod3 模塊層
2.相關文件:
/usr/lib/libpam.so.* ## 核心庫
/etc/pam.d/* ## PAM各個模塊的配置文件
/lib/security/pam_*.so ## 可動態加載的PAM模塊
/lib64/security/pam_*.so
- PAM配置文件格式:
Module-type Control-flag Module-path Module-arguments
3.1 Module-type 驗證類型
1) auth 用戶身份驗證,提示輸入用戶名和密碼
2) account 對用戶進一步驗證。用戶是否過期、權限多大,限制當前可用資源等
3) password 對密碼精確控制。密碼使用期限,重複輸入的次數,密碼鎖定後的解禁期限等
4) session 對每個會話進行跟蹤和記錄。登錄用戶名,登錄時間,次數等
3.2 Control-flag 控制驗證過程中動作和返回結果方式
1) required 當驗證失敗時仍繼續進行下面的驗證,它會返回一個錯誤信息,但是由於不停止後面的驗證過程,因此用戶不知道哪項規則驗證失敗
2) requisite 與required大體相似,但只要某項規則驗證失敗則結束整個驗證過程,並返回一個錯誤。它能夠防止一些暴力猜接密碼工具,但由於返回信息給用戶,因此可能將系統用戶信息透露給攻擊者
3) sufficient 只要有一項規則驗證通過,將會立即終止後面的所有驗證。不論前的required是否成功,它依然被忽略,然後通過驗證
4) optional 驗證成功與否不重要,所有結果都忽略。session常用
3.3 Module-path 驗證模塊
3.4 Module-arguments 模塊參數
驗證模塊庫
1. pam_access 一般與account驗證類型一起使用。提供基於用戶名、主機名、域名,公網IP地址或網絡號,已經非網絡登錄時的tty名稱訪問控制。
vi /etc/security/access.conf
permission : users/groups : origins
permission:”+”允許,”-“禁止
users/(groups):ALL任何人
origins: 非網絡登錄的tty名稱、主機名、域名(以“.”開始)、主機地址、網絡號(以“.”結束)、帶有子網掩碼的公網IP地址,以及ALL(表示任何主機)和LOCAL只要不包含“.”的所有字符)。還可以使用EXCEPT操作符來表示除…之外
Disallow non-root logins on tty1
-:ALL EXCEPT root:tty1
Disallow console logins to all but a few accounts.
-:ALL EXCEPT wheel shutdown sync:LOCAL
root should get access from network 192.168.201.
: root : 192.168.201.
- pam_limit 通常與session驗證類別一同使用。用來限制用戶在會話過程中對系統資源的使用,即使UID=0的用戶也受它的限制。此模塊使用一個獨立的配置文件來設置對系統資源的限制情況
vi /etc/security/limits.conf
- pam_limit 通常與session驗證類別一同使用。用來限制用戶在會話過程中對系統資源的使用,即使UID=0的用戶也受它的限制。此模塊使用一個獨立的配置文件來設置對系統資源的限制情況
domain: username、@group、“*”任何用戶、“%”通配符來只限制maxlogins,並可以採用%group的語法格式。
type: soft:允許用戶所使用的系統資源在設定值上下浮動
hard:對系統資源的使用率不能超過設定值
item:
nproc: max number of processes
nofile: max number of open files
oracle - nproc 16384
oracle - nofile 65535
* soft nofile 15000
* hard nofile 65536
pam_time 通常與account驗證類型一起使用,不提供驗證服務,只用來限制用戶在指定的日期、時間及終端線路上對系統或特定運用程序進行訪問
vi /etc/security/time.confpam_unix 適用所有的驗證類型
auth: 驗證用戶密碼的有效性。參數有debug、audit、use_first_pass、try_first_pass、nullok和nodelay
account: 執行建立用戶帳號和密碼狀態的任務,然後提示用戶修改密碼,用戶採用新密碼後才提供服務之類的任務。參數有debug、audit
password: 完成讓用戶更改密碼的任務。參數有debug、 audit、 nullok;、not_set_pass、use_authtok、try_first_pass、use_first_pass、md5、bigcrypt、shadow、nis
session: 僅僅完成記錄用戶名和服務名到日誌文件的工作。無參數
參數說明:
audit 比debug更多診斷調試
nullok 允許空密碼
nodelay 取消用戶驗證失敗後,系統錯誤提示延時(2s)
try_first_pass 防止用戶新設定的密碼與舊密碼相同
use_authok 強制用戶使用前面堆疊驗證模塊提供的密碼
pam_deny 禁止所有的訪問
pam_permit 允許所有的訪問
pam_security 只對root用戶有影響。當root用戶登錄時,會參考/etc/securetty目錄中的控制終端列表,來保證root用戶不會從不安全的終端登錄。它一般與auth驗證類型一現使用。
pam_nologin 如果/etc/nologin文件存在,禁止所有的登錄,一般與auth和account驗證類型一同使用。
pam_wheel 只有加入到了一個wheel group中的用戶,並且密碼有效,才能訪問指定的服務或系統。
pam_cracklib 用來檢查密碼是否違反密碼字典,只與password驗證類型一起用
通過插入password堆 棧,爲特殊的應用提供可插入式密碼強度性檢測。 它的工作方式就是先提示用戶輸入密碼,然後使用一個系統字典和一套規則來檢測輸入的密碼是否不能滿足強壯性要求。密碼的強度檢測分二次進行,第一次只是檢測密碼是否是提供的對比字典中的一部分,如果檢測結果是否定的,那麼就會提供一些附加的檢測來進一步檢測其強度,例如檢測新密碼中的字符佔舊密碼字符的比例,密碼的長度,所用字符大小寫狀況,以及是否使用了特殊字符等
debug
retry=N 重試次數
difok=N 新舊密碼不同的字符數
minlen=N 密碼最小長度
dcredit=N 最大數字個數。N=2,最多2個數字;N=-2,至少2個數字
lcredit=N 最大小寫字母個數
ucredit=N 最大大寫字母個數
ocredit=N 最大特殊字符個數
minclass=N 密碼最少包含的字符種類(d, l, u, o)
dictpath=/path/to/dict 密碼字典路徑pam_passwdqc: Password quality-control
mix=N 口令最小長度,默認mix=disabled
max=N 口令最大長度,默認max=40
passphrase=N 口令中單詞最少個數,默認passphrase=3, 若爲0則禁用該功能
match=N
similar=permit|deny 新舊口令是否能相似
random=N 隨機口令默認長度,默認random=42,若爲0禁用該功能
enforce=none|users|everyone 約束範圍
retry=N 口令輸入允許重試次數,默認retry=3