PAM 的“success=N”操作问题

PAM 的“success=N”操作问题

我想在身份验证失败时运行一个脚本。但是,使用以下 conf 文件,即使提供了正确的凭据,身份验证也总是失败。

auth       [success=1 new_authtok_reqd=ok ignore=ignore default=bad] pam_unix.so
auth       optional     pam_exec.so  /usr/bin/log_failure
password   required     pam_unix.so  md5

身份验证通过将“success=1”更改为“success=ok”来实现,但显然失败脚本将始终运行。

我尝试查看 _pam_dispatch_aux 的源代码,当没有规则可跳转时,它似乎不会返回第一个规则的返回值。如果我添加另一个规则以便有可跳转的内容,则一切正常。

auth       [success=1 new_authtok_reqd=ok ignore=ignore default=bad]  pam_unix.so 
auth       optional     pam_exec.so  /usr/bin/log_failure
auth       optional     pam_exec.so  /usr/bin/noop
password   required     pam_unix.so  md5

我是否在配置文件中做错了什么,尝试了一些不应该起作用的事情,或者存在错误?

答案1

一切如预期般顺利。

success=n不影响模块堆栈的返回。结果是,成功的身份验证将pam_unix.so返回失败(因为没有返回successokdone,而失败的身份验证将返回失败(正如预期的那样,因为pam_exec.so在这种情况下返回成功会非常糟糕)。

请尝试以下操作:

auth       sufficient   pam_unix.so
auth       optional     pam_exec.so  /usr/bin/log_failure
password   required     pam_unix.so  md5

sufficient意思是“如果成功则在此停止,否则继续”。这应该会产生预期的效果。

如果 /usr/bin/log_failure 是一个脚本,我内心的安全狂热分子会更倾向于尝试这个……

auth       sufficient   pam_unix.so
auth       [default=ignore]     pam_exec.so  /usr/bin/log_failure
password   required     pam_unix.so  md5

这会阻止 log_failure 返回的成功允许登录。

相关内容