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点玩游戏