четверг, 29 мая 2008 г.

Инфраструктура Kerberos, сервисы

Теперь, когда у нас есть KDC, можно настраивать доступ к службам с использованием Kerberos.
Первым делом пример доступа к LDAP, так как этот сервис уже настроен. OpenLDAP поддерживает SASL(Simple Authentication and Security Layer). Почитать: http://bog.pp.ru/work/SASL.html или в Википедии.

Одним из механизмов SASL выступает GSSAPI - как раз наш случай, Kerberos (на самом деле не только). Остается настроить этот механизм (фрагмент /etc/ldap/slapd.conf):

sasl-realm REALM.TLD
sasl-host kdc.realm.tld

Далее надо чтобы был настроен /etc/krb5.conf, установлен пакет libsasl2-modules-gssapi-heimdal (или mit, но если вы читали статью про heimdal-kcm, то выбрать вам будет проще).

Если это все готово, то переходим к следующему этапу - надо сделать keytab файл для slapd. Тут стоит остановиться подробнее - keytab файл хранит ключи для сервисов (вы же не будете настукивать пароль при каждом обращении пользователя :) ). Чтение этого файла, всем кроме root, противопоказано, а slapd у нас работает от пользователя openldap. Значит делаем финт ушами:
в /etc/default/slapd добавим строчку - export KRB5_KTNAME="FILE:/etc/ldap/slapd.keytab". Это укажет slapd где искать ключи. Далее надо собствено выгрузить ключи:

kadmin -l ext --keytab=/etc/ldap/slapd.keytab ldap/kdc.realm.tld
chown openldap.openldap /etc/ldap/slapd.keytab


Надеюсь вы помните, что мы пока находимся все на том же сервере, а поэтому мы используем kadmin с ключом "-l", что позволяет пользователю root делать что угодно с базой kerberos. Для доступа с другой машины надо будет настроить kadmind

Ключи выгружены, slapd настроен, рестартуем демон: /etc/init.d/slapd restart
Проверка:

root@kdc:~# kinit deepwalker <<< надо будет ввести пароль
root@kdc:~# ldapsearch -H ldap://127.0.0.1 -Y GSSAPI
>>> тут должно быть выведено все дерево каталога <<<


Примерно таким же образом настраивается все остальное. Например для apache надо будет подгрузить модуль с поддержкой kerberos, выгрузить ключи вида HTTP/wwwhost.realm.tld. Для NFSv4 ключи надо выгружать в стандартный /etc/krb5.keytab для каждой машины. Впрочем по отдельным сервисам статьи можно написать будет отдельно. Главную мысль вы, я надеюсь, уловили.

Проблемы:
главная проблема это DNS (расхождения времени мы пока получить не можем, так как машина одна). В /etc/hosts вбейте нечто вроде:

127.0.0.1 localhost
192.168.0.1 kdc.realm.tld kdc


Следующая серия должна быть про настройку рабочей станции. А гневные комментарии все так же привествуются, давайте сделаем из этой серии заметок нечто качественное.

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

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

Прости, не могу дождаться следующей статьи: а какой софт тебе удалось подружить с Керберосом? В первую очередь интересует авторизация на прокси, мне казалось, что ни один броузер этого не умеет.
Бегло прочёл статью, да и не очень хорошо разбираюсь в данной теме, но я так понимаю у тебя авторизация в ЛДАП происходит тоже через Керберос. Это действительно так?

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

Умеют GSSAPI: Squid, Apache, Firefox, Konqueror, Safari наверное, IE7. Думаю вполне достаточно.

В статье как раз про аутентификацию в LDAP через Kerberos и написано : ) Аутентификация и авторизация вещи разные. Авторизацию OpenLDAP делает своими силами, посмотри в предыдущей статье, там ACL прописаны.

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

Кстати ничего не мешает использовать kerberos от AD - на opennet была статья на примере Subversion (модуль для apache использовался).

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

Ну да, аутентификация. Оговорился.:) Странно, я когда подумывал ставить Керберос, ничего насчёт броузеров найти так и не смог. Только в одной статье говорилось, что умеет это только осёл, да и тому нужно всё равно в настройках прописывать пароль. Да и насчёт аутентицикации в ЛДАП через керберос тоже ничего не встречал. Уникальный набор статей получается.:) Жду с нетерпением продолжения.:)

Николай комментирует...

Есть настроенные Kerberos 5 и NFS 4. В Kerberos есть пользователи user1 и user2.
На компьютере A есть каталог /share_a, на компьютере B есть каталог /share_b с доступом по NFS.

Как и где создать группу group и поместить в нее user1 и user2, чтобы:
- share_a дать rx доступ для group?
- share_b дать rwx доступ для group?