Как получить аутентификацию PAM, работая с Apache и mod_authnz_external?

0

Я пытаюсь в течение 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.

Всякая помощь или намек были бы оценены.

Благодарю!

  • 0
    В итоге я изменил исходный код pwauth ( code.google.com/p/pwauth ) под свои нужды. Но мне все еще любопытно, почему мои попытки не работают. Я думаю, что я попытаюсь сравнить исходный код pwauth с моим решением C ...
Теги:

1 ответ

0

Если вы аутентифицируете системного пользователя с помощью PAM, тогда он будет проходить через libpam_unix.so. Из man-страницы pam_unix:

Вспомогательный двоичный файл, unix_chkpwd (8), предоставляется для проверки пароля пользователя, когда он хранится в защищенной от чтения базе данных. Этот двоичный код очень прост и будет проверять только пароль пользователя, вызывающего его.

Поэтому, если вы хотите аутентифицировать пользователей с веб-сервера, вы, скорее всего, работаете как пользовательский "apache" или что-то в этом роде. Все, что может сделать pam_unix для вас, - это аутентификация пользователя apache, что, скорее всего, не то, что вы хотите. pwauth должен каким-то образом обойти это ограничение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню