четверг, 23 августа 2007 г.

Прозрачная авторизация LDAP.

В продолжение поста про авторизацию LDAP, опишу своё решение этой проблемы. Если сервер крутится на Win, то существует mod_auth_sspi.so для Apache, который позволяет делать прозрачный вход для пользователя, авторизованного в домене. Но у меня сервер под Solaris 9, следовательно этот модуль мне не подошёл.

Остается 2 варианта:

  1. mod_auth_ntlm_winbind
  2. mod_ntlm

Причем mod_auth_ntlm_winbind считается намного лучше, чем mod_ntlm, который особо и не развивается и не поддерживается. А mod_auth_ntlm_winbind вышел из проекта Samba, и соответственно он жив. Т.е. по логике вещей надо ставить его. Есть только одно "НО"...зависимости. И список их впечатляет:

  • Samba 3 с Winbind
  • Kerberos
  • SSL

Вот этот список с моими неАдминскими правами и отсутствием времени мне и не захотелось поднимать. Причем это всё надо не просто установить...но и настроить. Соответственно, разбираться в этом пришлось бы. А времени не было. Поэтому было принято решение устанавливать mod_ntlm

С mod_ntlm тоже были проблемы. Он не хотел собираться и инсталлироваться. Никак не хотел. Длительный поиск по инету привел меня вот на эту страницу, где я прочёл что надо поправить в source, чтобы всё нормально собиралось. Рекомендую.

Дальше, подключаем mod_ntlm в httpd.conf, и пишем в дирректории, где у нас будет происходить авторизация в .htaccess (ну или прямо в httpd.conf прописываем):

AuthType NTLM
AuthName "NTLM authentication"
NTLMAuth On
NTLMAuthoritative Off
NTLMDomain DOMAIN_NAME
NTLMServer SERVER_ALIAS
require valid-user

Вроде работает. Если скрестить со скриптом из топика, то вытаскивается логин пользователя в домене. Если почистить его от непечатных (не ASCII) символов со помощью регулярки:

$login = preg_replace('/[\x00-\x0d]/i', '', $login);

то получим читабельный логин. И под FireFox (который правда не отсылает заголовки по умолчанию, так что с ним прозрачности нет) и под IE.

Ну а релогин пользователю выполняется просто. Если файлик, выполняющий аутентификацию у нас лежит в папочке, которая проверяется mod_ntlm, то после того, как они поговорят с браузером о логинах и хэшах автоматически, надо отправить клиенту заголовок 401, тем самым вынудив браузер выкинуть формочку для ввода логина и пароля. Т.е. мы имитируем неправильную аутентификацию.

Правда есть один неприятный момент, который я не решил. Баг. Он проявляется, если несколько раз подряд пытаться выполнить релогин. То в логах Apache появится вот такая ошибка:

[error] 11762 - SMB_Logon_Server: SMB_SessSetupAndX failed; errorclass = 1, Error Code = 5\n
2905896 12224 /login/tmp.php - PDC connection already closed
[notice] child pid 11762 exit signal Segmentation fault (11)

А вот если делать его аккуратно и не часто, то всё ок. Мне кажется это проблема самого модуля, и способа её устранить я не нашел.

11 комментариев:

Unknown комментирует...

Интересный блог. В избранное.

Анонимный комментирует...

Кстати, если вам когда-нибудь потребуется заглушить чей-нибудь сотовый телефон или другое средство связи, то попробуйте воспользоваться для этого Блокиратор сотового телефона.

Анонимный комментирует...

А знаете ли вы что, если вам однажды понадобится заглушить чей-нибудь мобильный телефон или другое средство связи, то попробуйте использовать для этого Блокиратор сотового.

Анонимный комментирует...

Кстати, если вам вдруг понадобится заблокировать чей-либо сотовый телефон или другое средство связи, то попробуйте воспользоваться для этого Блокиратор сотового.

Анонимный комментирует...

It was extremely interesting for me to read that blog. Thank you for it. I like such topics and anything that is connected to them. I would like to read more soon.
Alex
Phone blocker

Анонимный комментирует...

Очень интересно и познавательно!
http://www.vsebank.inf
Блог - в избранное!

Анонимный комментирует...

Rather interesting site you've got here. Thanx for it. I like such themes and everything connected to this matter. I definitely want to read more on that blog soon.

Best wishes
Darek Wish

Анонимный комментирует...

Хорошая статья. Действительно было интересно почитать. Не часто такое и встречается та.Наверное стоит подписаться на ваше RSS

Анонимный комментирует...

Безусловно, над этим проектом работал Максим. Элеeктронная энциклопeедия “Родная зeемля, молодая и древняя”, автором которой является Максим, - издание необычное ужeе тем, что в него вошли аннотации к художествеeнным книгам, где историчeеское действие разворачивается на территории Казахстана.

Всё о телефонах Sony Ericsson комментирует...

Та же проблема, что и с мобильными телефонами - авториззация, pin, puk

college board комментирует...

Having read this material, I have learned for myself a lot of the new. Thanks