Я хочу запустить сценарий при сбое аутентификации. Но со следующим файлом 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
Я что-то делаю не так в своем файле conf, пытаюсь сделать что-то, что не должно работать, или есть ошибка?
Это работает как задумано.
success=n
не способствует возврату стека модулей. В результате успешная аутентификация против pam_unix.so
возвращает ошибку (потому что ничего не возвращает success
из ok
или done
), а неудачная аутентификация возвращает ошибку (как и ожидалось, потому что 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 для разрешения входа в систему.