![]() |
О программе Скачать Цены Клиенты Поддержка Партнеры Контакты | ![]() |
![]() |
Служба поддержки Вопрос-ответ Документация О разработчиках |
Настройка AD-аутентификации в Apache под Linux и FreeBSD¶
Работу можно разбить на два этапа — установка и настройка Kerberos (низкоуровневая работа с ключами и авторизация в домене) и настройка модуля веб-сервера.
Настройка Kerberos¶
Для аутентификации в доменах AD под ОС Linux и FreeBSD используется MIT Kerberos V. Нам понадобятся только клиентские библиотеки и утлиты, серверная часть MIT Kerberos не нужна, т. к. в качестве сервера выступает контроллер домена AD под Windows. Нужно установить соответствующиt пакет, в зависимости от дистрибутива:
Debian, Ubuntu
apt-get install krb5-userRHEL, Fedora
yum install krb5-client-appsSLES, OpenSUSE
zypper install krb5-client
После установки пакета, необходимо настроить его для домена. Параметры конфигурации Kerberos находятся в файле /etc/krb5.conf:
[libdefaults]
default_realm = IPI.LOCAL
[realms]
IPI.LOCAL = {
kdc = w2003.ipi.local
}
[domain_realm]
.ipi.local = IPI.LOCAL
ipi.local = IPI.LOCAL
В данном примере:
w2003.ipi.local
fqdn адрес KDC (AD) сервера.IPI.LOCAL
доменсекция domain_realm
используется для управления привязками url <=> domain. Т.е. если адрес у вебсервера будет abc.xyz.ru, но домен — IPI.LOCAL, то необходимо прописать привязку abc.xyz.ru = IPI.LOCAL или .xyz.ru = IPI.LOCAL. Если этого не сделать, то по умолчанию для адреса abc.xyz.ru доменом будет XYZ.RU.
Файл /etc/krb5.conf должен быть доступен для чтения всем пользователям системы (рекомендуемые права доступа — 644):
$ ls -l /etc/krb5.conf
-rw-r--r-- 1 root root 152 2011-09-23 14:48 /etc/krb5.conf
Далее нужно проверить, может ли эта конфигурация дать нам возможность работы в домене (если доступа с линукса до AD сервера прямого нет (например сервер находится в интернете, а контроллер AD - в офисной сети), то этот шаг можно пропустить, но без него ловить ошибки намного сложнее):
$ kinit Administrator
Password for Administrator@IPI.LOCAL:
$ klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: Administrator@IPI.LOCAL
Valid starting Expires Service principal
09/23/11 14:50:50 09/24/11 00:50:51 krbtgt/IPI.LOCAL@IPI.LOCAL
renew until 09/24/11 14:50:50
$ kdestroy
kinit запрашивает у контроллера домена ключ авторизации для указанного пользователя — так называемый ticket-granting ticket. При этом запрашивается пароль (нужно ввести пароль соответствующего пользователя AD). Комманда klist показывает текущие действующие ключи авторизации. А kdestroy это некий logout: эта команда удаляет все полученные ключи, если таковые имеются.
Если авторизация проходит нормально, и AD выдаёт нам ключ, можно приступать к следующему шагу.
Создание ключа Kerberos для UNIX-машины¶
Для начала нужно создать в AD учётную запись для сервиса Apache на UNIX-машине. Открываем Administrative Tools -> Active Directory Users and Computers -> Computers -> клик правой кнопкой -> New -> Computer. Вводим имя учётной записи — в нашем примере это будет linuxbox. Жмём Next, Next, Finish. В списке компьютеров должна появиться учётная запись linuxbox.
Теперь нам нужно создать ключ, который Apache на UNIX-машине будет использовать для аутентификации доменных пользователей. Ключ создаётся на Windows-машине с помощью утилиты ktpass.exe. В Windows Server 2003 её нужно установить из пакета Microsoft Server SupportTools, имеющегося на диске с Windows Server. В Windows Server 2008 она уже установлена. Открываем окно командной строки (cmd.exe) и набираем:
Для Windows Server 2003:
ktpass -princ HTTP/linuxbox.ipi.local@IPI.LOCAL -mapuser linuxbox$@IPI.LOCAL -crypto RC4-HMAC-NT -ptype KRB5_NT_SRV_HST +rndpass -out c:\keytab
Для Windows Server 2008:
ktpass -princ HTTP/linuxbox.ipi.local@IPI.LOCAL -mapuser linuxbox$@IPI.LOCAL -crypto ALL -ptype KRB5_NT_SRV_HST +rndpass -out c:\keytab
Здесь HTTP/linuxbox.ipi.local@IPI.LOCAL — имя принципала Kerberos для нашего HTTP-сервера на UNIX-машине. Вместо linuxbox.ipi.local нужно подставить правильное DNS-имя вашей UNIX-машины, на которой будет запущен IPI.Manager, а вместо IPI.LOCAL — ваш домен. linuxbox$@IPI.LOCAL — имя учётной записи, которую мы только что создали, вместе с именем домена. Обратите внимание, после имени здесь добавляется знак $, чтобы команда ktpass.exe догадалась, что это учётная запись компьютера, а не человека.
На вопрос «Reset LINUXBOX$’s password [y/n]?» нужно ответить y.
Результат выполнения команды должен быть примерно таким:
Targeting domain controller: win2003-virtual.ipi.local
Using legacy password setting method
Successfully mapped HTTP/linuxbox.ipi.local to LINUXBOX$.
WARNING: Account LINUXBOX$ is not a user account (uacflags=0x1021).
WARNING: Resetting LINUXBOX$'s password may cause authentication problems if LINUXBOX$ is being used as a server.
Reset LINUXBOX$'s password [y/n]? y
Key created.
Output keytab to c:\keytab:
Keytab version: 0x502
keysize 67 HTTP/linuxbox.ipi.local@IPI.LOCAL ptype 3 (KRB5_NT_SRV_HST) vno 7 etype 0x17 (RC4-HMAC) keylength 16 (0x3c6a3271e382f041dcf2c82b7f413383)
Полученный ключ надо скопировать на UNIX-машину и поместить, например, например, в /etc/krb5/ipi.keytab. После чего проверить его работоспособоность: без рабочего ключа работать ничего не будет!
$ klist -ket /etc/krb5/ipi.keytab
Keytab name: WRFILE:/etc/krb5/ipi.keytab
KVNO Timestamp Principal
---- ----------------- --------------------------------------------------------
3 01/01/70 03:00:00 HTTP/linuxbox.ipi.local@IPI.LOCAL (arcfour-hmac)
$ kinit -kt /etc/krb5/ipi.keytab HTTP/linuxbox.ipi.local@IPI.LOCAL
$ kvno HTTP/linuxbox.ipi.local@IPI.LOCAL
HTTP/linuxbox.ipi.local@IPI.LOCAL: kvno = 3
$ klist -e
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: HTTP/linuxbox.ipi.local@IPI.LOCAL
Valid starting Expires Service principal
09/23/11 16:59:35 09/24/11 02:59:33 krbtgt/IPI.LOCAL@IPI.LOCAL
renew until 09/24/11 16:59:35, Etype (skey, tkt): arcfour-hmac, arcfour-hmac
09/23/11 17:03:44 09/24/11 02:59:33 HTTP/densetsu.ipi.local@IPI.LOCAL
renew until 09/24/11 16:59:35, Etype (skey, tkt): arcfour-hmac, arcfour-hmac
$ kdestroy
На что обратить внимание: KVNO обязан совпадать с тем, который Windows показывала при создании ключа. Шифрование тоже должно совпадать. Команда kinit не должна выдавать никаких ошибок. Если всё ОК, то можно вздохнуть с облегчением: с 70% вероятностью всё сделано правильно и дополнительных издевательств не потребует.
Установка модуля веб-сервера Apache¶
Для Kerberos-аутентификации используется используется модуль Apache mod_auth_kerb. В Debian и Ubuntu нужно установить пакет libapache2-mod-auth-kerb, в RHEL/Fedora и большинстве других дистрибуивах — просто mod_auth_kerb.
Устанавливаем правильные права на наш keytab:
chown www-data /etc/krb5/ipi.keytab
chmod 400 /etc/krb5/ipi.keytab
Вместо www-data нужно подставить пользователя, из-под которого запускается Apache, чтобы mod_auth_kerb имел доступ к этому файлу на чтение. От всех остальных пользователей этот файл должен быть закрыт.
Добавляем в конфигурацию Apache:
<Location />
AuthType Kerberos
Krb5Keytab /etc/krb5/ipi.keytab
KrbServiceName HTTP/linuxbox.ipi.local@IPI.LOCAL
Require valid-user
</Location>
Здесь:
Krb5Keytab
путь к ключу, созданному выше.
KrbAuthRealms
список доменов (большими буквами, через пробел) для которых необходимо пробовать авторизацию.
KrbServiceName
имя принципала Kerberos, которое вы укзаали при создании ключа с помощью ktpass.exe.
Остальные параметры конфигурации mod_auth_kerb описаны тут: http://modauthkerb.sourceforge.net/configure.html
При использовании опции MARK_TASKS_AS_READ_BY_MAGIC_IMAGE нужно также разрешить доступ к «магическому» изображению без пароля:
<Location /tasks/mark_as_read/logo.jpg>
Satisfy any
</Location>
Если добавить сайт в настройках IE в зону «intranet» и у зоны проставить «Automatic logon in Intranet Zone» или добавить в зону «trusted sites» и у зоны проставить «Automatic logon with current username and password», то при заходе на сайт авторизация должна проходить автоматически, т. е. без ввода имени пользователя и пароля. Если по каким-либо причинам этого не происходит, то необходимо у Apache включить уровень лога на уровень Debug и изучать error_log. Основными причинами могут быть (начиная с самых частых):
Несоответствие адреса HTTP-сервера и имени принципала Kerberos. То есть, если при создании ключа вы указали HTTP/linuxbox.ipi.local@IPI.LOCAL, то для того, чтобы браузер задействовал прозрачную аутентификацию, нужно заходить именно на URL http://linuxbox.ipi.local/.
Использование IP-адреса сервера вместо DNS-имени. По сути, проблема та же, что и в предыдущем пункте.
Рассинхронизация даты и времени у серверов Linux и Windows. Системное время должно быть синхронизировано! Авторизация становится невозможной уже при рассинхронизации в 5 минут.
Невозможность Apache получить доступ к keytab файлу или файлу /etc/krb.conf.
Старая версия Kerberos. Автоматическая авторизация работает ТОЛЬКО на версиях 1.5 и выше. Посмотреть версию можно коммандой krb5-config --version.
Неправильный keytab. Если вы в точности повторили все шаги указанные выше в руководстве создания keytab - то этой проблемы не должно быть.
Отключенный механизм авторизации Negotiate у Internet Explorer. В таком случае в логе при уровне debug должно появляться сообщение о том что «нашли заголовки NTLM, но kerberos не поддерживает NTLM! Возможно у Internet Explorer отключен Negotiate». Галочка находится в настройках Internet Explorer, в Advanced, секция Security, параметр “Enable Integrated Windows Authentication (Requires Restart)”.
Конфиденциальность Правовые ограничения Лицензия Контактная информация | © 1998-2012 |
![]() |