跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11 开发者安全性指南 Oracle Solaris 11 Information Library (简体中文) |
PAM 使用者
PAM 库
pam.conf(4) 配置文件
PAM 服务模块,也称为提供者
该框架为与验证相关的活动提供了统一的执行方式。 采用该方式,应用程序开发者不必了解策略的语义即可使用 PAM 服务。 算法是集中提供的。 可以独立于各个应用程序对算法进行修改。 借助 PAM,管理员可以根据特定系统的需要调整验证过程,而不必更改任何应用程序。 调整是通过 PAM 配置文件 pam.conf 来实现的。
下图说明了 PAM 体系结构。 应用程序通过 PAM 应用编程接口 (application programming interface, API) 与 PAM 库进行通信。 PAM 模块通过 PAM 服务提供者接口 (service provider interface, SPI) 与 PAM 库进行通信。 通过这种方式,PAM 库可使应用程序和模块相互进行通信。
图 3-1 PAM 体系结构
PAM 服务模块是一个共享库,用于为系统登录应用程序(如 login、rlogin 和 telnet 提供验证和其他安全服务。
PAM 服务的四种类型是:
验证服务模块-用于授予用户访问帐户或服务的权限。 提供此服务的模块可以验证用户并设置用户凭证。
帐户管理模块-用于确定当前用户的帐户是否有效。 提供此服务的模块可以检查口令或帐户的失效期以及限时访问。
会话管理模块-用于设置和终止登录会话。
口令管理模块-用于强制实施口令强度规则并执行验证令牌更新。
PAM 模块可以实现其中的一项或多项服务。 将简单模块用于明确定义的任务可以增加配置灵活性。 因此,应该在不同的模块中实现 PAM 服务。 然后,可以按照 pam.conf(4) 文件中定义的方式根据需要使用这些服务。
例如,Oracle Solaris OS 为系统管理员提供了用于配置站点口令策略的 pam_authtok_check(5) 模块。 pam_authtok_check(5) 模块可以检查符合各种强度条件的建议口令。
有关 Oracle Solaris PAM 模块的完整列表,请参见手册页第 5 节:标准、环境与宏。 PAM 模块的前缀为 pam_。
PAM 库 libpam(3LIB) 是 PAM 体系结构中的中心元素:
libpam 可以导出 API pam(3PAM)。 应用程序可以调用此 API 以执行验证、帐户管理、凭证建立、会话管理以及口令更改。
libpam 可以导入主配置文件 pam.conf(4)。 PAM 配置文件可指定每种可用服务的 PAM 模块要求。pam.conf 由系统管理员进行管理。
libpam 可以导入 SPI pam_sm(3PAM),而导出则由服务模块完成。
以使用者如何使用 PAM 库进行用户验证为例,请考虑 login 如何验证用户:
login 应用程序通过调用 pam_start(3PAM) 并指定 login 服务来启动 PAM 会话。
该应用程序将调用 pam_authenticate(3PAM),它是 PAM 库 libpam(3LIB) 导出的 PAM API 的一部分。
该库将在 pam.conf 文件中搜索 login 项。
对于 pam.conf 中为 login 服务配置的每个模块,PAM 库将调用 pam_sm_authenticate(3PAM)。 pam_sm_authenticate() 函数是 PAM SPI 的一部分。 pam.conf 控制标志和每个调用的结果将确定是否允许用户访问系统。 《Oracle Solaris 管理:安全服务》中的"PAM 配置(参考)"对此过程进行了详细介绍。
通过此方式,PAM 库可以将 PAM 应用程序与系统管理员已配置的 PAM 模块连接起来。
PAM 使用者必须与 PAM 库 libpam 链接。 应用程序使用模块提供的任何服务之前,必须通过调用 pam_start(3PAM) 初始化其 PAM 库的实例。 调用 pam_start() 可初始化必须传递给所有后续 PAM 调用的句柄。 应用程序完成使用 PAM 服务后,系统将调用 pam_end() 以清除 PAM 库已使用的任何数据。
PAM 应用程序与 PAM 模块之间的通信是通过项进行的。 例如,以下各项有助于进行初始化:
PAM_USER-当前验证的用户
PAM_AUTHTOK-口令
PAM_USER_PROMPT-用户名提示
PAM_TTY-用户借此进行通信的终端
PAM_RHOST-用户借此进入系统的远程主机
PAM_REPOSITORY-对用户帐户系统信息库的任何限制
PAM_RESOURCE-对资源的任何控制
有关可用项的完整列表,请参见 pam_set_item(3PAM)。 应用程序可以通过 pam_set_item(3PAM) 对项进行设置。 应用程序可以通过 pam_get_item(3PAM) 检索模块已设置的值。 但是,应用程序不能检索 PAM_AUTHTOK 和 PAM_OLDAUTHTOK。 无法设置 PAM_SERVICE 项。