一、什么是PAM?
可插入认证模块(PAM)结构为系统管理员提供通过可插入模块将多个认证机制结合进现有系统的能力。支持使用 PAM 的应用程序能够不更改现有的应用程序就 插入到新的技术中。这种灵活性允许管理员执行以下操作:
*为应用程序选择系统中的任意认证服务
*对给定的服务使用多个认证机制
*不修改现有的应用程序而添加新的认证服务模块
*使用以前输入的密码来用于多模块认证
PAM 结构由库、可插入模块以及配置文件组成。PAM 库实现了 PAM 应用程序编程接口(API)并为管理 PAM 事务和调用在可插入模块中定义的 PAM 服务编程接口(SPI)提供服务。可插入模块根据调用服务及其在配置文件中的项而由库动态装入。成功不但取决于可插入模块,也取决于为服务所定义的行为。通过堆栈的概念,可以将服务配置为通过多个认证方法认证。如果得到支持,那么模块也可配置为使用先前提交的密码,而不是提示另外输入。
二、在AIX 5.3中使用PAM作为默认的验证机制
在AIX 5.3中,管理员可以选择使用AIX标准的验证机制或PAM对所有用户进行身份验证。这是由/etc/security/login.cfg文件中usw项目的auth_type子项的设置来决定的。将auth_type设置为PAM_AUTH则AIX操作系统使用PAM对所有用户进行身份验证。
三、PAM配置文件的语法
对于系统管理员来说,使用PAM最大的好处就是可以通过编辑PAM配置文件来调整身份身份验证策略。
/etc/pam.conf 配置文件由每个 PAM 模块类型的服务项组成,并通过已定义的模块路径提供路由服务。此文件中的项由以下空白分隔的字段组成:
service_name module_type control_flag module_path module_option
其中:
service_name 指定服务的名称。关键字 OTHER 用于定义项中没有指定的应用程序所用的缺省模块。
module_type 为服务指定模块类型。有效模块类型是 auth、aclearcase/" target="_blank" >ccount、session 或 password。
control_flag 为模块指定堆栈行为。支持的控制标志是 required、sufficient 或 optional。
module_path 指定实现服务功能的库对象的路径名。module_path 项应该从根(/)目录开始。如果该项不以 / 开始,那么会将 /usr/lib/security 预设为文件名。
module_option 指定能够发送到服务模块的选项列表。该字段的值取决于在 module_path 字段中定义的模块支持的选项。
所有的先行字段对于每个项都是必要的,除了 module_options 字段,它是可选的。PAM 库会忽略格式错误的项以及 module_tyep 或 control_flag 字段具有无效值的项。行起始以数字符号(#)开头的项也会被忽略,因为这表示注释。
通过使用相同的 module_type 字段创建多个项在配置文件中实现堆栈。以文件中列出的顺序调用模块,并由每个项指定的 control_flag 字段确定最终结果。control_flag 字段的有效值和在堆栈中的相应的行为如下:
required 所有堆栈中 required 模块必须通过才能得到成功的结果。如果一个或多个 required 模块失败,那么会尝试堆栈中所有 required 模块,但返回第一个失败的 required 模块的错误。
sufficient 如果一个标志为 sufficient 的模块成功,之前没有 required 或 sufficient 的模块失败,那就会忽略堆栈中所有剩余的模块,并返回成功。
optional 如果堆栈中没有模块是 required,并且没有 sufficient 模块成功,那么至少有一个对于服务的 optional 模块必须成功。如果在堆栈中的另一个模块成功了,那么就会忽略 optional 模块中的失败。
以下是 /etc/pam.conf 文件片断:
login auth required /usr/lib/security/pam_aix
login auth required /usr/lib/security/pam_verify
login auth optional /usr/lib/security/pam_test use_first_pass
su auth sufficient /usr/lib/security/pam_aix
su auth required /usr/lib/security/pam_verify
此片断中包含登录服务的三个项。将 pam_aix 和 pam_verify 指定为 required 之后,用户必须输入两个密码用于认证,而且用户要认证的话两个密码必须都成功。pam_test 模块的第三个项是可选的,它的成功或失败不会影响用户是否能够登录。pam_test 模块的 use_first_pass 选项允许使用以前输入的密码,而不是提示输入一个新的密码。
su 命令的运行方式使得如果 pam_aix 成功了,那么认证也成功了。如果 pam_aix 失败了,那么必须通过 pam_verify 方可成功认证。