一.概述
1.PAM可以说是一套应用程序编程接口(API),它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后,PAM就能回报用户验证的结果(成功或失败);
2.PAM用来进行验证的数据称为模块;
二.使用
1.比如执行passwd这支程序时:
1)用户通过/usr/bin/passwd这支程序,并输入密码;
2)passwd调用PAM模块进行验证;
3)PAM模块会到/etc/pam.d/中找寻与程序(passwd)的同名配置文件;
4)根据配置文件的设置,引用相关的PAM模块逐步进行验证分析;
5)将验证结果(成功,失败以及其他信息)回传给passwd这个程序;
6)passwd程序会根据回传结果决定下一个操作。
2.配置文件
1)有三个字段,分别为:验证类别(type)、控制标准(flag)、PAM的模块与该模块的参数;
2)验证类型(type):
auth:是authentication(认证)的缩写,所以这种类型主要是用来检验用户的身份验证,这种类型通常是需要密码来检验的,所以后续接的模块是用来检验用户的身份;
account(账号):大部分是在authorization(授权),这种类型则主要是检验用户是否具有正确的权限;
session:是会议期间的意思,所以session管理的就是用户在这次登录期间PAM所给予的环境设置;
password:密码,这种类型主要用于提供验证的修订工作;
3)验证的控制标志(control flag):
required:若验证成功则带有seccess的标志,失败带有failure的标志,但无论成功失败都会继续后续的验证流程;
requisite:若验证失败则立刻回报原程序failure的标志,并终止后续的验证流程;
sufficient:若验证成功则立刻回传success给原程序,并终止后续的验证流程;若失败则带有failure标志并继续后续的验证流程,和requisite相反;
optional:显示信息
3.常用模块
pam_securetty.so:限制系统管理员只能从安全的终端机登录;
pam_nologin.so:可以限制一般用户是否能够登录主机;当/etc/nologin这个文件存在时,则所有的一般用户都无法再登录系统了;
pam_selinux,so:SElinux是针对程序来进行详细管理权限的功能;
pam_console.so:但系统出现某些问题时,或者是某些时刻你需要使用特殊的终端接口登录主机时,这个模块可以帮助处理一些文件权限的问题,让用户可以通过特殊终端接口登录系统;
pam_loginuid.so:系统账号和一般的账号UID是不同的,一般账号UID大于500才合理,所以用这个模块来规范;
pam_env.so:用来设置环境变量的一个模块;
pam_UNIX.so:可以用于验证阶段的认证功能,可以用于授权阶段的账号许可证管理;
pam_cracklib.so:可以用来检验密码的强度;
pam_limits.so:提供ulimit的功能,可以参考/etc/security/limits.conf
4.相关文件:
/etc/pam.d/*:每个程序的PAM配置文件;
/lib/security/*:PAM模块文件的实际放置目录;
/etc/security/*:其他PAM环境的配置文件;
/usr/share/doc/pam-*:详细的PAM说明文件。
参考:《鸟哥的Linux私房菜基础学习篇》第三版