JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 10 开发者安全性指南     Oracle Solaris 10 1/13 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.  使用智能卡框架

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

B.  GSS-API 参考

C.  指定 OID

D.  SASL 示例的源代码

E.  SASL 参考表

F.  打包和签署加密提供者

词汇表

索引

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 控制标志和每个调用的结果将确定是否允许用户访问系统。《System Administration Guide: Security Services》中的"PAM Configuration (Reference)"对此过程进行了详细介绍。

通过此方式,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)