Solaris 开发者安全性指南

PAM 堆栈工作原理

应用程序调用以下函数时,libpam 将读取配置文件 /etc/pam.conf 以确定针对该服务参与操作的模块:

如果对于该服务的操作(如验证或帐户管理)/etc/pam.conf 仅包含一个模块,则该模块的结果将确定操作的结果。例如,passwd 应用程序的缺省验证操作包含一个模块 pam_passwd_auth.so.1


passwd  auth required           pam_passwd_auth.so.1

另一方面,如果为服务操作定义了多个模块,那么这些模块就堆叠起来,即,对于该服务存在一个 PAM 堆栈。例如,请考虑 pam.conf 包含以下项的情况:


login   auth requisite          pam_authtok_get.so.1

login   auth required           pam_dhkeys.so.1

login   auth required           pam_unix_cred.so.1

login   auth required           pam_unix_auth.so.1

login   auth required           pam_dial_auth.so.1

这些项表示 login 服务的 auth 栈样例。要确定此栈的结果,各个模块的结果代码需要进行集成处理。在集成处理中,模块按照 /etc/pam.conf 中指定的顺序执行。每个成功/失败代码都会根据模块的控制标志集成到整体结果中。控制标志会导致栈很早就终止。例如,requisite 模块可能会失败,而 sufficientbinding 模块则可能会成功。处理栈之后,各个结果会组合成一个整体结果并随后传送给应用程序。

控制标志用于指明 PAM 模块在确定对服务的访问方面所起的作用。五个控制标志及其作用如下所示:

下面的两个图说明了如何在集成处理中确定访问权限。第一个图说明如何为每种类型的控制标志记录成败信息。第二个图说明如何确定集成值。

图 3–2 PAM 堆栈:控制标志的影响

该流程图说明控制标志如何影响 PAM 堆栈。

图 3–3 PAM 堆栈:如何确定集成值

该流程图说明如何在 PAM 堆栈中确定集成值。