Это старая версия документа.


Kerberos и LDAP

Большинство людей не используют Kerberos сам по себе; как только пользователь аутентифицировался (Kerberos), нам нужно вычислить что пользователь может делать (авторизация). И это становится задачей таких программ, как LDAP.

Репликация баз данных учетных записей Kerberos между двумя серверами может усложниться и добавить дополнительную базу данных пользователей в вашей сети. К счастью MIT Kerberos может быть настроен на использование каталога LDAP как базы учетных записей.

Приведенные здесь примеры предполагают использование MIT Kerberos и OpenLDAP.

Настройка OpenLDAP

Для начала требуется загрузить на сервер OpenLDAP необходимую схему, которая содержит поддержку соединения по сети с первичным и вторичным KDC. Кроме того эта глава подразумевает, что у вас настроена репликация LDAP между как минимум двумя серверами. Информацию по настройке OpenLDAP смотрите в разделе OpenLDAP сервер.

Также требуется настроить OpenLDAP для TLS и SSL соединений, чтобы передача между KDC и LDAP серверами была зашифрована. Смотрите детали в секции TLS.

cn=admin,cn=config - пользователь, которого мы создали с правами редактирования базы ldap. Много раз это был RootDN. Измените его значение для соответствия вашим настройкам.

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
        }
Замените example.com, dc=example,dc=com, cn=admin,dc=example,dc=com и ldap01.example.com на соответствующие домен, LDAP объект и LDAP сервер вашей сети.

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
Сертификат также нужно скопировать на вторичный KDC чтобы позволить соединению к LDAP серверам использовать LDAPS.

Вы можете добавить учетные записи 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 для проверки, что пользователю действительно выдали билет.

Если объект пользователя уже создан, потребуется опция dn="..." для добавления атрибутов Kerberos. Иначе будет создан новый объект учетной записи в поддереве области.

Настройка вторичного 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/
Снова замените EXAMPLE.COM на вашу актуальную область.

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 сервером станут недоступны.

Ссылки

  The Kerberos Admin Guide has some additional details.
  For more information on kdb5_ldap_util see Section 5.6 and the kdb5_ldap_util man page.
  Another useful link is the krb5.conf man page.
  Also, see the Kerberos and LDAP Ubuntu wiki page.