pam用戶認證機制:
App->username:password
root->nsswitch.conf->passwd:files 找用戶名
'123'->nsswith.conf->shadow:files 輸入密碼獲取加密以後的密碼
auth:123->md5(salt)->compare 把密碼加上salt後開始和獲取到的密碼進行比較
認證本身也可以不用藉助名稱解析服務去查找用戶原始存放密碼
Authentication
md5:/etc/shadow
mysql
ldap
nis
kerberos
APP->pam->Authentication
64位系統庫文件存放位置/lib,/lib64
32位系統庫文件存放位置在/lib
[root@localhost ~]# ls /lib64/security/
pam_krb5.so kerberos認證
pam_unix.so 實現傳統認證的一個庫
pam_winbind.so 到win的AD中驗證用戶
pam_mysql.so
pam_ldap.so
[root@localhost ~]# vim /etc/pam.d/login 配置文件定義login在認證用戶使用哪一種機制
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth ->檢查用戶輸入的密碼是否匹配 include system-auth
account ->帳號是否有效 required pam_nologin.so
account include system-auth
password ->檢查用戶修改密碼時,是否符合要求 include system-auth
# pam_selinux.so close should be the first session rule
session -> 會話,例如定義最多隻能20分鐘 required pam_selinux.so close
pam的配置文件:
/etc/pam.conf 主配置文件(默認不存在)
Service(服務的文件名,必須小寫) type control module-path module-arguments
/etc/pam.d/*
type(類型) control(多個條目之間怎麼建立關係) module-path(模塊) [module-arguments](模塊參數)
[root@localhost pam.d]# vim other 定義默認規則
type:
auth 檢查用戶輸入的密碼是否匹配
account 帳號是否有效
password 檢查用戶修改密碼時,是否符合要求
session 會話,例如定義最多隻能20分鐘
ok:通過,繼續檢查
done:通過,返回最終結果
bad:失敗,繼續檢查
die:失敗,返回這種結果
ignore 忽略
reset忽略此前的所有結果(之前沒有被一票通過)
control:
required 通過則繼續檢查,不通則失敗,繼續檢查下一條
[success=ok new_authtok_reqd=ok ignore=ignore defaul=bad]
requisite 必須得通過,通過後繼續檢查下一條,如果不能通過則不通過
[success=ok new_authtok_reqd=ok ignore=ignore defaul=die]
sufficient 通過以後就直接通過,沒通過就繼續查看下一條
[success=done new_authtok_reqd=done defaul=ignore]
optional 可選的,通過與否無所謂
[success=ok new_authtok_reqd=ok defaul=ignore]
include 讓其他文件決定
module-path:
默認爲相對路勁
絕對路徑爲/lib64
pam_unix模塊是到passwd中驗證用戶時用到的
參數:
nullok 密碼允許爲空
shadow 用戶密碼驗證基於shadow認證
md5用戶加密方式
try_first_pass 提示輸入密碼之前,先嚐試此前其他模塊裏輸入的密碼
use_first_pass 直接輸入密碼
use_authtok 在某個與密碼相關的驗證模塊後使用此選項,可以強制用戶使用此前的密碼
pam_permit允許訪問
pam_deny拒絕訪問
pam_cracklib.so依據字典中所包含的數據來檢查密碼,檢查到以後則不通過,主要用於改密碼的時候
參數:
minlen最短長度
difok驗證密碼和此前是否相同
dcredit=N 包含至少幾個數字
ucredit=N 要包含幾位大寫字母
lcredit=N 包含幾位小寫字母
ocredit=N 包含幾位特殊字符
retry=N 最多嘗試多少次
pam_shells 強制用戶使用/etc/shells
pam_securetty 限定管理員只能從/etc/securetty裏的終端登陸
pam_listfile 根據某個文件來驗證用戶帳號是否合法
參數:
item=[tty|user|rhost|ruser|group|shell]
sense=[allow|deny]
file=/path/filename
onen=[succeed|fail]
[apply=[user|@group]]
[quiet]
例如:只讓user組訪問
[root@localhost pam.d]# vim login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth 主要是交給system-auth認證
account required pam_nologin.so
system-auth -> system-auth-ac
[root@localhost pam.d]# cp system-auth-ac system-auth-ac.bak
[root@localhost pam.d]# vim /etc/pam_allowgroups
user
[root@localhost pam.d]# vim system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth required pam_listfile.so item=group sense=allow file=/etc/pam_allowgroups 新增這行
auth sufficient pam_fprintd.so
pam_rootok 只要UID=0的用戶就直接通過
pam_limits 用戶資源限定模塊
/etc/security/limits.d/*.conf的文件
vim /etc/security/limits.conf 配置文件
#<domain>表示對誰生效 <type>限制的類型 <item>對那種資源限制 <value>限制值爲多大
#
#Where:
#<domain> can be:
# - an user name 可以是一個用戶名
# - a group name, with @group syntax 可以是一個組名@group
# - the wildcard *, for default entry *設定默認所有的
# - the wildcard %, can be also used with %group syntax, %限定最大登陸次數
#<type> can have the two values:
# - "soft" for enforcing the soft limits soft軟限制,普通用戶只能使用ulimit命令調整自己的軟限制
# - "hard" for enforcing hard limits hard硬限制
#<item> can be one of the following:
# - core - limits the core file size (KB) 所能夠打開的核心文件大小
# - nofile - max number of open files 所能夠打開的最多文件數
# - rss - max resident set size (KB) 所能夠使用多少內存
# - cpu - max CPU time (MIN) 所能夠使用的最多cpu時間
# - nproc - max number of processes 用戶最多能運行進程的個數
# - as - address space limit (KB) 地址空間限制
#<domain> <type> <item> <value>
#* soft core 0 0表示不做限制
#@student - 軟硬都限制 maxlogins 4 最多允許登陸4次
ulimit命令
-n修改所能夠打開的最大文件數
-u修改用戶所能夠打開的最多的進程個數
pam_env.so設置或撤銷環境變量
[root@localhost ~]# vim /etc/security/pam_env.conf
pam_wheel.so 可以限定只有wheel組的用戶可以su到root
[root@localhost pam.d]# vim su
#auth sufficient pam_wheel.so trust use_uid
#auth required pam_wheel.so use_uid
建立wheel組 啓用這兩項即可
pam_lastlog.so 是否顯示用戶上次登錄信息的
pam_issue.so 登錄時是否顯示 /etc/issue中的信息
pam_motd.so 登錄時是否顯示motd中的內容 /etc/motd
pam_succeed_if_so 檢查一個用戶的ID號,如大於500可以登錄,等
pam_time.so 根據時間來限定登錄
/etc/security/pam_time.conf
login ; tty* &!ttyp* ;!root ; !Al0000:2400
GAMES ; * ; !root ;!Wd0000-2400 |Wk1800-0800 非root用戶只能在非wd工作日的0點到24點和週末的18點到24點玩遊戲