“成功= N”行为的PAM问题

我想在发生身份validation失败时运行脚本。 但是,使用以下conf文件,即使提供正确的凭据,身份validation也始终失败。

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 

身份validation通过将“成功= 1”更改为“成功=确定”,尽pipe显然失败脚本将始终运行。

我试着查看_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 

我在我的conf文件中做错了什么,尝试一些不应该工作的东西,还是有错误?

这是按预期工作的。

success=n不会返回模块堆栈。 结果是,对pam_unix.so的成功validation返回失败(因为没有任何事情返回okdonesuccess ),并且失败的validation返回失败(正如所料,因为在这种情况下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返回的成功允许login。