摘要
Linux 在鉴定进程中使用 PAM(可插拔鉴定模块)作为用户和应用程序之间的中间层。 PAM 模块在系统范围内可用,所以任何应用程序都可以请求这些模块。 本章介绍模块化鉴定机制的工作原理和配置方法。
系统管理员和编程人员经常要将访问限制在系统的某些部分或限制对应用程序某些功能的使用。 如果不使用 PAM,则每次引入新的鉴定机制(例如 LDAP、Samba 或 Kerberos)时都必须对应用程序进行调整。但是,此过程相当耗费时间并且容易出现错误。 避免这些缺点的一种方法是将应用程序从鉴定机制中分开并将鉴定委托给集中管理的模块。 当需要使用最近所需的鉴定方案时,只要调整或编写合适的 PAM 模块供相关程序使用即可。
依赖于 PAM 机制的每个程序在目录 /etc/pam.d/ 中都有自己的配置文件。 这些文件定义用于鉴定的 PAM 模块。 另外,programname/etc/security 下有用于 PAM 模块的全局配置文件,这些文件定义这些模块的精确行为(例如 pam_env.conf、pam_pwcheck.conf、pam_unix2.conf 和 time.conf)。使用 PAM 模块的每个应用程序实际上调用一组 PAM 函数,这些函数随后将处理不同配置文件中的信息并将结果返回到调用这些函数的应用程序。
PAM 配置文件中的每一行最多包含 4 列:
<Type of module> <Control flag> <Module path> <Options>
PAM 模块是成批处理的。 不同类型的模块具有不同的用途。例如一个模块检查密码,另一个模块校验访问系统的位置,第三个模块读取用户特定的设置。 PAM 可以识别四种不同类型的模块:
auth这种类型的模块的用途是检查用户的真实性。 传统上,这是通过查询密码完成的,但也可以借助芯片卡或通过生物测定学(指纹或虹膜扫描)实现。
帐户这种类型的模块检查用户是否具有使用所请求服务的一般权限。 例如,应执行这种检查以确保任何人都不能使用失效帐户的用户名进行登录。
password这种类型的模块的用途是启用鉴定令牌的更改。 在大多数情况下,这是密码。
会话这种类型的模块负责管理和配置用户会话。 在鉴定前后启动这些模块以在系统日志中注册登录尝试并配置用户的特定环境(邮件帐户、用户主目录、系统限制等)。
第二列包含的控制标志影响所启动模块的行为:
required
在进行鉴定之前,必须先成功处理带有此标志的模块。 在处理带有 required 标志的模块失败后,将继续处理带有相同标志的所有其他模块,之后用户才会收到有关鉴定尝试失败的讯息。
requisite
也必须成功处理带有此标志的模块,处理方式在很大程度上与带有 required 标志的模块类似。 但是,如果某个带有此标志的模块失败,将立即向用户提供反馈并且不再继续处理其他模块。 如果成功,则将处理随后的模块,就像带有 required 标志的任何模块一样。 requisite 标志可用于基本过滤器,该过滤器检查进行正确鉴定所必需的某些条件是否存在。
sufficient
在成功处理带有此标志的模块后,发出调用的应用程序立即收到处理成功的讯息并且不再处理其他模块,但前提是前面没有带有 required 标志的模块失败。 带有 sufficient 标志的模块失败没有任何直接后果,所有随后的模块都将按其各自的顺序进行处理。
optional带有此标志的模块成功或失败不会产生任何直接后果。 此标志可用于只用来显示讯息(例如,通知用户收到了邮件)而不采取任何进一步操作的模块。
如果给出此标志,则在此处插入指定为参数的文件。
只要模块位于默认目录 /lib/security(对于 SUSE Linux Enterprise® 支持的所有 64 位平台,默认目录是 /lib64/security)中,就无需显式指定模块路径。 第四列可能包含给定模块的选项,例如 debug(启用调试)或 nullok(允许使用空密码)。