p0six ([info]p0six) wrote,

djabberd pidgin и ntlm-авторизация

На днях на глаза попался djabberd ( http://www.danga.com/djabberd ) - реализация высокопроизводительного расширяемого xmpp-сервера, который, кстати, используется в сервисе ljtalk. Проект заинтересовал прежде всего тем, что это не просто yet another реализация велосипеда, а настоящий конструктор для сборки произвольных велосипедов с люльками, стерео-магнитолами на дизельной тяге с аэродинамическими формами. Естественно руки просто зачесались сделать свой сервер с нужным мне функционалом.
Меня прежде всего интересовала возможность интеграции сервиса IM с AD и возможность прозрачной ntlm-авторизации для клиентов. На сколько мне известно поддержка ntlm-авторизации есть в openfire, но она работает только на платформе M$. Но как организовать подобное на linux? На linux есть winbind, который поддерживает серверный вариант протокола ntlm v2. Для авторизации можно использовать утилиту ntlm_auth (как например делается в прокси-сервере squid для ntlm-авторизцации на прокси или модуле для apache mod_auth_ntlm_winbind).
Ок, с сервером вроде бы всё ясно, но вот с IM-клиентами, поддерживающими ntlm-авторизацию не всё так хорошо, по крайне мере ни один из opensource пейджеров не умеет ntlm. Написал патч для pidgin'а, но, к сожалению, есть регресс: поскольку реализовывать поддержку ntlm надо было в cyrus-sasl, а этим заниматься категорически не хотелось, поэтому сборка делается без cyrus-sasl и поддерживаются только три механизма: digest-md5, plain ну и заветный ntlm.


плагин Djabberd-SASL-NTLM. ( http://xrt.no-ip.org/pidgin/DJabberd-SASL-NTLM.tar.gz )
Пока это просто хак, "который просто работает" (C). В конфигурацию djabberd добавляется такие строки:

<Plugin DJabberd::SASL::NTLM>
Optional yes
NTLMAuthHelper /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
</Plugin>

После чего xmpp-сервер будет анонсировать наличие механизма NTLM для SASL-авторизации. Это также требует настроенного winbind на сервере и чтобы пользователь, под которым запускается xmpp-сервер, входил в группу winbind_privileged.


Набор патчей для Pidgin 2.5.5 для ntlm-авторизации (только для win32):

* pidgin-2.5.5-ntlmsspi.patch ( http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlmsspi.patch ) - общая поддержка механизма прозрачной ntlm-авторизации (нужен для обоих последующих патчей)
* pidgin-2.5.5-ntlmauth.patch ( http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlmauth.patch ) - ntlm-авторизация на xmpp-сервере
* pidgin-2.5.5-ntlmproxy.patch ( http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlmproxy.patch ) - ntlm-авторизация на прокси-сервере

Т.о. если требуется настроить в Pidgin прозрачную ntlm-авторизацию на xmpp-сервере, то в настройках соединения указываются *произвольные* логин и пароль (просто иначе кнопка создать учётку будет неактивна). При авторизации будут использоваться учётные данные с которым пользователь вошёл в систему (вида domain\user )

Третий патч нужен если требуется выход через корпоративный прокси (какой протокол ICQ, Jabber, MSN... не важен), требующий ntlm-авторизацию. В настройках соединения указывается тип прокси "использовать настройки окружения".


Для тех кому лень собирать самому в cygwin'е, есть готовая сборка pidgin:
pidgin-2.5.5 (все патчи): http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlm.exe
md5sum: http://xrt.no-ip.org/pidgin/pidgin-2.5.5-ntlm.exe.md5sum
Tags: djabberd, ntlm, pidgin, xmpp

  • Post a new comment

    Error

  • 0 comments
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…