欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 【Linux】what is pam?PAM模块学习笔记

【Linux】what is pam?PAM模块学习笔记

2025/4/18 12:30:53 来源:https://blog.csdn.net/qq_45800517/article/details/147032551  浏览:    关键词:【Linux】what is pam?PAM模块学习笔记

文章目录

  • 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为例:

  1. 用户执行/usr/bin/passwd程序,输入密码;
  2. passwd调用pam模块进行验证
    1. pam模块到/etc/pam.d/目录下,找与程序passwd同名的配置文件;
    2. 根据配置文件/etc/pam.d/passwd内的设置信息,引用相关pam模块逐步进行验证分析(PAM用来进行验证的数据称为模块modules。);
    3. 将验证结果返回给程序passwd;
  3. 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拒绝连接。
  • 授权阶段:account
    • 先经过pam_nologin.so判断/etc/nologin是否存在,若存在则不允许一般用户登录;
    • 然后以pam_unix.so和pam_localuser.so进行账号管理;
    • 再以pam_succeed_if.so判断UID是否合法,合法则不记录登录信息;
    • 最后以pam_permit.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模块学习总结 - 散尽浮华 - 博客园

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词