在 Oracle® Solaris 11.2 中管理 Kerberos 和其他验证服务

退出打印视图

更新时间: 2014 年 9 月
 
 

PAM 栈

如果配置文件仅包含一个模块,则该模块的结果将决定操作的结果。例如,passwd 应用程序的缺省验证操作包含一个模块,即 /etc/pam.d/passwd 文件中的 pam_passwd_auth.so.1

auth required           pam_passwd_auth.so.1

另一方面,如果由多个模块实现一个服务,则这些模块被视为堆叠,也就是说,该服务名称存在 PAM 栈。例如,考虑 /etc/pam.d/login 服务示例中的以下项:

auth definitive         pam_user_policy.so.1
auth requisite          pam_authtok_get.so.1
auth required           pam_unix_auth.so.1
auth required           pam_dhkeys.so.1
auth required           pam_unix_cred.so.1
auth required           pam_dial_auth.so.1

这些项将为 login 服务名称创建一个 auth 栈。要确定此栈的结果,各个模块的结果代码需要进行集成处理

在集成过程中,模块按照其在文件中的顺序执行。每个成功/失败代码都会根据模块的控制标志集成到整体结果中。控制标志可能会导致栈很早就终止。例如,requisitedefinitive 模块失败会终止栈。即使先前没有任何模块失败,sufficientdefinitivebinding 模块的成功也会终止栈。处理栈之后,各个结果会合并成单个整体结果,然后传送给应用程序。有关该流程的图形,请参见Figure 1–2Figure 1–3

    控制标志指示 PAM 模块在确定成功失败时所起的作用。控制标志及其作用如下所述:

  • Binding-如果先前未记录到任何模块失败,则成功满足 binding 模块的要求后,会立即向应用程序返回成功信息。如果满足这些条件,则不会进一步执行模块。

    如果失败,则会记录必需的失败信息并继续处理模块。

  • Definitive-如果先前未记录到任何模块失败,则成功满足 definitive 模块的要求后,会立即向应用程序返回成功信息。

    如果先前记录到某个模块失败,则会立即向应用程序返回该失败信息,而不会进一步执行模块。如果失败,则会立即返回错误信息,而不会进一步执行模块。

  • Include-添加单独的 PAM 配置文件中的行,以便在 PAM 栈中的此点使用。此标志不控制成功或失败行为。读取一个新文件时,PAM include 栈的值会递增。当新文件中的栈检查完成时,include 栈的值会递减。当到达文件末尾,并且 PAM include 栈的值为 0 时,栈处理将结束。PAM include 栈的最大数为 32

  • Optional-不必成功满足 optional 模块的要求即可使用服务。

    如果失败,则会记录可选的失败信息。

  • Required-必须成功满足 required 模块的要求才能使该栈成功。仅当 binding 模块或 required 模块均没有报告失败时,才会返回该栈最终成功的信息。

    如果失败,则执行该服务的其余模块后会返回错误信息。

  • Requisite-必须成功满足 requisite 模块的要求才能使该栈成功。仅当栈中的所有 requisite 模块都返回成功信息时,该栈才能向应用程序返回成功信息。

    如果失败,则会立即返回错误信息,而不会进一步执行模块。

  • Sufficient-如果先前未记录到任何 required 模块失败,则成功满足 sufficient 模块的要求后,会立即向应用程序返回成功信息,而不会进一步执行模块。

    如果失败,则会记录可选的失败信息。

    以下两个相连的图显示了在集成过程中如何确定结果。

  • 第一个图显示了每种类型的控制标志如何记录成功失败信息。结果显示在第二个图中。

  • 第二个图说明如何确定集成值。Optional 模块失败和 required 模块失败会返回失败代码,成功则会返回成功代码。应用程序将决定如何处理这些返回码。

图 1-2  PAM 栈:控制标志的作用

image:流程图中显示了控制标志如何影响 PAM 栈。

图 1-3  PAM 栈:如何确定集成值

image:流程图中显示了如何在 PAM 栈中确定集成值。