我想在发生身份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返回失败(因为没有任何事情返回ok
或done
的success
),并且失败的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。