Sponsored LinksКатегорииLinksUnix Tutorial
Personal Development Ruslan Valiev Solaris Performance Team Damien Farnham Fintan Ryan Nicky Veitch Niall Mullen Sean McGrath DTrace Bryan Cantrill Brendan Gregg ZFS Tim Foster General Ben Rockwood Learning Solaris 10 Privacy policy Архивы |
Wednesday, 21 December. 2005DTrace: игры с mod_auth_pam и Apache 2
Один из пользователей попросил помочь ему с настройкой PAM аутентификации в Apache 2, на одном из наших удалённых серверов.
Казалось бы, простая до безобразия задача - скачать mod_auth_pam, скомпилировать его для Apache 2, и проверить, что всё работает. Система использует NIS, потому что я на неё смог запросто зайти. И что же? Не тут-то было! Модуль скомпилировался запросто, но работать отказывался - в error_log'е упорно появлялись следующие строки (я разбил строку на двое, а то портится общий вид блога): CODE: [Tue Dec 20 16:48:44 2005] [error] [client xxx.xxx.xxx.xxx] \ PAM: user 'greys' - not authenticated: No account present for user Всё это пользователь сделал сам, с моими мелкими наводками. На данной стадии он попросил дополнительной помощи, и я, дабы упростить задачу, решил: 1) Перевести эксперименты с системы пользователя на свой Solaris 10-бокс. 2) Для начала отладить процедуру для локальных пользователей, а уже потом браться за NIS Увидев аналогичные ошибки на своей системе, я решил всерьёз взяться за PAM. Завёл строки в /etc/pam.conf специально для Apache, и добавил к ним опцию debug: CODE: httpd auth required pam_authtok_get.so.1 debug httpd auth required pam_unix_auth.so.1 debug Чтобы удобнее ловилась отладочная информация, подправил /etc/syslog.conf, чтобы он включал следующие строки: CODE: auth.debug /var/log/auth_log user.debug /var/log/user_log После этого стало удобнее наблюдать, что же именно происходит - по крайней мере, было ясно, что исполняется как раз та часть /etc/pam.conf, которая и была нужна. Но ошибка по-прежнему вводила меня в тупик - пользователь явно существовал, но Apache'м упорно не распознавался (опять приходится переносить строки, чтобы общий вид блога не портился): CODE: Dec 21 09:47:35 pele httpd[29143]: [ID 634615 user.debug] \ pam_authtok_get:pam_sm_authenticate: flags = 1 Dec 21 09:47:35 pele httpd[29143]: [ID 378613 user.debug] \ pam_dhkeys: user greys not found Dec 21 09:47:35 pele httpd[29143]: [ID 896952 user.debug] \ pam_unix_auth: entering pam_sm_authenticate() Dec 21 09:47:35 pele httpd[29143]: [ID 219349 user.debug] \ pam_unix_auth: user greys not found Настал момент посмотреть, что же именно делают PAM и Apache 2, когда я ввожу запрашиваемые имя пользователя и пароль для доступа к странице. Тут я сразу вспомнил про замечательный скрипт opensnoop от товарища Брэндана Грэгга (Brendan Gregg). И данный скрипт, запущенный в отдельной консоли, тут же помог мне увидеть, в чём была проблема: CODE: 60001 24744 httpd -1 2 /etc/pam_debug 60001 24744 httpd 11 0 /etc/pam.conf 60001 24744 httpd 11 0 /usr/lib/security/pam_authtok_get.so.1 60001 24744 httpd 11 0 /usr/lib/passwdutil.so.1 60001 24744 httpd 11 0 /usr/lib/libsldap.so.1 60001 24744 httpd 11 0 /usr/lib/security/pam_dhkeys.so.1 60001 24744 httpd 11 0 /usr/lib/security/pam_unix_cred.so.1 60001 24744 httpd 11 0 /lib/libbsm.so.1 60001 24744 httpd 11 0 /lib/libsecdb.so.1 60001 24744 httpd 11 0 /usr/lib/libproject.so.1 60001 24744 httpd 11 0 /lib/libproc.so.1 60001 24744 httpd 11 0 /lib/librtld_db.so.1 60001 24744 httpd 11 0 /lib/libelf.so.1 60001 24744 httpd 11 0 /lib/libctf.so.1 60001 24744 httpd 11 0 /usr/lib/security/pam_unix_auth.so.1 60001 24744 httpd -1 2 /var/run/syslog_door 60001 24744 httpd -1 13 /etc/shadow 60001 24744 httpd 11 0 /var/run/name_service_door 60001 24744 httpd 11 0 /etc/passwd 60001 24744 httpd -1 13 /etc/shadow 60001 24744 httpd -1 2 /var/run/syslog_door Как видно, httpd не мог открыть файл /etc/shadow (ошибка - код -1), естественно из-за ошибки доступа. Но на всякий случай это можно было проверить. Второй номер в строке про /etc/shadow - это 13, код ошибки: CODE: bash-3.00# grep 13 /usr/include/sys/errno.h #define EACCES 13 /* Permission denied */ Ну и после этого всё уже было делом техники: CODE: #groupadd shadows # chown root:shadows /etc/shadow # chmod 440 /etc/shadow И осталось указать в httpd.conf, чтобы Apache запускался как раз под этой группой, а не под nobody. pS: а изначально это всё не работало на машине с NIS-доступом, потому что там в /etc/nsswitch.conf было написано не passwd: files nis, а passwd: compat, и всё использование NIS'а было сделано с помощью указания групп с помощью + и - в файлах /etc/passwd и /etc/shadow. Т.е. доступ на чтение /etc/shadow всё равно нужен, хотя реально потом это и будет обращение к NIS. Обратные ссылки
URI этой записи для создания обратных ссылок (trackback)
Нет обратных ссылок
Комментарии
Показывать комментарии
(Как список | Древовидной структурой)
Хозяин - барин! Сервак не мой, и я вообще говорил Sun'овский ONE Web или любой Netscape'овский веб-сервер юзать, он замечательно с LDAP умеет работать. Но хотели именно это.
Apache запускается (будет, по крайней мере, если меня послушают) под определённым юзером, и это только для конкретной одной задачи внутри интранета - так что если хотят NIS в Apache именно в такой конфигурации, то вот им решение. Хотя, я думаю, если сделать в nsswitch.conf строчку passwd: files nis, то этакий изврат с группой shadows не понадобится вовсе!
Дык и под апач есть модули для авторизации через LDAP.
Имеются в виду модули, написанные на Perl? Я никогда не занимался этим вопросом прежде, так что любая полезная информация будет очень кстати ;) Но мне не понравилась идея с модулями, написанными на Perl - слишком много зависимостей. Если подобную вещь понадобится перенести на другой сервер, вся волокита повторится. С mod_auth_pam вроде попроще оказался вариант.
Ещё одна вещь - похоже на то, что нету ни одного модуля аутентификации, который бы регулярно обновлялся и дорабатывался? Или всё же что-то есть? Заранее спасибо!
Perl тут нипричём. Навскидку - в стандартную поставку Apache 2.0.x входит модуль mod_auth_ldap - http://httpd.apache.org/docs/2.0/mod/mod_auth_ldap.html
Написан полагаю на чистом Си ;)
Ну я тоже удивлюсь, если это не Си ;)
Глеб, а Вы вот эту страницу, посвященную DTrace, видели?
http://users.tpg.com.au/adsln4yb/dtrace.html
Добрый день, Дмитрий! Конечно же, я видел эту страницу. Я даже ссылку на скрипт opensnoop дал именно с этой страницы?
Ах да, извините, просмотрел ссылку под словом "opensnoop" :)
Наверное такая замечательная страница стоит того, чтобы ее отдельным постом "попеарили" :)
Автор, пиши ещё))
Очень интересный и полезный блог, читаю с удовольствием. Но почему так давно нет обновлений!??
Обновлений нет, потому что после праздников приходится впахивать на работе! ;) Но ситуация уже нормализуется, так что на днях продолжим :)
|




