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


14

我正在学习PAM,对于控制标志的某种组合的含义我一无所知。从Red Hat文档中,我们可以得到:


  • 这种PAM的必要失败最终将导致PAM-API返回失败,但是仅在调用了其余的堆叠模块(针对该服务和类型)之后

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


  • 这种模块的足够成功足以满足模块堆栈的认证要求(如果先前的必需模块失败,则忽略该模块的成功)。此模块的故障不认为是满足该类型成功的应用程序的致命危险。如果模块成功,则PAM框架会立即将成功返回给应用程序,而无需尝试任何其他模块。

因此,据我所知,如果一个模块requisite发生故障,则不会解析整个模块堆栈,并且控件将立即返回给应用程序。如果模块sufficient成功,则不会解析其余的模块堆栈,并且控件将立即返回到应用程序。如果模块required发生故障,则将解析整个堆栈。

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

Answers:


11

PAM依次处理堆栈中的项目。它仅保留其所处状态的信息(成功或否定,到目前为止,成功表示成功),而不是状态的存储方式。

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

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

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


但是,如果有任何required项目失败,为什么PAM需要继续遍历整个堆栈?反正最终会失败吗?
Mohammed Noureldin

1
@MohammedNoureldin即使登录尝试失败,也必须做一些事情,例如记录日志,为强行尝试添加超时等。通常,系统也不会显示失败的确切原因,例如查找用户名失败,然后仍然提示用户输入密码。
吉尔斯(Gillles)“所以-别再邪恶了”

该顺序是它们在配置中列出的顺序?
OrangeDog

@OrangeDog是的。在第一行中列出的模块被执行,则执行所述第二线(或跳过取决于第一线的结果)等
吉尔“SO-停止尚且”

1

我认为,required为了使模块成功,控制标志必须始终是成功的。

如果sufficient标记的模块失败,则将其忽略。如果成功,并且required上面没有标记的模块发生故障,则无需检查其他相同类型的模块,并且该模块被视为成功。因此,基本上,该required标志比该标志具有更高的优先级,sufficient但是如果前一个标志成功,则后者可以停止检查其余标志required

例:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

如果第1、2、3和4行成功,则可以跳过第5行并且模块auth成功。如果第4行不成功,则将其忽略并检查第5行。如果第1、2、3行中的任何一个失败,则不考虑第4行。


1
我认为他的问题是,如果1失败并且2-4成功,将会发生什么。5跑吗?如果1成功,则不会运行5。或者换句话说,如果先前所需的模块失败,则“在成功之后停止”是否适用?
cjm 2013年

不,通过这种组合,身份验证模块将失败。
dsmsk80 2013年

问题不是授权是否会失败。它会。问题是在将该故障报告给应用程序之前,模块5是否将运行。
cjm 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.