PAM - 需要和足够的控制标志

lud*_*egu 15 authentication pam

我正在研究 PAM,我对某些控制标志组合的含义一无所知。从 Red Hat 文档中,我们有:


  • 这种 PAM所需的失败将最终导致 PAM-API 返回失败,但只有在调用剩余的堆叠模块(针对此服务和类型)之后

  • 必需
    等所需,然而,在这样的模块返回失败的情况下,控制被直接返回到应用程序。


  • 这种模块的足够成功足以满足模块堆栈的身份验证要求(如果先前所需的模块失败,则忽略此模块的成功)。此模块的失败对于满足此类型已成功的应用程序而言并不认为是致命的。如果模块成功,PAM 框架会立即向应用程序返回成功,而不会尝试任何其他模块。

所以,在我的理解中,如果一个模块requisite发生故障,整个模块栈将不会被解析,控制权会立即返回给应用程序。如果一个模块sufficient成功,其余的模块堆栈将不会被解析,控制权将立即返回给应用程序。如果一个模块required失败,整个堆栈将被解析。

现在,我无法理解当某个模块required失败而另一个模块sufficient成功时会出现什么行为。

Gil*_*il' 15

PAM 按顺序处理堆栈上的项目。它只记住它处于什么状态(成功或被拒绝,成功意味着到目前为止成功),而不是它如何达到那个状态。

如果标记sufficient成功的项目,PAM 库将停止处理该堆栈。无论是否有以前的required项目,都会发生这种情况。此时,PAM 返回当前状态:如果前required一项没有失败,则为成功,否则为拒绝。

同样,如果标记为requisite失败的项目,PAM 库将停止处理并返回失败。在这一点上,前一个required项目是否失败无关紧要。

换句话说,required不一定会导致处理整个堆栈。它只是意味着继续前进。

  • @MohammedNoureldin 即使登录尝试失败,也必须做一些事情,例如记录日志、添加针对暴力尝试的超时等。此外,系统通常不会透露失败的确切原因,例如,如果查找username 失败,则仍会提示用户输入密码。 (2认同)