本文参考以下博文:
PAM模块详解及sudo命令
PAM 的应用开发和内部实现源码分析
PAM详解(一)PAM介绍
百度百科 —— PAM
Oracle Solaris 10 开发者安全性指南 —— PAM 框架介绍
特此致谢!
零、引言
身份认证是操作系统安全的重要机制之一,系统通过认证机制核查用户的身份证明,并作为用户进入系统的判定条件,是防止恶意用户进入系统的第一道门槛。近年来认证理论和技术得到了迅速发展,产生了各种认证机制,如:口令机制、RSA、DCE、kerberos认证体制、S/Key和基于智能卡的身份认证等。然而,当系统中引入新的认证机制时,一些系统入口登录服务如login、rlogin和telnet等应用程序就必须改写以适应新的认证机制。
为了解决这一问题,1995年Sun公司的Vipin Samar和Charlie Lai提出了PAM,并将其应用在Solaris系统上。PAM框架将应用程序与具体的认证机制分离,使得系统改变认证机制时,不再需要修改采用认证机制的应用程序,而只要由管理员配置应用程序的认证服务模块,极大地提高了认证机制的通用性与灵活性。
现在大多数操作系统都采用PAM实现身份认证,有Linux系统的Linux-PAM和FreeBSD5.x采用的OpenPAM(FreeBSD 4.x采用的是Linux-PAM)等。它们的实现原理一样,只是实现细节有所不同而已。本系列文章针对于Linux-PAM进行介绍和详细解析。
一、介绍
PAM的英文全称是Pluggable Authentication Modules,中文译为可插拔认证模块。引言中已提到,PAM是由Sun提出的一种认证机制,其通过提供一些动态链接库和一套统一的API(应用程序接口)以及一连串的验证机制,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。只要使用者将验证阶段的需求告知PAM后,PAM就能够汇报使用者验证的结果(成功或者失败)。
相应地,Linux-PAM包当然也包含本地系统管理员用来控制应用程序如何对用户进行身份验证的可插拔身份验证模块。
二、框架
PAM框架由以下四部分组成:
(1)PAM应用程序,也称为消费方;
(2)PAM库;
(3)PAM配置文件;
(4)PAM服务模块,也称为提供者。
该框架为与验证相关的活动提供了统一的执行方式。采用该方式,(1)应用程序开发者不必了解策略的语义即可使用PAM服务;(2)算法是集中提供的,可以独立于各个应用程序对算法进行修改;(3)借助 PAM,管理员可以根据特定系统的需要调整验证过程,而不必更改任何应用程序,调整是通过PAM 配置文件pam.conf 来实现的。
PAM体系结构如下图所示:
应用程序通过PAM应用编程接口 (Application Programming Interface, API) 与PAM库进行通信。PAM服务模块通过PAM服务提供者接口 (Service Provider Interface, SPI)与PAM库进行通信。通过这种方式,PAM库可使应用程序和模块相互进行通信。