配置 PAMPAM 配置通常是在 /etc/pam.d 或 /etc/pam.conf(用于旧版本)中的配置文件中实现的。
配置文件的结构对于使用 PAM 的各项服务,目录中都有一个对应的文件,其中包含应当如何获取该服务的验证及帐户信息的规则或说明。通常每一行有一个规则。
PAM 配置文件中的字段包括:
- Service_name 将指定服务/应用程序的名称(默认值为 OTHER)。
- Module_type 将为 Service_name 字段中的相应服务指定模块类型(auth/account/session/passwd)。
- Control_flag 将指定模块的堆栈行为。它可以获取诸如 requisite、required、sufficient 和 optional 之类的值。
- Module_path 将指定实现模块的库对象的路径名称。默认情况下,它将被设为 /lib/security。
- Module_options/module_args(可选字段)将指定可以传递给服务模块的选项或实参。
模块将按照在配置文件中列出的顺序被调用,这取决于每个条目允许的 Control_flag 的值。Control_flag 值包括:
- Required:堆栈中的所有 Required 模块必须看作一个成功的结果。如果一个或多个 Required 模块失败,则实现堆栈中的所有 Required 模块,但是将返回第一个错误。
- Sufficient:如果标记为 sufficient 的模块成功并且先前没有 Required 或 sufficient 模块失败,则忽略堆栈中的所有其余模块并返回成功。
- Optional:如果堆栈中没有一个模块是 required 并且没有任何一个 sufficient 模块成功,则服务/应用程序至少要有一个 optional 模块成功。
PAM 配置文件示例表 1 显示了各种操作系统中的 PAM 配置文件的一些示例。
表 1. PAM 配置文件的世界系统配置文件所在位置类型Control_flag模块Red Hat/etc/pam.dauthrequired/lib/security/pam_unix.soRed Hat/etc/pam.daccountsufficient/lib/security/pam_unix.soRed Hat/etc/pam.dsessionrequired/lib/security/pam_limit.soAIX/etc/pam.confauthrequired/usr/lib/security/pam_aixAIX/etc/pam.confaccountrequired/usr/lib/security/pam_aixAIX/etc/pam.confpasswordrequired/usr/lib/security/pam_aixzSUSE 64-bit | 32-bit/etc/pam.confauthrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.sozSUSE 64-bit | 32-bit/etc/pam.confaccountrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.sozSUSE 64-bit | 32-bit/etc/pam.confsessionrequired/lib64/security/pam_unix.so | /lib/security/pam_unix.soSolaris/etc/pam.confauthrequired/usr/lib/security/pam_unix.so.1Solaris/etc/pam.confaccountrequired/usr/lib/security/pam_unix.so.1Solaris/etc/pam.confpasswordrequired/usr/lib/security/pam_unix.so.1HP-UX/etc/pam.confauthrequiredlibpam_unix.so.1HP-UX/etc/pam.confaccountrequiredlibpam_unix.so.1HP-UX/etc/pam.confpasswordrequiredlibpam_unix.so.1
PAM 的 “other” 文件默认的 PAM 配置文件 /etc/pam.d 用于没有明确配置的所有其他服务,并且可能是 PAM 所依赖的最简单而又最健壮的默认文件。该文件内部类似如下所示:
1
2
3
4
5
6
7
8
9
10
| /etc/pam.d/other File
auth required pam_warn.so
auth required pam_deny.so
account required pam_warn.so
account required pam_deny.so
password required pam_warn.so
password required pam_deny.so
session required pam_warn.so
session required pam_deny.so
|
此文件非常简单。对于所有模块类型,Control_flag 都是一样的:required。调用两个模块:
- 首先,调用 pam_warn.so 来记录关于正在进行的尝试的信息。
- 然后调用 pam_deny.so 仅返回错误并防止发生任何类型的连接或验证。
因此,使用 PAM 的所有服务都必须被明确配置为允许验证;否则,尝试将失败。
设计简单 PAM 登录应用程序的 10 个步骤这 10 个步骤可以帮助您实现自己的 PAM 应用程序并帮助您了解 PAM 会话的工作方式:
- 包括 PAM 实现的头文件(例如,pam_appl.h、pam_misc.h)。
- 在 main 函数中,使用惟一的句柄初始化 PAM 库 libpam.so(该库将装入应用程序的配置文件中指定的模块)。
- 尝试验证所有模块并处理失败场景。
- 检查用户凭证和帐户详细信息。
- 打开一个新 PAM 会话。
- 为使用凭证的用户设置环境。
- 当用户完成时,取消用户环境。
- 关闭 PAM 会话。
- 从带有句柄值的 libpam.so 库中退出。
- 退出。
|