Linux_PAM_1.1.0_系统管理员指南

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux- PAM 工程的目的就是分离应用软件和验证机制的开发。通过验证函数库可以实现 上述目的,一个应用程序可以使用这些函数库去进行用户的认证。PAM 库由本地的系统配置 文件 /etc/pam.conf 或者/etc/pam.d/目录下的一些配置文件来设置。而模块以动态可加载 目标文件(使用 dloptn(3)函数打开)的形式保存在 /lib/security 和 /lib64/security
Linux-PAM 处理四种类型的任务:验证管理(auth)、帐户管理(account)、会话管理 (session)和口令管理 (password)。应用程序使用的管理方式通过相关的 Linux-PAM 配置文 件设置。管理功能是有配置文件指定的模块完成的。配置文件的语法将会在下面讨论。
下图描述了 Linux-PAM 组织架构:
| service user | A
||
|____,-----'
|
||
VA
+----------------+ +------|-----|---------+ -----+------+
+---u-----u----+ |
|
|
| auth.... |--[ a ]--[ b ]--[ c ]
+--------------+
type(类型)是一个管理相近规则的管理组,他的作用就是指定后面的模块与哪一个管 理组相关联。包括下面四总类型:
acount 用于非验证的帐户管理,它主要用来限制/允许用户对某个服务的访问时 间,当前可用的系统资源(用户的最大数量),或者限制用户的位置(例如:root 用户只能
从控制台登录)
auth 为用户提供了两个方面的验证,第一, 让应用程序提示用户输入密码或 者其它的标记,确认用户的合法性;第二,通过它的凭证许可权限,设定组成员关系(不同于 上面讨论的/etc/groups 文件)或者其它优先权。
3 综述
我们从一个例子开始讨论。首先找一个能够为用户提供服务的应用程序,login 就是一 个这样的程序。login 要做两件事,首先确认发出请求的这个用户是不是该用户本身,然后 为用户提供所需服务:在这里提供的是以一个以用户身份的运行的 shell(bash, tcsh, zsh, etc.)
通常,login 所做的前面的步骤只是提示用户输入密码并与验证是否与系统本地中存储 的密码一致,然后对用户身份的验证,就是 Linux-PAM 的工作了。
PAM 的一个重要特点是,许多个 PAM 规则叠加在一块共同起作用的来完成一个指定的验 证工作。
servic(e 服务)通常都是类似于 login 或 su 这样的常见应用程序。为定义默认的规则, 预留了 service-name。
The service is typically the familiar name of the corresponding application: login and su are good examples.
contro(l 控制标志)控制标志用来设置验证成功或者失败后 PAM-API 需要作出的反应, 控制标志有两种语法,一种是简单的,只需要一个单独的关键字即可,另一种复杂的方式是 在方括号里面写“value=action”
简单语法如下:
required 表示即使某个模块对用户的验证失败,也要等所有的模块都执行完毕之 后,PAM 才返回错误信息。这样做是为了不让用户知道被哪个模块拒绝。如果对用户验证成 功,所有的模块都会返回成功信息。
2 关于本文的一些说明
在开Biblioteka Baidu阅读本文时,你应该清楚本文假定特定的文件是在特定的目录中。我们遵照 RFC-86 的约定。如果你使用的 linux 发行版或其他支持 PAM 的系统以不同的方式发布这些文 件的话,那么你应该谨慎使用本文提供的例子。
例如,本文假设 PAM 可加载目标文件(模块)是在/lib/security/和/lib64/security/目 录下,这是符合 HFS(Filesystem Hierarchy Standard)标准的。在 Solaris 中,他们有 属于 Solaris 自己的 PAM 版本,在其他的 UN*X 中,你可能会在/usr/lib/security 中看到 这些文件。因此,使用本文的例子时应该注意进行必要的转换。
optional 表示即使本行指定的模块验证失败,也允许用户享受应用程序提供的 服务。使用这个标志,PAM 框架会忽略这这个模块产生的验证错误,继续顺序执行下一个层 叠模块。
include include all lines of given type from the configuration file specified as an argument to
this control.
substack include all lines of given type from the configuration file specified as an argument to
this control. This differs from include in that evaluation of the done and die actions in
为了描述 Linux-PAM 的灵活性,我们可以假想一种情况:一个系统管理者(父母)希望提 高用户(他们的子女)的数学能力。他/她就可以通过一个孩子们非常喜欢的游戏“Shoot 'em up game”达成上述目的,当然前提是这个游戏能够使用 PAM 提供的验证机制。验证可以设置: 每次孩子们要玩游戏时,都需要回答出一组小于 12 的随机数的乘积。这样孩子们每次玩游戏 之前都可以练习乘法运算。随着他们的成长,可以增加数字的大小。
如果一个程序想使用 PAM,在程序中必须有支持 PAM 功能的代码。如果你有程序的源代 码,你可以将合适的 PAM 功能代码添加进去,如果只有二进制文件,而二进制文件又不支持 PAM,那就无能为力了。
4 Linux-PAM 配置文件
当一个使用了 PAM 的应用程序启动时,它会启动于 PAM-API 的连接,然后去读取配置文 件/etc/pam.conf,另外,配置文件也可能存在于/etc/pam.d 中。如果存在/etc/pam.d,那 么/etc/pam.conf 将会被忽略。
最近接触 PAM 比较多,而中文版的文档过于老久,所以专门下载了英文版的指南,边学习边 翻译。
1 简介 Linux-PAM(Pluggable Authentication Modules for Linux.基于 Linux 的插入式验证模块) 是一组共享库,使用这些模块,系统管理者可以自由选择应用程序使用的验证机制。也就是 说,勿需重新编译应用程序就可以切换应用程序使用的验证机制。甚至,不必触动应用程序 就可以完全升级系统使用的验证机制。
| acct.... |--[ b ]--[ d ]
+--------------+
| password |--[ b ]--[ c ]
+--------------+
| session |--[ e ]--[ c ]
+--------------+
上图中,左边的应用程序 X,它通过一些接口调用 Linux-PAM 库,而自己并不知道使用 的验证方法。中间的 Linux-PAM 库参照图右边配置文件中的内容,加载应用程序 X 所适用的 模块。这些模块进入某个管理组,并按照配置文件里的配置层叠在一起。在这些模块被 Linux-PAM 调用时,会对应用程序执行不同的验证工作。应用程序和用户之间的信息交换可 以通过 conversation 函数实现。
+----------------+
| application: X |
+----------------+
/ +----------+ +================+
| authentication-[---->--\--] Linux- |--<--| PAM config file|
|
+
每一条规则的内容都是用空格分开的,前三个参数不区分大小写,如下:
service type control module-path module-arguments
(服务) (类型)(控制) (模块路径)
(模块参数)
在/etc/pam.d 目录下的配置文件,其规则内容都是不包含 service 部分的,即不包含 服务名称,而/etc/pam.d 目录下文件的名字就是服务名称。文件名必须是小写的。
在历史上,需要对用户进行验证的应用程序,必须同某种验证机制编译到一起。例如, 传统的 UN*X 系统是使用密码对用户进行校验的。用户输入的密码经过 crypt 加密后,然后和 /etc /passwd 文件中的密文进行比较。在这种系统中,如果优先级授予的形式不是基于这种 单一方式,就需要通过用户识别符和用户组识别符对优先权进行验证。服务和应用程序可以 使用基于用户和用户组识别的验证方式。通常,用户组的成员关系已经基于/etc/group 指定 了。
这些配置文件列出了某个或某些系统服务所要求 PAM 验证规则,以及 PAM 规则失败事件 发生时 PAM-API 的行为。
4.1 配置文件语法
下面将介绍配置文件的语法。配置文件是一个规则列表,每条规则都独占一行,但也可 能由于某个规则长度过长导致溢出,可以使用使用转意服符 `\<LF>'转写到下一行。 在同一 行中,写在“#”后面的都是注释。
从一个程序开发人员的角度看(在这个例子中,就是 login 程序的开发人员),Linux- PAM 的工作就是校验--验证用户的身份。
Linux-PAM 具有很大的灵活性,系统管理者可以通过它自由选择使用的验证方式。你也可 以自由的为部分或所有 PAM-aware 的应用程序选择所使用的验证方式。Linux-PAM 能够提供 的验证方式多种多样,从绝对信任(pam_permit)到视网膜扫描、音频分析以及一次性口令, 不一而足。
[----<--/--] PAM | |================|
|[conversation()][--+ \ |
| | X auth .. a.so |
+----------------+ | / +-n--n-----+ | X auth .. b.so |
|
||
__| |
|
_____/
The service-name, other, is reserved for giving default rules. On ly lines that mention the current service
(or in the absence of such, the other entries) will be associated with the given service-application.
a substack does not cause skipping the rest of the complete module stack, but only of
the substack. Jumps in a substack also can not make evaluation jump out of it, and the
passwd 用来升级用户验证标记
session 这类模块的主要用途是处理为用户提供服务之前/后需要做的一些事情, 包括:记录打开/关闭交换数据的信息,挂载目录等。
如果在类型之前加了"-",则当模块丢失导致不能正常加载时,相关的日志将不会记录 到系统日志中,对于那些不一定每次都需要安装的模块来说,这一特性是有用的。
requisite 如果特定的模块对用户的验证失败,PAM 马上返回一个错误信息,把控 制权交回应用程序,不再执行其它模块进行验证。返回值与第一个 fail 的模块有关。
sufficient 表示如果一个用户通过这个模块的验证,PAM 结构就立刻返回验证成功 信息(即使前面有模块 fail 了,也会把 fail 结果忽略掉),把控制权交回应用程序。后面的 层叠模块即使使用 requisite 或者 required 控制标志,也不再执行。如果验证失败, sufficient 的作用和 optional 相同。
相关文档
最新文档