Я пытаюсь в течение 2 дней написать собственный PAM-скрипт, который аутентифицируется под Linux с помощью пользователя sys и передает его.
Я делал примеры в C, Python и Perl, но у меня такая же проблема со всеми из них.
Когда я тестирую скрипт в своей оболочке, все работает хорошо.
Я тестирую их с помощью
# ./script;echo $?
И получите 0 или 1 назад.
Но как только я пытаюсь использовать его с mod_authz_external и Apache, он перестает работать.
Даже с действительным пользователем я получаю 1 назад и не могу войти в систему.
Похоже, что проблема с PAM и, возможно, средой Apache.
Я где-то читал, что мне нужно установить переменные среды для использования PAM, но я понятия не имею.
Вот примеры в C, Perl и Python:
C: http://pastebin.com/v9Yn9xvK
Perl: http://pastebin.com/cqzqztYg
Python: http://pastebin.com/32cvvCjS
Выбирайте все, что вам нравится, они все равно работают... возвращают код выхода 0 или 1.
Всякая помощь или намек были бы оценены.
Благодарю!
Если вы аутентифицируете системного пользователя с помощью PAM, тогда он будет проходить через libpam_unix.so. Из man-страницы pam_unix:
Вспомогательный двоичный файл, unix_chkpwd (8), предоставляется для проверки пароля пользователя, когда он хранится в защищенной от чтения базе данных. Этот двоичный код очень прост и будет проверять только пароль пользователя, вызывающего его.
Поэтому, если вы хотите аутентифицировать пользователей с веб-сервера, вы, скорее всего, работаете как пользовательский "apache" или что-то в этом роде. Все, что может сделать pam_unix для вас, - это аутентификация пользователя apache, что, скорее всего, не то, что вы хотите. pwauth должен каким-то образом обойти это ограничение.