首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

了解和配置 PAM(1)

了解和配置 PAM(1)

对于 Linux 用户,安全地共享文件是一项麻烦的任务。例如,需要费力地回想多个密码,并且重新设计系统访问应用程序(如 loginsupasswordftp 等)十分耗费时间。增加这一复杂度的是验证 过程,在该过程中,系统将识别用户并为该用户提供相应的访问控制。
PAM 的使用历史记录PAM 是关注如何为服务验证用户的 API。在使用 PAM 之前,诸如 login(和 rlogintelnetrsh)之类的应用程序在 /etc/passwd 中查找用户名,然后将两者相比较并验证用户输入的名称。所有应用程序使用了这些共享服务,但是并未共享实现细节和配置这些服务的权限。
接下来,应用程序开发人员尝试编写自定义过程代码。在此过程中,需要分离应用程序与安全模块(通用安全模块可以在应用程序之间共享并且可以根据需求进行配置)。
PAM 机制将把多个低级别验证模式集成到高级别 API 中,该 API 将允许以独立于底层验证模式的方式编写使用验证的程序。PAM 的主要特征表现为通过 /etc/pam.d 或 /etc/pam.conf 文件实现动态验证配置。
PAM 可以被配置为拒绝某些程序对用户进行验证,或者在某些程序尝试验证时发出警告。PAM 程序将使用 PAM 模块(验证模块):这些模块在运行时与应用程序绑定在一起才能工作。
图 1 显示了 PAM 模块的基本流程。
图 1. PAM 库将解析配置文件并将模块装入其中哪些操作系统支持 PAM?PAM 最初是由 Sun Microsystems 于 1995 年开发的,并且以下操作系统版本(及更高版本)都提供支持:
  • RedHat 5.0
  • SUSE 6.2
  • Debian 2.2
  • Mandrake 5.2
  • Caldera 1.3
  • TurboLinux 3.6
最新版本的 Solaris™、AIX®、HP-UX 和 Mac OS® X 也支持 PAM。PAM 后来被标准化为 X/Open UNIX® 标准化流程(在 X/Open 单点登录服务(XSSO)架构中)的一部分。
我可以获得哪种 PAM?虽然没有进行严格划分,但是可以认为有三种 PAM:
  • Linux-PAM:Linux-PAM 涵盖了本文中讨论的所有 PAM。在任何一个 Linux 平台中的 PAM 的主要结构都类似于 Linux-PAM 版本。
  • OpenPAM:OpenPAM 是由 NAI 实验室的 Dag-Erling Smorgrav 开发的另一个 PAM 实现,属于 DARPA-CHATS 研究项目。由于它是开源的,因此它主要由 FreeBSD、NetBSD 及应用程序(加上 Mac OS X)使用。
  • Java™ PAM 或 JPam:PAM 主要是支持 Linux 和 UNIX 的标准验证模块。JPam 将 Java 部分与普通 PAM 联系了起来。JPam 允许基于 Java 的应用程序使用 PAM 模块或工具(如 authaccountpasswdsession 等)。它提供了 JAAS 和直接 API,并且支持大多数 Unix OS 和架构。
虽然这些是不同的 PAM,但是其主要功能仍然相同。
PAM 模块是什么样子的?安装 PAM 是一个逐步的过程。要获得安装说明,请参阅 。
PAM 模块是按模块类型归类的。任何给定的模块至少要实现四种模块类型功能之一:
  • 验证模块用于验证用户或设置/销毁凭证。
  • 帐户管理模块将执行与访问、帐户及凭证有效期、密码限制/规则等有关的操作。
  • 会话管理模块用于初始化和终止会话。
  • 密码管理模块将执行与密码更改/更新有关的操作。
PAM 将提供不同的功能,例如单点登录验证、访问控制等。每个功能的实现都是由不同的模块处理的。下面是一些主要模块:
  • pam_access 将使用登录名/域名,根据 /etc/security/access.conf 中的预定义规则交付日志守护进程样式的登录访问控制。
  • pam_cracklib 将根据密码规则检查密码。
  • pam_env sets/unsets 环境变量来自 /etc/security/pam_env_conf。
  • pam_debug 将调试 PAM。
  • pam_deny 将拒绝 PAM 模块。
  • pam_echo 将打印消息。
  • pam_exec 将执行外部命令。
  • pam_ftp 是匿名访问模块。
  • pam_localuser 要求将用户列于 /etc/passwd 中。
  • pam_unix 将通过 /etc/passwd 提供传统密码验证。
还有许多其他模块(pam_userdb、pam_warn、pam_xauth),这些模块将获取返回的一组值(这些模块的详细信息可以在  的 PAM 管理指南中找到)。
返回列表