Назад | Перейти на главную страницу

Проблемы 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

Я что-то делаю не так в своем файле 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 для разрешения входа в систему.