文章目录
- 1. pam模块简介
- 2. pam验证的工作流程
- 3. pam模块配置文件
- 3.1 配置文件的格式
- 3.1.1 验证类别type
- 3.1.2 验证的控制标识 control flag
- 3.1.3 pam模块
- 4. login的PAM验证机制流程
- 5. 补充:其他pam相关文件
- 6. 参考内容
1. pam模块简介
PAM: Pluggable Authentication Modules, 插入式验证模块。
可以将PAM理解为一套应用程序编程接口,PAM提供一系列的验证机制,用户将验证阶段的需求告知pam,pam给用户返回验证的结果。
PAM以一个独立的API存在,任何程序都可以向PAM发送验证要求的通知,PAM经过一系列的验证后将验证结果返回给程序。
2. pam验证的工作流程
PAM通过一个与调用程序同名的配置文件来完成一系列的认证分析需求。
以passwd命令调用PAM为例:
- 用户执行
/usr/bin/passwd
程序,输入密码; - passwd调用pam模块进行验证
- pam模块到
/etc/pam.d/
目录下,找与程序passwd同名的配置文件; - 根据配置文件
/etc/pam.d/passwd
内的设置信息,引用相关pam模块逐步进行验证分析(PAM用来进行验证的数据称为模块modules。); - 将验证结果返回给程序passwd;
- pam模块到
- passwd程序根据pam返回的结果决定下一个操作。
3. pam模块配置文件
在章节2的验证流程中,可知验证流程的重点是:
/etc/pam.d/
下的配置文件;- 配置文件所调用的PAM模块。
章节3主要讨论配置文件的格式和内容含义。
3.1 配置文件的格式
配置文件的每一行可分为三个字段,分别代表的含义:
- 验证类别type;
- 控制标准flag;
- PAM的模块与该模块的参数。
3.1.1 验证类别type
验证类别主要分为4种:(这四个验证的类别通常是有顺序的)
- auth
- 这种类别主要用来验证用户身份;
- auth类别通常需要密码来检验,所以后边儿接的模块是用来验证用户的身份。
- account
- account类别大部分用于进行授权;
- 这种类别主要检验用户是否具有正确的权限。
- session
- session,会话期间的意思,session管理的是用户此次登录(或使用这个命令)期间,PAM所给予的环境设置。
- session类别通常用于记录用户登录和注销时的信息。
- password
- password类别主要在提供验证的修订任务,例如修改密码。
3.1.2 验证的控制标识 control flag
control flag是验证通过的标准,该字段用于管控该验证的控制方式。主要分为4种:
- required
- 验证成功则带有success标志;失败则带有failure标志。
- 不论验证成功还是失败都会继续后续的验证流程。
- requisite
- 验证失败则给原程序返回failure标志,并终止后续验证流程;
- 验证成功则给原程序返回success标志,并继续后续验证流程。
- sufficient
- 验证成功则立即给原程序返回success标志,并终止后续验证流程;
- 验证失败则带有failure标志,并继续后续验证流程。
- optional
- 该模块控件大多只在显示信息,而不用在验证方面。
3.1.3 pam模块
常用的pam模块:
- pam_securetty.so
- 限制系统管理员(root)只能从安全的终端登录(tty:本地中断;pts:远程终端);
- 安全的终端设置在文件
/etc/securetty
中。
- pam_nologin.so
- 该模块可限制一般用户能否登录主机;但该模块对root以及已经登录系统的一般账号无影响。
- 若文件
/etc/nologin
存在,则一般用户均无法再登录系统了(与文件/etc/nologin.txt
不同)
- pam_loginuid.so
- 该模块用来验证用户的UID是否符合规范,一般要求账号的UID大于1000。
- pam_env.so
- 用来设置环境变量的一个模块;
- 若需额外设置环境变量,可参考文件
/etc/security/pam_env.conf
的详细说明。
- pam_unix.so
- 该模块功能很丰富,可用在验证阶段的认证功能、授权阶段的账号许可证管理、会话阶段的日志文件记录等。
- pam_pwquality.so
- 该模块用来检验密码的强度,包括密码是否在字典中、密码连续输错几次就断掉连接等功能;
- 文件
/etc/security/pwquality.conf
可以额外指定默认值,较容易处理修改。
- pam_limits.so
- 可参考文件
/etc/security/limits.conf
- 可参考文件
4. login的PAM验证机制流程
- 验证阶段:auth
- 先经过pam_securetty.so判断,若用户为root,则会参考
/etc/securetty
的设置; - 之后经过pam_env.so设置额外的环境变量
- 然后通过pam_unix.so检验密码,若通过则返回login程序;
- 若不通过,则通过pam_succeed_if.so判断UID是否合规,不合规返回失败;否则以pam_deny.so拒绝连接。
- 先经过pam_securetty.so判断,若用户为root,则会参考
- 授权阶段:account
- 先经过pam_nologin.so判断
/etc/nologin
是否存在,若存在则不允许一般用户登录; - 然后以pam_unix.so和pam_localuser.so进行账号管理;
- 再以pam_succeed_if.so判断UID是否合法,合法则不记录登录信息;
- 最后以pam_permit.so允许该账号登录。
- 先经过pam_nologin.so判断
- 密码阶段:password
- 先以pam_pwquality.so设置密码仅能试错3次;
- 然后以pam_unix.so通过sha512、shadow等功能进行密码检验,若通过则返回login程序;若不通过则以pam_deny.so拒绝登录。
- 会话阶段:session
- 先以pam_selinux.so暂时关闭SELinux;
- 使用pam_limits.so设置好用户能操作的系统资源;
- 登录成功后开始将相关信息记录在日志中;
- 以pam_loginuid.so规范不同的UID权限;
- 开启pam_selinux.so功能
总结:根据验证类别type,先由login设置的值去查看,若出现include system-auth
则转到system-auth
文件中的相同类别,获取额外的验证流程,然后到下一个验证类别,最终将所有的验证跑完,结束此次PAM验证。
5. 补充:其他pam相关文件
/etc/security/limits.conf
日志文件:/var/log/secure
和/var/log/messages
PAM模块都会将数据记录在/var/log/secure
文件中,若发生任何无法登录或是产生错误时,可查看日志定位问题。
6. 参考内容
Linux下PAM模块学习总结 - 散尽浮华 - 博客园