В корпоративной среде задачу авторизации пользователей обычно решает
Active Directory. Это и удобно, и надежно, и безопасно. Трудности
начинаются в гетерогенных средах, когда необходимо связать unix-like и
Windows системы. Одна из самых типовых задач, которая возникает в
реальной жизни — прозрачная авторизация пользователя из Active Directory
на веб-сервере под управлением Apache.
http://modntlm.sourceforge.net/mod_ntlm.tar.gz — Для Apache 1.x http://modntlm.sourceforge.net/mod_ntlm2.tar.gz — Для Apache 2.x Распаковываем архив:
tar -zxvf ntlm.tar.gz
Необходимо обновить систему:
sudo apt-get update
sudo apt-get install apache2-prefork-dev gcc-4.6
(если gcc присуствует в системе, то ни установка, ни линковка не потребуются)
Линкуем компилятор gcc версии 4.6 с установленным в системе:
ln -fs /usr/bin/gcc-4.6 /usr/bin/gcc
Далее компилируем mod_ntlm.c
apxs2 -i -a -c mod_ntlm.c
Если компилятор выкидывает ошибки о статических переменных, необходимо подкорректировать файл ./smbval/smblib.inc.c — убрать атрибут static у переменныx:
echo «LoadModule ntlm_module /usr/lib/apache2/modules/mod_ntlm.so» > /etc/apache2/mods-available/ntlm.load
Запустить модуль
a2enmod ntlm
Если возникает ошибка в функции apr_pool_sub_make(), то в файле mod_ntlm.c заменяем функцию
apr_pool_sub_make(&sp, p, NULL)
на
apr_pool_create_ex(&sp, p, NULL, NULL),
Описание среды
- Домен Active Directory по управлением Windows 2003 Server
- Ubuntu Server 12.04 c веб-сервером Apache 2.2.
Решение
Скачиваем модуль mod_ntlm для Apache.http://modntlm.sourceforge.net/mod_ntlm.tar.gz — Для Apache 1.x http://modntlm.sourceforge.net/mod_ntlm2.tar.gz — Для Apache 2.x Распаковываем архив:
tar -zxvf ntlm.tar.gz
Необходимо обновить систему:
sudo apt-get update
Устанавливаем gcc:
sudo apt-get install gcc
Устанавливаем Apache prefork и gcc 4.6:sudo apt-get install apache2-prefork-dev gcc-4.6
(если gcc присуствует в системе, то ни установка, ни линковка не потребуются)
Линкуем компилятор gcc версии 4.6 с установленным в системе:
ln -fs /usr/bin/gcc-4.6 /usr/bin/gcc
Далее компилируем mod_ntlm.c
apxs2 -i -a -c mod_ntlm.c
Если компилятор выкидывает ошибки о статических переменных, необходимо подкорректировать файл ./smbval/smblib.inc.c — убрать атрибут static у переменныx:
SMBlib_errno
SMBlib_SMB_Error
SMB_State_Types
SMBlib_state
Далее, в /etc/apache2/mods-available создать файл ntlm.load и добавить в него строку с загрузкой модуля:SMBlib_state
echo «LoadModule ntlm_module /usr/lib/apache2/modules/mod_ntlm.so» > /etc/apache2/mods-available/ntlm.load
Запустить модуль
a2enmod ntlm
Если возникает ошибка в функции apr_pool_sub_make(), то в файле mod_ntlm.c заменяем функцию
apr_pool_sub_make(&sp, p, NULL)
на
apr_pool_create_ex(&sp, p, NULL, NULL),
перекомпилируем mod_ntlm.с и снова добавляем модуль
a2enmod ntlm
В файле /etc/apache2/httpd.conf добавляем:
AuthType NTLM NTLMAuth on NTLMAuthoritative on NTLMDomain NTLMServer Require valid-user
здесь в Document пишется путь к хосту, на который нужно установить NTLM.
Перезапускаем Apache
/etc/init.d/apache2 restart
Такая настройка проверена на Ubuntu 8.04, 8.10, 9.04. 12.04