跳过导航链接 | |
退出打印视图 | |
Oracle Solaris 11 开发者安全性指南 Oracle Solaris 11.1 Information Library (简体中文) |
PAM 使用者
PAM 库
pam.conf(4) 配置文件
PAM 服务模块,也称为提供者
该框架为与验证相关的活动提供了统一的执行方式。采用该方式,应用程序开发者不必了解策略的语义即可使用 PAM 服务。算法是集中提供的。可以独立于各个应用程序对算法进行修改。借助 PAM,管理员可以根据特定系统的需要调整验证过程,而不必更改任何应用程序。通过 pam.conf、PAM 配置文件或 /etc/pam.d 文件进行调整,这些文件均可从 Oracle Solaris 11.1 发行版以及更高发行版中获得。
下图说明了 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 配置中的定义使用这些服务。请参见 pam.conf(4)。
例如,Oracle Solaris OS 为系统管理员提供了用于配置站点口令策略的 pam_authtok_check(5) 模块。pam_authtok_check(5) 模块可以检查符合各种强度条件的建议口令。
有关 Oracle Solaris PAM 模块的完整列表,请参见手册页第 5 节:标准、环境与宏。PAM 模块的前缀为 pam_。
Oracle Solaris 11.1 发行版提供了新的 PAM 模块 pam_user_policy(5),该模块添加了对每用户 PAM 配置的支持。该模块调用 pam_eval(3PAM) 函数评估指定的 PAM 配置。PAM 库 libpam(3LIB) 中的 pam_eval() 例程也是 Oracle Solaris 11.1 中新增的例程。
PAM 库 libpam(3LIB) 是 PAM 体系结构中的中心元素:
libpam 可以导出 API pam(3PAM)。应用程序可以调用此 API 以执行验证、帐户管理、凭证建立、会话管理以及口令更改。
libpam 在 /etc/pam.conf 中查找 PAM 配置,或在 /etc/pam.d 中查找每服务 PAM 策略文件。PAM 配置为每个可用服务指定 PAM 模块要求并由系统管理员管理。
libpam 可以导入 SPI pam_sm(3PAM),而导出则由服务模块完成。
以使用者如何使用 PAM 库进行用户验证为例,请考虑 login 如何验证用户:
login 应用程序通过调用 pam_start(3PAM) 并指定 login 服务来启动 PAM 会话。
该应用程序将调用 pam_authenticate(3PAM),它是 PAM 库 libpam(3LIB) 导出的 PAM API 的一部分。
PAM 库在 PAM 配置中搜索与验证 (auth) 服务模块类型对应的 login 条目。
对于 pam.conf 中为 login 服务配置的每个模块,PAM 库将调用 pam_sm_authenticate(3PAM)。pam_sm_authenticate() 函数是 PAM SPI 的一部分。pam.conf 控制标志和每个调用的结果将确定是否允许用户访问系统。在《Oracle Solaris 11.1 管理:安全服务》中的"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 项。