Я пытаюсь в течение 2 дней написать собственный скрипт PAM, который проходит аутентификацию под Linux с помощью sys user и pass.
Я сделал примеры на 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. Из справочной страницы pam_unix:
Предоставляется вспомогательный двоичный файл unix_chkpwd (8) для проверки пароля пользователя, когда он хранится в базе данных, защищенной от чтения. Этот двоичный файл очень прост и проверяет только пароль пользователя, который его вызывает.
Поэтому, если вы хотите аутентифицировать пользователей с веб-сервера, вы, скорее всего, работаете как пользователь ‘apache’ или что-то в этом роде. Все, что pam_unix может сделать для вас, — это аутентифицировать пользователя «apache», что, скорее всего, не то, что вам нужно. pwauth должен как-то обойти это ограничение.
Других решений пока нет …