JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11 开发者安全性指南     Oracle Solaris 11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  面向开发者的 Oracle Solaris 安全(概述)

2.  开发特权应用程序

3.  编写 PAM 应用程序和服务

PAM 框架介绍

PAM 服务模块

PAM 库

PAM 验证过程

PAM 使用者的要求

PAM 配置

编写使用 PAM 服务的应用程序

简单 PAM 使用者示例

其他有用的 PAM 函数

编写对话函数

编写提供 PAM 服务的模块

PAM 服务提供者要求

PAM 提供者服务模块样例

4.  编写使用 GSS-API 的应用程序

5.  GSS-API 客户机示例

6.  GSS-API 服务器示例

7.  编写使用 SASL 的应用程序

8.  Oracle Solaris 加密框架介绍

9.  编写用户级加密应用程序和提供者

10.  Oracle Solaris 密钥管理框架介绍

A.  基于 C 的 GSS-API 样例程序

B.  GSS-API 参考

C.  指定 OID

D.  SASL 示例的源代码

E.  SASL 参考表

词汇表

索引

PAM 框架介绍

PAM 框架由四个部分组成:

该框架为与验证相关的活动提供了统一的执行方式。 采用该方式,应用程序开发者不必了解策略的语义即可使用 PAM 服务。 算法是集中提供的。 可以独立于各个应用程序对算法进行修改。 借助 PAM,管理员可以根据特定系统的需要调整验证过程,而不必更改任何应用程序。 调整是通过 PAM 配置文件 pam.conf 来实现的。

下图说明了 PAM 体系结构。 应用程序通过 PAM 应用编程接口 (application programming interface, API) 与 PAM 库进行通信。 PAM 模块通过 PAM 服务提供者接口 (service provider interface, SPI) 与 PAM 库进行通信。 通过这种方式,PAM 库可使应用程序和模块相互进行通信。

图 3-1 PAM 体系结构

image:图中显示了应用程序和 PAM 服务模块如何访问 PAM 库。

PAM 服务模块

PAM 服务模块是一个共享库,用于为系统登录应用程序(如 loginrlogintelnet 提供验证和其他安全服务。

PAM 服务的四种类型是:

PAM 模块可以实现其中的一项或多项服务。 将简单模块用于明确定义的任务可以增加配置灵活性。 因此,应该在不同的模块中实现 PAM 服务。 然后,可以按照 pam.conf(4) 文件中定义的方式根据需要使用这些服务。

例如,Oracle Solaris OS 为系统管理员提供了用于配置站点口令策略的 pam_authtok_check(5) 模块。 pam_authtok_check(5) 模块可以检查符合各种强度条件的建议口令。

有关 Oracle Solaris PAM 模块的完整列表,请参见手册页第 5 节:标准、环境与宏。 PAM 模块的前缀为 pam_

PAM 库

PAM 库 libpam(3LIB) 是 PAM 体系结构中的中心元素:

PAM 验证过程

以使用者如何使用 PAM 库进行用户验证为例,请考虑 login 如何验证用户:

  1. login 应用程序通过调用 pam_start(3PAM) 并指定 login 服务来启动 PAM 会话。

  2. 该应用程序将调用 pam_authenticate(3PAM),它是 PAM 库 libpam(3LIB) 导出的 PAM API 的一部分。

  3. 该库将在 pam.conf 文件中搜索 login 项。

  4. 对于 pam.conf 中为 login 服务配置的每个模块,PAM 库将调用 pam_sm_authenticate(3PAM)pam_sm_authenticate() 函数是 PAM SPI 的一部分。 pam.conf 控制标志和每个调用的结果将确定是否允许用户访问系统。 《Oracle Solaris 管理:安全服务》中的"PAM 配置(参考)"对此过程进行了详细介绍。

通过此方式,PAM 库可以将 PAM 应用程序与系统管理员已配置的 PAM 模块连接起来。

PAM 使用者的要求

PAM 使用者必须与 PAM 库 libpam 链接。 应用程序使用模块提供的任何服务之前,必须通过调用 pam_start(3PAM) 初始化其 PAM 库的实例。 调用 pam_start() 可初始化必须传递给所有后续 PAM 调用的句柄。 应用程序完成使用 PAM 服务后,系统将调用 pam_end() 以清除 PAM 库已使用的任何数据。

PAM 应用程序与 PAM 模块之间的通信是通过进行的。 例如,以下各项有助于进行初始化:

有关可用项的完整列表,请参见 pam_set_item(3PAM)。 应用程序可以通过 pam_set_item(3PAM) 对项进行设置。 应用程序可以通过 pam_get_item(3PAM) 检索模块已设置的值。 但是,应用程序不能检索 PAM_AUTHTOK 和 PAM_OLDAUTHTOK。 无法设置 PAM_SERVICE 项。


注 - PAM 使用者必须拥有唯一的 PAM 服务名,该名称传递到 pam_start(3PAM)