PAM是关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开
提供了对所有服务进行认证的中央机制,适用于login,远程登录,su等应用程序中
API(使用者)——》PAM(平台)——》SPI(提供者)
相关文件:
模块文件目录:/lib64/security/*.so
环境相关的设置:/etc/security
主配置文件:/etc/pam.conf,默认不存在
为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
注意:如/etc/pam.d存在,/etc/pam.conf将失效
PAM认证顺序:Service(服务)——》PAM(配置文件)——》pam_*.so
PAM认证首先要确定那一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
通用配置文件/etc/pam.conf格式
应用程序 类型 控制 模块路径 参数
专用配置文件/etc/pam.d/* 格式
type control module-path arguments
说明:
应用程序 telnet,login,ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其他服务
type(module type)
control PAM库该如何处理与该服务相关的PAM模块的成功或失败情况
module-path 用来指明本模块对应的程序文件的路径名
arguments 用来传递给该模块的参数
type(module type):
Auth 账号的认证和授权
Account 与账号管理相关的非认证类的功能
Password 用户修改密码是密码复杂度检查机制等功能,如:限制、允许用户对某个服务的访问时间
Session 用户获取到服务之前或使用服务完成之后需要进行一些附加的操作,如:记录打开、关闭数据的信息,监视目录等
-type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用
control:
PAM库如何处理与该服务相关的PAM模块成功或失败情况
简单方式实现:一个关键词实现
required:一票否决,不符合后继续执行后续,全部执行完毕后显示结果
requisite:一票否决,不符合后直接显示结果
suffcient:一票通过
optional:可选,它的成功与否不会对身份认证起关键作用
include:调用其他的配置文件定义的配置信息
复杂方式实现:使用一个或者多个“status=action”
[status1=action1 status2=action2...]
status:检查结果的返回状态
action:采取行为ok,done,die,bad,ignore,reset
ok 模块通过,继续检查
done 模块通过,返回最后结果给应用
die 结果失败,返回失败结果给应用
bad 结果失败,继续检查
ignore 结果忽略,不影响最后结果
reset 忽略已经得到的结果
module-path:
相对路劲
/lib64/security目录下的模块可使用相对路径
如:pam_shells.so,pam_limits.so
绝对路径
模块通过读取配置文件完成用户对系统资源的使用控制
/etc/security/*.conf
注意:修改PAM配置文件将马上生效
建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误