用PAM自定义身份验证

现在Linux系统使用 Pluggable Authentication Module (PAM),为服务和应用程序提供灵活的身份验证。

  • 很多 Linux应用程序都要求某种类型的身份验证。过去,每个身份验证感知的应用程序的编译,使用的是硬编码的关于运行应用程序的系统使用的身份验证机制的信息。改变或改进系统的身份验证机制会要求更新和重新编译所有使用该机制的应用程序,甚至当你有系统上所有相关应用程序的源代码时,这也是很枯燥的工作。
  • PAM 提供了一个灵活的动态的验证任何使用 PAM 的应用程序或服务的机制。用 Linux-PAM 库编译的应用程序或服务使用文本格式的配置文件来标识它们的身份验证要求。在系统中使用 PAM,可以轻松地修改身份验证要求或集成新的身份验证机制,只需在具体的应用程序或服务使用的PAM 配置文件中添加条目。

PAM 概述

PAM 是使用主要的Linux-PAM身份验证库编译的应用程序自动加载的共享库模块。使用PAM模块的应用程序一般称为PAM感知的应用程序。

  • PAM满足PAM感知的应用程序的不同的身份验证要求,很像可重用代码和库和应用程序的关系。例如,PAM 感知的 login 程序可以调用许多 PAM 进行检查,比如以根身份登录的用户是否在一个安全终端上,是否允许用户此时登录系统,还可满足其他类似的身份验证要求。因为PAM是共享库模块,PAM 感知的rsh程序可以重用“是否允许用户现在登录系统”之类相同的检查。PAM 还是 login 使用的 PAM,但应用的规则和 rsh 更相关一些。PAM模块本身现在通常都是存放在 /lib/security 目录,但有些老的 Linux 分发版把 PAM 保存在 /usr/lib/security 目录中。
  • 不同的 PAM 感知应用程序使用的 PAM 以两种方式定义。在现代 PAM 的实现中,PAM由/etc/pam.d目录中的特定于应用程序的配置文件控制。在比较老的 PAM 实现中,系统中应用程序使用的所有模块都在一个中央的配置文件 /etc/pam.conf 中定义。为了向后兼容系统仍支持老的方法,但不建议采用,同时鼓励使用现代方法,如果系统中两者同时存在,则使用 /etc/pam.d目录,而不是/etc/pam.conf文件的内容。此技巧把重点放在/etc/pam.d中的PAM 配置文件,因为多数现代系统就是这样使用 PAM 的。

应用程序 / 服务特定的 PAM 配置文件

/etc/pam.d目录中的每个PAM配置文件和它关联的PAM感知应用程序或服务同名,包含在身份验证过程中使用的 PAM 规则。要使用的配置文件的名称来自传递给 Linux-PAM库的pam_start()函数的第一个参数,即被验证的服务的名称(为了方便起见,配置文件和应用程序经常是同名的)。这些文件也包含注释,在传统的 # 标记之后的所有字符都是注释。

/etc/pam.d目录中一个文件的每个非注释行定义一个PAM模块如何用于相关的应用程序或服务的身份验证过程。每个文件包含 4 个用空白字符分隔的域,前三个是必需的。这些域的含义和内容如下所示:

(一) module-type

该行定义的PAM模块的类型,PAM模块的类型定义模块在身份验证过程中如何使用。有效值包括:

1、auth

标识一个验证用户身份或系统要求已经被满足的身份验证检查。常见系统要求包括一个服务可以在当前时间启动(例如,当用户登录
时不存在/etc/nologin文件),正使用一个可接受的设备(即设备在/etc/securetty 中列出),用户是否已经是根用户,等等。

2、account

验证用户是否能根据系统要求进行身份验证,如用户是否有一个有效账户,系统最大的用户数量,访问系统使用的设备,用户是否有
所请求应用程序或服务的访问权,等等。

3、password

验证一个用户更新身份验证机制的能力。每个auth条目通常有一个 password 类型的模块,绑定到一个可以更新的身份验证机制。

4、session

标识必须在相关的服务或应用程序激活之前,或该服务或应用程序终止前必须完成的任务所关联的模块。这种类型的模块一般执行像
挂接目录、记录审核跟踪信息或保证系统资源可用这样的系统功能。


(二) control-flag

指定的 PAM 模块的返回值的隐含意义。有效值为:

1、required

表示 PAM 模块对于指定的模块类型必须成功。指定模块类型(如所有标记为 auth 的模块类型)的任何 PAM 模块的失败都会被报
告 给 相 关 的 应 用 程 序 或 服 务 ,但 这 是 在 该 模 块 类 型 的 所 有required PAM 都执行过之后。

2、requisite

表示 PAM 模块的失败将立即被报告给相关的应用程序或服务。

3、sufficient

表示 PAM 模块的成功满足该模块类型的身份验证要求。如果以前没有PAM 失败过,不再执行关联的模块类型的其他PAM。标识为
sufficient 的 PAM 的失败将被忽略,只要该模块类型随后的required模块返回成功。如果以前的required PAM失败,标记为 sufficient 的 PAM 的成功将被忽略。

4、optional

表示 PAM 模块的成功对应用程序或服务不是关键的,除非指定的模块类型只有这一个模块。如果它是唯一的,它的成功或失败将决
定指定模块类型的成功或失败。


(三)module-path

和此条目关联的 PAM 模块的路径。PAM 模块默认位于 /lib/security,但是该域也可以标识位于其他目录中的模块,只需指定PAM模块的绝
对路径和文件名。


(四)arguments

可选的、特定于模块的参数。


你可能感兴趣的:(Linux,应用系统,Linux,系统配置,应用服务)