Alex_McAvoy

想要成为渔夫的猎手

Linux 中的 PAM 模块

【PAM 模块】

在过去,当想要对用户进行验证时,需要用户输入用户名、密码,然后通过自行编写的程序来判断账号密码是否匹配

因此,经常要使用不同的机制来判断账号密码,这使得一台主机上有多个不同的认证系统,可能造成账号密码不同步的验证问题

为解决这个问题,有了嵌入式模块(Pluggable Authentication Modules,PAM)机制,其是一套提供一连串验证机制的 API,只需要用户将验证阶段的需求告知 PAM 后,PAM 就能回报用户验证的结果

【PAM 调用流程】

在 Linux 中,PAM 通过一个与程序相同文件名的配置文件夹来进行一连串的认证分析需求

passwd 命令为例,当执行该命令后,其调用 PAM 的流程如下:

  1. 用户开始执行 /usr/bin/passwd 这个程序,并输入密码
  2. passwd 调用 PAM 模块进行验证
  3. PAM 模块会到 /etc/pam.d/ 中寻找与 passwd 同名的程序的配置文件
  4. 根据 /etc/pam.d/passwd 内的设置,引用相关的 PAM 模块逐步进行验证分析
  5. 将验证结果回传给 passwd 这个命令
  6. passwd 命令会根据 PAM 回传结果决定下一个操作,即通过验证或重新输入密码

【PAM 模块的配置文件】

文件信息

在 Linux 中,与 PAM 模块相关的文件信息如下表:

模块 功能
/etc/pam.d/* 每个命令的 PAM 配置文件
/lib/security/* PAM 文件的实际存放目录
/etc/security/* 其他 PAM 环境的配置文件
/usr/share/doc/pam-* 详细的 PAM 说明文件

配置信息

下面以 /etc/pam.d/passwd 为例,说明 PAM 配置文件中的内容

在 PAM 配置文件中,除第一行声明 PAM 版本外,其他任何以 # 开头的都是批注,同时,每一行都是一个独立的验证流程,可分为验证类别(type)、控制标志(flag)、PAM 模块与参数这三个字段

1.验证类别

验证类别主要分为四种:

  • auth:认证,主要用来检验用户的身份验证,该类通常需要密码来进行校验,后接的模块一般用来检验用户身份
  • account:账号,主要用来在授权时检验用户是否具有正确的权限
  • session:会话,管理用户在本次登录期间 PAM 所给予的环境设置,通常用于记录用户登录与注销信息
  • password:密码,主要用于修改密码时提供验证

2.控制标志

控制标志,简单来说是验证通过的标准,这个字段用于管控该验证的放行方式,主要分为四种:

  • required:验证若成功,则带有 success 的标志;若失败,则带有 failure 的标志,但无论成功与失败,都会继续后续的验证流程,有利于数据的日志写入
  • requisite:验证若成功,则带有 success 的标志,并继续后续验证流程;若失败,则立刻回报原程序带有 failure 的标志,并终止后续验证流程
  • sufficient:验证若成功,则立刻回报原程序带有 success 的标志,并终止后续验证流程;若失败,则带有 failure 的标志,并继续后续验证流程
  • optional:带有该控制标志的模块,大多用于显示信息

PAM 控制标志所造成的回报流程如下图:

3.PAM 模块与参数

该行验证过程中,所采用的 PAM 模块与参数,具体的 PAM 模块位于 /lib/security/*

感谢您对我的支持,让我继续努力分享有用的技术与知识点!