Содержание
Kerberos и LDAP
Большинство людей не используют Kerberos сам по себе; как только пользователь аутентифицировался (Kerberos), нам нужно вычислить что пользователь может делать (авторизация). И это становится задачей таких программ, как LDAP.
Репликация баз данных учетных записей Kerberos между двумя серверами может усложниться и добавить дополнительную базу данных пользователей в вашей сети. К счастью MIT Kerberos может быть настроен на использование каталога LDAP как базы учетных записей.
Настройка OpenLDAP
Для начала требуется загрузить на сервер OpenLDAP необходимую схему, которая содержит поддержку соединения по сети с первичным и вторичным KDC. Кроме того эта глава подразумевает, что у вас настроена репликация LDAP между как минимум двумя серверами. Информацию по настройке OpenLDAP смотрите в разделе OpenLDAP сервер.
Также требуется настроить OpenLDAP для TLS и SSL соединений, чтобы передача между KDC и LDAP серверами была зашифрована. Смотрите детали в секции TLS.
1. Для загрузки схемы в LDAP, на сервере LDAP установите пакет krb5-kdc-ldap. В терминале введите:
sudo apt-get install krb5-kdc-ldap
2. Далее распакуйте файл kerberos.schema.gz:
sudo gzip -d /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz sudo cp /usr/share/doc/krb5-kdc-ldap/kerberos.schema /etc/ldap/schema/
3. Схема kerberos должна быть добавлена к дереву cn=config. Процедура добавления новой схемы к slapd детально описана в секции Изменение базы данных настройки slapd.
Сначала создадим файл настроек с именем schema_convert.conf или другим значащим именем, содержащим следующие строки:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/collective.schema include /etc/ldap/schema/corba.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/duaconf.schema include /etc/ldap/schema/dyngroup.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/java.schema include /etc/ldap/schema/misc.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/openldap.schema include /etc/ldap/schema/ppolicy.schema include /etc/ldap/schema/kerberos.schema
Создадим временный каталог для хранения LDIF файлов:
mkdir /tmp/ldif_output
Теперь используем slapcat для конвертирования файлов схемы:
slapcat -f schema_convert.conf -F /tmp/ldif_output -n0 -s \ "cn={12}kerberos,cn=schema,cn=config" > /tmp/cn=kerberos.ldif
Измените имена файла и каталога выше для соответствия вашим именам, если они отличаются.
Отредактируйте созданный файл /tmp/cn\=kerberos.ldif, изменив следующие атрибуты:
dn: cn=kerberos,cn=schema,cn=config ... cn: kerberos
и удалите следующие строки в конце файла:
structuralObjectClass: olcSchemaConfig entryUUID: 18ccd010-746b-102d-9fbe-3760cca765dc creatorsName: cn=config createTimestamp: 20090111203515Z entryCSN: 20090111203515.326445Z#000000#000#000000 modifiersName: cn=config modifyTimestamp: 20090111203515Z
Значения атрибутов могут отличаться, просто убедитесь, что атрибуты удалены.
Загрузите новую схему с помощью ldapadd:
ldapadd -x -D cn=admin,cn=config -W -f /tmp/cn\=kerberos.ldif
Добавьте индекс для атрибута krb5principalname:
ldapmodify -x -D cn=admin,cn=config -W Enter LDAP Password: dn: olcDatabase={1}hdb,cn=config add: olcDbIndex olcDbIndex: krbPrincipalName eq,pres,sub modifying entry "olcDatabase={1}hdb,cn=config"
В конце обновите списки контроля доступа (ACL):
ldapmodify -x -D cn=admin,cn=config -W Enter LDAP Password: dn: olcDatabase={1}hdb,cn=config replace: olcAccess olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none - add: olcAccess olcAccess: to dn.base="" by * read - add: olcAccess olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read modifying entry "olcDatabase={1}hdb,cn=config"
Ну вот, теперь ваш каталог LDAP готов обслуживать базу данных учетных записей Kerberos.
Настройка первичного KDC
С настроенным OpenLDAP самое время настроить KDC.
1. Сначала установим необходимые пакеты, введя из терминала:
sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
2. Теперь редактируем /etc/krb5.conf добавив следующие опции в соответствующие секции:
[libdefaults] default_realm = EXAMPLE.COM ... [realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com admin_server = kdc01.example.com admin_server = kdc02.example.com default_domain = example.com database_module = openldap_ldapconf } ... [domain_realm] .example.com = EXAMPLE.COM ... [dbdefaults] ldap_kerberos_container_dn = dc=example,dc=com [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=example,dc=com" # this object needs to have read rights on # the realm container, principal container and realm sub-trees ldap_kadmind_dn = "cn=admin,dc=example,dc=com" # this object needs to have read and write rights on # the realm container, principal container and realm sub-trees ldap_service_password_file = /etc/krb5kdc/service.keyfile ldap_servers = ldaps://ldap01.example.com ldaps://ldap02.example.com ldap_conns_per_server = 5 }
3. Далее используем утилиту kdb5_ldap_util для создания области:
sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com create -subtrees \ dc=example,dc=com -r EXAMPLE.COM -s -H ldap://ldap01.example.com
4. Создаем тайник для пароля, используемого для подключения к LDAP серверу. Этот пароль используется опциями ldap_kdc_dn и ldap_kadmin_dn в /etc/krb5.conf:
sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f \ /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com
5. Копируем сертификат CA из сервера LDAP:
scp ldap01:/etc/ssl/certs/cacert.pem . sudo cp cacert.pem /etc/ssl/certs
и редактируем /etc/ldap/ldap.conf для использования этого сертификата:
TLS_CACERT /etc/ssl/certs/cacert.pem
Вы можете добавить учетные записи Kerberos в LDAP базу и они будут скопированы на все LDAP сервера, настроенные на репликацию. Для добавления учетной записи с использованием утилиты kadmin.local введите:
sudo kadmin.local Authenticating as principal root/admin@EXAMPLE.COM with password. kadmin.local: addprinc -x dn="uid=steve,ou=people,dc=example,dc=com" steve WARNING: no policy specified for steve@EXAMPLE.COM; defaulting to no policy Enter password for principal "steve@EXAMPLE.COM": Re-enter password for principal "steve@EXAMPLE.COM": Principal "steve@EXAMPLE.COM" created.
Теперь будут добавлены атрибуты krbPrincipalName, krbPrincipalKey, krbLastPwdChange и krbExtraData к объекту пользователя uid=steve,ou=people,dc=example,dc=com. Используйте утилиты kinit и klist для проверки, что пользователю действительно выдали билет.
Настройка вторичного KDC
Настройка вторичного KDC с использованием LDAP похожа на настройку обычной базы Kerberos.
1. Сначала установим необходимые пакеты. Введите в терминале:
sudo apt-get install krb5-kdc krb5-admin-server krb5-kdc-ldap
2. Далее редактируем /etc/krb5.conf для использования LDAP:
[libdefaults] default_realm = EXAMPLE.COM ... [realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com admin_server = kdc01.example.com admin_server = kdc02.example.com default_domain = example.com database_module = openldap_ldapconf } ... [domain_realm] .example.com = EXAMPLE.COM ... [dbdefaults] ldap_kerberos_container_dn = dc=example,dc=com [dbmodules] openldap_ldapconf = { db_library = kldap ldap_kdc_dn = "cn=admin,dc=example,dc=com" # this object needs to have read rights on # the realm container, principal container and realm sub-trees ldap_kadmind_dn = "cn=admin,dc=example,dc=com" # this object needs to have read and write rights on # the realm container, principal container and realm sub-trees ldap_service_password_file = /etc/krb5kdc/service.keyfile ldap_servers = ldaps://ldap01.example.com ldaps://ldap02.example.com ldap_conns_per_server = 5 }
3. Создаем тайник для пароля соединения с LDAP:
sudo kdb5_ldap_util -D cn=admin,dc=example,dc=com stashsrvpw -f \ /etc/krb5kdc/service.keyfile cn=admin,dc=example,dc=com
4. Теперь на первичном KDC копируем /etc/krb5kdc/.k5.EXAMPLE.COM тайник с главным ключом на вторичный KDC. Убедитесь что копирование файла происходит через зашифрованное соединение, такое как scp или через физический носитель.
sudo scp /etc/krb5kdc/.k5.EXAMPLE.COM steve@kdc02.example.com:~ sudo mv .k5.EXAMPLE.COM /etc/krb5kdc/
5. Возвращаемся на вторичный KDC чтобы только (пере)стартовать ldap сервер:
sudo service slapd restart
6. И в конце стартуем сервис krb5-kdc:
sudo /etc/init.d/krb5-kdc start
7. Убедитесь, что два ldap сервера (и kerberos вдобавок) синхронизированы.
Теперь у вас в сети избыточные KDC, и с избыточными LDAP серверами вы можете продолжать аутентифицировать пользователей, если один LDAP сервер, один Kerberos сервер или один LDAP с одним Kerberos сервером станут недоступны.
Ссылки
Kerberos Admin Guide содержит некоторые дополнительные детали.
Для дополнительной информации по kdb5_ldap_util смотрите главу 5.6 и страницу руководства kdb5_ldap_util.
Другой полезной ссылкой является страница руководства krb5.conf.
Также смотрите Kerberos и LDAP на Ubuntu wiki.