Настройка NTLM авторизации в Apache
Вторник, марта 20, 2012 | Автор:

Как оказалось, NTLM авторизация в Apache не совсем тривиальная задача.

Обычный модуль authnz_ldap_module не хотел работать, и сервер выдавал внутреннюю ошибку 500 Internal Server Error.  Порыскав в Интернете, нашел решение — использовать аналогичный Squid механизм авторизации через демон Samba — auth_ntlm_winbind_module.Для начала требовалось найти данный модуль, так как версии для портов FreeBSD не существует.  Вы можете скачать уже готовый отсюда.

Итак, приступим.

Первое – это установка Apache. В этом нет ничего сложного и ужасного, особенно при установке портов: make config и make install clean.

Далее устанавливаем  Samba, отметив только опции LDAP, ADS, WINBIND.

Теперь производим манипуляции с конфигурационными файлами. Сначала разберемся с Kerberos, создав файл /etc/krb5.conf, заполнив его приблизительно следующим содержимым:

[libdefaults]
default_realm = IT-VOLGA.ORG
[realms]
IT-VOLGA.ORG = {
kdc = tcp/192.168.1.1
admin_server = tcp/192.168.1.1
kpasswd_server = tcp/192.168.1.1
}
[domain_realm]
.it-volga.org = IT-VOLGA.ORG
.it-volga.org = IT-VOLGA.ORG
[login]
krb4_convert = true
krb4_get_tickets = false
[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5kdc.log
admin_server = FILE:/var/log/kerberos/kadmind.log

Нужно заметить, что в этом файле очень важен регистр букв.

Следующий файл – это файл с настройками Samba. Мне не нужна вся функциональность Samba, поэтому дефолтовый конфигурационный файл я переименовал в smb.conf.old и создал новый /usr/local/etc/smb.conf:

[global]
workgroup = DOMAIN
netbios name = svn
realm = domain.ru
server string = svn
hosts allow = 192.168.1 127.0.0.1

winbind separator =+

winbind use default domain = yes
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes

template homedir = /tmp/winnt/%D/%U
template shell = /bin/bash

max log size = 50
security = ADS
auth methods = winbind

password server = server
passdb backend = smbpasswd
case sensitive = no

Теперь нужно получить билет Kerberos при помощи команды kinit:

kinit –p administrator

Теперь добавляем в файл /etc/rc.conf автозапуск Apache (если до этого не добавили) и демонов Samba:

apache22_enable=»YES»
smbd_enable=»YES»
nmbd_enable=»YES»
winbindd_enable=»YES»

И пробуем запуcтить smbd, nmbd, winbindd вручную.Теперь проверяем работу winbindd при помощи команды wbinfo –p, на которую правильной реакцией является ответ «Ping to winbindd succeeded on fd 4».

Следующим шагом будет добавление машины в домен. Эта простая операция выполняется следующей командой:

#net rpc join –S server1 –w DOMAIN –U administrator

Итак, наша машина теперь – полноправный член домена.

Как я уже говорил выше, найти модуль под FreeBSD не удалось, но зато нашелся модуль под Debian. Самое главное, чтобы в найденном архиве был файлик mod_auth_ntlm_winbind.с, который нужно скомпилировать и установить. Делаем это следующим образом:

#/usr/local/sbin/apxs -DAPACHE2 -c -i mod_auth_ntlm_winbind.c

Теперь приступаем к последней стадии – настройке конфигурационного файла Apache. Перед этим создаем тестовую директорию /usr/local/www/apache22/data/test, в которой создаем тестовый файл index.html с любым содержанием. Итак, добавляем в конфиг /usr/local/etc/apache22/httpd.conf строку загрузки нашего модуля:

LoadModule auth_ntlm_winbind_module libexec/apache22/mod_auth_ntlm_winbind.so

и правила доступа к нашей тестовой директории, в виде вот такого блока:

<Directory «/usr/local/www/apache22/data/test»>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AuthName «NTLM Authentication»
AuthType NTLM
NTLMAuth on
NTLMAuthHelper «/usr/local/bin/ntlm_auth —helper-protocol=squid-2.5-ntlmssp —require-membership-of=SID»
NTLMBasicAuthoritative
AuthType NTLM
require valid-user
</Directory>

Где SID – это SID группы, которой требуется доступ к этой папке. SID группы можно узнать с помощью пакета инструментов PStools от Microsoft, в частности PsGetSid.