发信人: Sinbad <anonymous@anonymous.com>
标 题: PAM入门介绍
发信站: 辛巴达 (Fri Sep 27 11:01:24 2002)
作者:netguy (netguy@nsfocus.com)
主页:http://www.nsfocus.com
日期:2000-10-07
PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。他通过提供一些
动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理
员能够灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程式,同时也便于
向系 统中添加新的认证手段。
PAM最初是集成在Solaris中,现在已移植到其他系统中,如Linux、SunOS、HP-UX 9.0等。
一、PAM的结构
PAM的整个框架结构如下图所示:
系统管理员通过PAM配置文档来定制认证策略,即指定什么服务该采用什么样的认证方法;应
用程式研发者通过在服务程式中使用PAM API而实现对认证方法的调用;而PAM服务模块(se
rvice module)的研发者则利用PAM SPI(Service Module API)来编写认证模块(主 要是
引出一些函数pam_sm_xxxx( )供libpam调用),将不同的认证机制(比如传统的UNIX认证方
法、Kerberos等)加入到系统中;PAM核 心库(libpam)则读取配置文档,以此为根据将服
务程式和相应的认证方法联系起来。
二、PAM支持的四种管理界面:
1、认证管理(authentication management)
主要是接受用户名和密码,进而对该用户的密码进行认证,并负责配置用户的一些秘密
信息。
2、帐户管理(account management)
主要是检查帐户是否被允许登录系统,帐号是否已过期,帐号的登录是否有时间段的
限制等等。
3、密码管理(password management)
主要是用来修改用户的密码。
4、会话管理(session management)
主要是提供对会话的管理和记账(accounting)。
三、PAM的文档:
/usr/lib/libpam.so.* PAM核心库
/etc/pam.conf或/etc/pam.d/ PAM配置文档
/usr/lib/security/pam_*.so 可动态加载的PAM service module
对于RedHat,其目录不是/usr/lib,而是/lib。
四、PAM的配置:
PAM的配置是通过单个配置文档/etc/pam.conf。RedHat还支持另外一种配置方式,即通过配
置目录/etc/pam.d/,且这种的优先级要高于单 个配置文档的方式。
1、使用配置文档/etc/pam.conf
该文档是由如下的行所组成的:
service-name module-type control-flag module-path arguments
service-name 服务的名字,比如telnet、login、ftp等,服务名字“OTHER”代表任何没有
在该文档中明确配置的其他服务。
module-type 模块类型有四种:auth、account、session、password,即对应PAM所支持的
四种管理方式。同一个服务能够调用多个 PAM模块进行认证,这些模块构成一个stack。
control-flag 用来告诉PAM库该如何处理和该服务相关的PAM模块的成功或失败情况。他有四
种可能的 值:required,requisite,sufficient,optional。
required 表示本模块必须返回成功才能通过认证,但是假如该模块返回失败的话,失败
结果也不会立即通知用户,而是要等到同一stack 中的任何模块全部执行完毕再将失败结果
返回给应用程式。能够认为是个必要条件。
requisite 和required类似,该模块必须返回成功才能通过认证,但是一旦该模块返回
失败,将不再执行同一stack内的任何模块,而是直 接将控制权返回给应用程式。是个必
要条件。注:这种只有RedHat支持,Solaris不支持。
sufficient 表明本模块返回成功已足以通过身份认证的需要,不必再执行同一stack
内的其他模块,但是假如本模块返回失败的话能够 忽略。能够认为是个充分条件。
optional表明本模块是可选的,他的成功和否一般不会对身份认证起关键作用,其返回
值一般被忽略。
对于control-flag,从Linux-PAM-0.63版本起,支持一种新的语法,具体可参看Linux
PAM文档。
module-path 用来指明本模块对应的程式文档的路径名,一般采用绝对路径,假如没有给出
绝对路径,默认该文档在目录/usr/lib/security下 面。
arguments 是用来传递给该模块的参数。一般来说每个模块的参数都不相同,能够由该模块
的研发者自己定义,但是也有以下几个一起 的参数:
debug 该模块应当用syslog( )将调试信息写入到系统日志文档中。
no_warn 表明该模块不应把警告信息发送给应用程式。
use_first_pass 表明该模块不能提示用户输入密码,而应使用前一个模块从用户那里
得到的密码。
try_first_pass 表明该模块首先应当使用前一个模块从用户那里得到的密码,假如该
密码验证不通过,再提示用户输入新的密码。
use_mapped_pass 该模块不能提示用户输入密码,而是使用映射过的密码。
expose_account 允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用
,因为泄漏用户名会对安全造成一定程度的威 胁。
2、使用配置目录/etc/pam.d/(只适用于RedHat Linux)
该目录下的每个文档的名字对应服务名,例如ftp服务对应文档/etc/pam.d/ftp。假如名为x
xxx的服务所对应的配置文档/etc/pam.d/xxxx不存 在,则该服务将使用默认的配置文档/et
c/pam.d/other。每个文档由如下格式的文本行所构成:
module-type control-flag module-path arguments
每个字段的含义和/etc/pam.conf中的相同。
3、配置的例子
例一:用/etc/pam.conf配置默认的认证方式。
下面的例子将拒绝任何没有在/etc/pam.conf中明确配置的服务。OTHER代表没有明确配置的
其他任何服务,pam_deny模块的作用只是简 单地拒绝通过认证。
OTHER auth required /usr/lib/security/pam_deny.so
OTHER account required /usr/lib/security/pam_deny.so
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




