pam简介
PAM:全称 Pluggable Authentication Modules,中文名 插入式认证模块。
**Linux-PAM (Linux可插入认证模块)**:是一套适用于Linux的身份验证共享库系统,它为系统中的应用程序或服务提供动态身份验证模块支持。在Linux中,PAM是可动态配置的,本地系统管理员可以自由选择应用程序如何对用户进行身份验证。PAM应用在许多程序与服务上,比如登录程序(login、su)的PAM身份验证(口令认证、限制登录),passwd强制密码,用户进程实时管理,向用户分配系统资源等。
PAM的主要特征是认证的性质是可动态配置的。PAM的核心部分是库(libpam)和PAM模块的集合,它们是位于文件夹 /lib/security/
中的动态链接库(.so)文件,以及位于 /etc/pam.d/
目录中(或者是 /etc/pam.conf
配置文件,centos6之后,没有这个文件了)的各个PAM模块配置文件。
使用如下命令判断程序是否使用了PAM:
1 | [root@host-192-125-30-59 ~]# ldd /usr/bin/passwd | grep libpam |
如看到有类似的输出,说明该程序使用了PAM,没有输出,则没有使用。
PAM的配置文件介绍
/etc/pam.d/
目录包含应用程序的PAM配置文件。例如,login程序将其程序/服务名称定义为login,与之对应的PAM配置文件为 /etc/pam.d/login
。
PAM配置文件语法格式
每个PAM配置文件都包含一组指令,用于定义模块以及控制标志和参数。每条指令都有一个简单的语法,用于标识模块的目的(接口)和模块的配置设置,语法格式如下:
1 | module_interface control_flag module_name module_arguments |
例如:
1 | [root@host-192-125-30-59 ~]# vim /etc/pam.d/system-auth-ac |
如在/etc/pam.d/password-auth-ac配置文件中(CentOS),其中一行PAM模块接口定义如下
PAM的模块类型
PAM为认证任务提供四种类型可用的模块接口,它们分别提供不同的认证服务:
1 | auth - 认证模块接口,如验证用户身份、检查密码是否可以通过,并设置用户凭据 |
单个PAM库模块可以提供给任何或所有模块接口使用。例如,pam_unix.so提供给四个模块接口使用。
PAM控制标志
所有的PAM模块被调用时都会返回成功或者失败的结果,每个PAM模块中由多个对应的控制标志决定结果是否通过或失败。每一个控制标志对应一个处理结果,PAM库将这些通过/失败的结果整合为一个整体的通过/失败结果,然后将结果返回给应用程序。模块可以按特定的顺序堆叠。控制标志是实现用户在对某一个特定的应用程序或服务身份验证的具体实现细节。该控制标志是PAM配置文件中的第二个字段,PAM控制标志如下:
1 | required - 模块结果必须成功才能继续认证,如果在此处测试失败,则继续测试引用在该模块接口的下一个模块,直到所有的模块测试完成,才将结果通知给用户。 |
PAM配置方法
可以使用 man
命令查看配置,比如要查找某个程序支持PAM模块的配置,可以使用 man
加模块名(去掉.so)查找说明。
如 man pam_unix
。(模块名可以在目录/lib/security/或/lib64/security/中找到。)
参考: