插入式验证模块 (Pluggable authentication module, PAM) 支持验证机制。应用程序可以利用这个模块来在 AIX® 内实现验证机制。PAM 提供了不同的服务模块,每个模块支持不同的功能。使用这些 PAM 服务模块,可在 AIX 内启用具有验证、帐户、密码和会话管理机制的 PAM。

Uma Chandolu, 软件工程师, IBM

http://www.ibm.com/developerworks/i/p-uchandolu.jpgUma M. Chandolu 是一名 AIX 上的开发支持专家,拥有 6 年多在 AIX 环境中工作的大量实践经验,擅长 AIX 系统管理和其他子系统。他拥有与客户合作和处理客户关键型情景的经验。他曾是 “IBM developerWorks 投稿作者”。


developerWorks 投稿作者

2011 年 9 月 13 日

简介

在当前环境内管理用户和控制用户的访问是一项极具挑战性的任务。AIX 提供了加载式验证模块 (loadable authentication module, LAM) 来处理用户的身份和验证 (I & A)。用户可以使用 AIX 加载式验证模块框架 (LAMF) 接口编写自己的 LAM 模块。与此类似,AIX 提供了 PAM 来进行验证。用户可以将 PAM 服务集成到其本地应用程序内。本文概括了 AIX 中的 PAM、PAM 库 API 的使用、AIX 自带的 PAM 服务模块以及 LAM 和 PAM 之间的差异。

PAM 框架支持将多个验证机制集成到现有的验证机制中。在 AIX V5.3 版之前,PAM 模块是作为 LAM 模块提供的,用于处理本地应用程序。

如下的图 1 给出了 AIX 中的 PAM 的概括。

图 1. 图 1. PAM 概括的图示
PAM 概括的图形展示

PAM 的概述

PAM 框架由 3 部分组成:

  • PAM 库:PAM 接口库 /usr/lib/libpam.a 包含 PAM API。这些 API 可充当所有 PAM 应用程序的通用接口。
  • PAM 配置文件:/etc/pam.conf 文件包含用于每个模块类型的服务项。应用程序与 PAM 服务模块一同注册于该文件下。PAM 库使用这个文件与 PAM 服务模块进行交互。
  • PAM 模块:PAM 服务模块位于 /usr/lib/security 目录下。这些模块允许在一个系统上联合或独立使用多个验证机制。

AIX 中的 PAM

自 AIX V5.1 Ml01,PAM 库 /usr/lib/li bpam.a 开始作为 AIX 版本的一部分提供。而且,PAM 库目录下还包含一组标准的 PAM API;不过,已有的验证应用程序并不能使用此 PAM。

在 AIX V5.2 中,PAM 受到全面支持。PAM 模块作为一个 LAM 模块出现在 /usr/lib/security/PAM 中。/etc/pam.conf 文件也与该 pam_aix 服务模块一起受到支持。应用程序可以使用此 PAM LAM 模块进行验证。此 PAM 模块需要在 /usr/lib/security/methods.cfg 文件中与 LAM 模块一同定义,以便进行验证和识别。

从 AIX V5.3 及更高版本开始,PAM 被完全集成到所有 AIX 本地应用程序和命令中。PAM LAM 模块也不再是必需的。此外,PAM 还提供了一个默认的 /etc/pam.conf 文件以及额外的 PAM 服务模块。通过在 /etc/security/login.cfg 文件中将 auth_type 属性更改为 PAM_AUTH,还可以对整个系统启用 PAM。

表 1. PAM 和 LAM 之间的差异
LAMPAM
执行验证和识别。只执行验证。
整个系统使用单一的验证服务。可以将系统上的一个应用程序配置成使用多个验证服务。
LAM 模块需要在 /usr/lib/security/methods.cfg 文件中定义。 PAM 使用 /etc/pam.conf 文件来定义应用程序服务。
LAM API 在 AIX 安全库下定义。PAM API 在 /usr/lib/libpam.a 库下定义。

PAM 库

PAM 库提供了一组应用程序编程接口 (API)。这些 API 使得应用程序能够调用 PAM 模块并将信息传递给 PAM 模块。

下表提供了对某些必需 API 的描述:

API描述
pam_start建立新的用于用户验证的 PAM 会话。初始的 PAM 信息必须通过这次调用进行设置。
pam_authenticate通过 /etc/pam.conf 文件中定义的 PAM 模块对用户信息进行验证。
pam_acct_mgmt执行各种检查来验证用户的帐户。这个例程检查用户帐户和密码的到期失效细节。应该基于 pam_authenticate 的返回类型使用这个例程。
pam_setcred更改或移除用户验证所需的凭证。这个例程主要用来更改当前的 PAM 会话凭证,比如,如果某个用户想要从一个帐户转到另一个帐户(类似 su 或 swrole 命令)。
pam_open_session为经过验证的 PAM 用户创建一个新会话。
pam_end_session关闭当前开放的 PAM 用户会话。
pam_end结束现有的 PAM 验证会话。

/usr/lib/libpam.a 库提供了其他几个 API。请参阅 参考资料 部分,以获得关于 PAM 库 API 的更多信息。

参看 下载 部分,获得使用上述 API 的示例程序。

/etc/pam.conf 文件的元素

/etc/pam.conf 文件用每个 PAM 模块类型的应用程序服务项进行配置。必须在具有特定控制标志的有效模块类型下定义应用程序服务。

/etc/pam.conf 文件的格式为:

 <service_name> <module_type><control_flag><module_path>[module_options] 
 
 
	#Authentication Management     
    
	login   auth    required        pam_aix   
	telnet  auth    required        pam_aix  
	
	#Account Management 
    
	login   account required        pam_aix 
	telnet  account required        pam_aix 
	
	#Password Management 
    
	login   password  required      pam_aix 
	telnet  password  required      pam_aix 
	
	#Session Management 
	login   session required        pam_aix 
	telnet  session required        pam_aix

service_name 代表的是需要 PAM 服务的应用程序名。如果没有在 /etc/pam.conf 文件内指定该应用程序名,则会使用 OTHER 关键字来遵从 PAM 模块。

Module_type 指定了服务的模块类型。有效的模块类型为

  • Authentication Management - auth
  • Account Management - account
  • Password Management - password
  • Session Management - session
类型描述
auth对用户进行验证并设置、刷新或销毁凭证。
account在使用验证模块确认身份后,确定用户帐户和后续访问的有效性。
password执行密码修改和相关的属性管理。
session初始化和终止用户会话。

Control_flag 指定模块的堆栈行为。有效的标志包括 required、requisite、sufficient 和 optional。

标志描述
required一个堆栈内的所有 required 模块都通过了才能获得一个成功的结果。如果出现一个或多个模块故障,那么所有 required 模块都被视为是不成功的,但是只返回来自第一个发生故障的 required 模块的错误。
requisite与 required 类似,只是如果一个 requisite 模块失败,那么它会立即返回来自 required 或 requisite 模块的第一个故障代码。
sufficient如果一个模块被标志为 sufficient,且之前没有 required 或 sufficient 模块故障,那么堆栈内的所有剩余模块都会被忽视并会返回成功结果。
optional忽略结果,除非没有 required 模块和 sufficient 模块获得成功结果。

Module_path 指定系统上的 PAM 服务模块路径。路径可以是绝对路径,也可以只有模块名称。如果指定的是绝对路径,那么它会假设将 /usr/lib/security 用于 32 位应用程序,将 /usr/lib/security/64 用于 64 位应用程序。

Module_options 指定了受 PAM 服务模块支持的一系列选项。常见的一些选项有:

选项描述
debug将调试信息记录到 syslog。
nowarn不显示错误消息。
try_first_pass尝试之前输入的密码。如果失败,则提示输入一个新密码。
use_first_pass使用之前输入的密码,且不提示输入新密码。

PAM 模块

PAM 服务模块是一组动态可加载对象,PAM-SPI (PAM-service provider interface) 可以调用它来提供某种类型的用户验证。AIX 目前提供了一些 PAM 服务模块,至少提供了上述这些模块类型中的一种。

所提供的全部 PAM 服务模块的快速参考表:

模块名称描述
pam_aix执行 AIX 风格的验证。
pam_allow为所有调用返回 PAM_SUCCESS。
pam_allowroot如果调用用户是 root (uid = 0) 则返回 PAM_SUCCESS。
pam_ckfile提供类似 /etc/nologin 的检查。
pam_permission提供增强了的 /etc/ftpusers 类型检查。
pam_prohibit为所有调用返回一个 PAM 故障代码。
pam_rhosts_auth执行 rhosts 验证。

pam_aix 模块支持验证、帐户、密码和会话管理模块类型。可以在 /etc/pam.conf 文件中配置这个模块,以验证用户在所有数据库上的身份凭证。pam_aix 模块定义了一些 SPI 函数。这些函数可与 AIX 安全性函数进行内部映射,以处理不同目录下的用户管理任务。

如果指定的 PAM 处理是有效的,那么 pam_allow 模块就会简单地为所有调用返回 PAM_SUCCESS。对于 pam_sm_authenticate,还必须提供相关的用户。系统管理员应该慎用这个模块,因它没有提供真正的验证。在大多数情况下,这个模块只是用于调试目的。

pam_allowroot 模块要求调用应用程序的实际用户 ID;它应该是 0 (zero)。如果验证中的用户的 UID 为零,那么只有 pam_allowroot 模块会返回 PAM_SUCCESS。通常应该将这个模块用作一个 sufficient 模块,以便允许 root 用户绕开验证或帐户管理检查。

如果主目录不存在,pam_mkuserhome 模块会在用户登录时自动创建用户的主目录。在使用会话模块的情况下,应将这个模块用作可选模块。它不提供任何其他的模块类型。如果主目录已经存在,或者已经在系统上成功创建它,就会返回 PAM_SUCCESS。

pam_permission 模块会检查是否存在选择性指定的文件,然后读取此文件来确定某个用户/组是否被赋予/拒绝访问。使用这个模块时,Authentication 和 Account Management 模块类型均可受到支持。这个模块支持如下选项:

  • file

    指定文件名的绝对路径,以允许用户和组使用它。如果没有指定任何文件,则读取 /etc/ftpusers。

    此文件内的项应该遵循如下格式:

    [+|-][@]<name>

    这里:

    • + 授权访问
    • - 拒绝访问
    • @ 表示 name 是指向一个组
  • found

    默认值是 prohibit,可选值是:

    项匹配行为
    allow, permit, pass赋予访问权限
    prohibit, deny, fail拒绝访问
  • debug

    debug 选项会将调试信息记录到此 syslog 文件中。

  • nowarn

    这个选项不显示警告信息。

pam_prohibit 模块会为未在 /etc/pam.conf 文件内指定的所有服务返回特定于模块的故障。系统管理员应该慎用此模块,因为它并没有提供实际的验证。大多数情况下,应该使用此模块来禁用某个模块类型,或者在 OTHER 服务中使用它。这一功能与 pam_allow 模块刚好相反。此模块支持所有的 PAM 模块类型。

pam_rhosts_module 提供了类似于 r-cmds 的 rhosts 类型的验证工具,比如 rlogin、rsh 和 rexec。该模块会检查 /etc/hosts.equiv 中的用户名和主机名,然后检查 $HOME/.rhosts 文件中的内容。如果没有在这些文件中找到匹配项,则返回 PAM_AUTH_ERR 故障代码。该模块支持验证 PAM 模块类型。

pam_ckfile 模块会基于某个文件的存在与否允许或拒绝进行验证。该模块提供了与 /etc/nologin 文件的历史行为类似的功能。如果指定的文件存在,那么只有 root 用户可以进行验证。该模块支持 Authentication 和 Account Management 模块类型。这个模块可以识别 file、debug 和 nowarn 选项。这些选项的格式应该与上述的相同。

结束语

可以对 AIX 安全性命令和应用程序进行配置,以便通过使用现有的加载式验证框架来调用 PAM 模块。从 AIX V5.1 版本起,AIX 开始支持 PAM 服务。而从 AIX V5.3 版本起,PAM 完全集成到 了 AIX 中。用户可以在其应用程序中使用 PAM 库 API 进行用户/组验证和帐户管理。PAM 还提供了通过 PAM 服务模块与现有验证机制集成的灵活性。


下载

描述名字大小
使用了 PAM API 的示例 C 程序PAM-API.zip10KB

参考资料

学习

  • AIX security documentation 提供了有关 PAM 的更多信息。
  • 参考如下的 PAM library documentation 获得有关 PAM API 的更多信息。
  • AIX and UNIX 专区:developerWorks 的“AIX and UNIX 专区”提供了大量与 AIX 系统管理的所有方面相关的信息,您可以利用它们来扩展自己的 UNIX 技能。
  • AIX and UNIX 新手入门:访问“AIX and UNIX 新手入门”页面可了解更多关于 AIX 和 UNIX 的内容。
  • AIX and UNIX 专题汇总:AIX and UNIX 专区已经为您推出了很多的技术专题,为您总结了很多热门的知识点。我们在后面还会继续推出很多相关的热门专题给您,为了方便您的访问,我们在这里为您把本专区的所有专题进行汇总,让您更方便的找到您需要的内容。
  • AIX and UNIX 下载中心:在这里你可以下载到可以运行在 AIX 或者是 UNIX 系统上的 IBM 服务器软件以及工具,让您可以提前免费试用他们的强大功能。
  • IBM Systems Magazine for AIX 中文版:本杂志的内容更加关注于趋势和企业级架构应用方面的内容,同时对于新兴的技术、产品、应用方式等也有很深入的探讨。IBM Systems Magazine 的内容都是由十分资深的业内人士撰写的,包括 IBM 的合作伙伴、IBM 的主机工程师以及高级管理人员。所以,从这些内容中,您可以了解到更高层次的应用理念,让您在选择和应用 IBM 系统时有一个更好的认识。
  • 随时关注聚焦于 IBM 产品和 IT 行业主题的 developerWorks 技术活动和网络广播
  • 参加 developerWorksLive! 技术讲座 迅速跟上 IBM 产品和工具以及 IT 行业的发展趋势。
  • 观看 developerWorks 演示中心 :从面向初学者的产品安装和设置演示到面向资深开发人员的高级功能演示。

获得产品和技术

  • 用最适合您的方式 IBM 产品评估试用版软件:下载产品试用版、在线试用产品 、在云环境中使用产品或在 IBM SOA 人员沙箱 上花上几个小时,了解如何高效实现面向服务的架构。
  • 试用 IBM 软件。下载试用版本、登录进行在线试用、在 sandbox 环境中使用一个产品或是通过云使用它。在超过 100 个 IBM 产品试用中选择。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=AIX and UNIX
ArticleID=756822
ArticleTitle=AIX 插入式验证模块
publish-date=09132011