Jul 172012
 

Установка производится на Debian Squeeze (6.0)

Задачи: интегрировать OpenLDAP и Kerberos, получив в итоге:

  1. единый пароль для всех сервисов (в том числе Samba3)
  2. поддержку мультидоменной архитектуры – возможность иметь несколько Kerberos realm

Установка и настройка OpenLDAP

В связи с использованием OpenLDAP версии 2.4, все настройки делаются без использования файла конфигурации slapd.conf

aptitude install slapd ldap-utils

и ввести пароль администратора.
Если вы не хотите использовать ваше имя домена в качестве Base DN, рекомендуется после установки запустить

/etc/init.d/slapd stop
dpkg-reconfigure slapd
/etc/init.d/slapd start

и ввести собственные параметры Base DN, Organization DN и пароль администратора

Для организации мультидоменности возможны следующие варианты:

  • В случае возможной дальнейшей интеграции с другими деревьями, BaseDN – домен основной организации (dc=example,dc=com), с дальнейшим разделением на dc=domain1,dc=example,dc=com
  • При остутствии необходимости интеграции, BaseDN – короткое имя (dc=net), с дальнейшим разделением на dc=org1,dc=net либо ou=org1,dc=net

В дальнейшем все примеры будут приводится для dc=net

для удобства можно отредактировать файл /etc/ldap/ldap.conf:

BASE dc=net
URI ldap://localhost/

Затем нужно добавить одну или ваших несколько организаций – создайте файл org_init.ldif с содержанием:

dn: dc=org1,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
o: org1.net
dc: org1

dn: dc=org2,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
o: org2.net
dc: org2

и выполните команду: ldapadd -xWD cn=admin,dc=net -f org_init.ldif

Установка Kerberos

aptitude install krb5-{admin-server,kdc-ldap,user}

В связи с тем, что Kerberos будет держать данные в LDAP, необходимо поправить скрипты запуска:
в /etc/init.d/krb5-admin-server и /etc/init.d/krb5-kdc изменить строки

# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
на
# Required-Start: $local_fs $remote_fs $network $syslog slapd
# Required-Stop: $local_fs $remote_fs $network $syslog slapd

и после чего выполнить:

update-rc.d krb5-kdc defaults
update-rc.d krb5-admin-server defaults

Добавление схемы Kerberos в OpenLDAP

Проверьте, какие схемы у вас в данный момент находятся в OpenLDAP:
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn
в свежеустановленном OpenLDAP должно быть 4 схемы

Выполните: gunzip -c /usr/share/doc/krb5-kdc-ldap/kerberos.schema.gz > /etc/ldap/schema/kerberos.schema

Создайте файл schema_cnv.conf со следующим содержимым:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/kerberos.schema

Сконвертируйте файлы схемы:

mkdir /tmp/ldap
slapcat -f schema_cnv.conf -F /tmp/ldap -n0 -s "cn={4}kerberos,cn=schema,cn=config" > cn=kerberos.ldif

Отредактируйте созданный файл cn=kerberos.ldif, изменив следующие атрибуты:

dn: cn=kerberos,cn=schema,cn=config
...
cn: kerberos

и удалите следующие строки в конце файла:

structuralObjectClass: olcSchemaConfig
entryUUID: 1347ef6a-644c-1031-8d7f-41346af288b9
creatorsName: cn=config
createTimestamp: 20120717111243Z
entryCSN: 20120717111243.754404Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20120717111243Z

значения атрибутов могут отличаться

Загрузите новую схему с помощью ldapadd:
ldapadd -xWD cn=admin,cn=config -f cn\=kerberos.ldif
при отсутствии ошибок у вас должны появится новая схема в базе. Проверить можно с помощью команды:
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=schema,cn=config dn

Добавьте индексы для атрибутов – создайте файл krb_idx.ldif с содержимым:

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uid eq
-
add: olcDbIndex
olcDbIndex: dc eq
-
add: olcDbIndex
olcDbIndex: krbPrincipalName eq,pres,sub

В случае, если у вас не новая база OpenLDAP и необходимые индексы уже созданы, необходимо оставить только добавление индексов для krbPrincipalName
После создания файла выполните команду: ldapmodify -xWD cn=admin,cn=config -f krb_idx.ldif

Обновите списки контроля доступа – создайте файл krb_acl.ldif с содержимым:

dn: olcDatabase={1}hdb,cn=config
replace: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange,krbPrincipalKey by self write by anonymous auth by dn="cn=admin,dc=net" write by dn="cn=krb-adm,dc=net" write by dn="cn=krb-kdc,dc=net" read by * none
-
add: olcAccess
olcAccess: to dn.base="" by * read
-
add: olcAccess
olcAccess: to * by self write by dn="cn=admin,dc=net" write by dn="cn=krb-adm,dc=net" write by dn="cn=krb-kdc,dc=net" read by users read by * none


В случае, если у вас не новая база OpenLDAP и списки контроля доступа отличаются от начальных, необходимо добавить права доступа для cn=krb-adm,dc=net и cn=krb-kdc,dc=net

После создания файла с правами доступа выполните команду:ldapmodify -xWD cn=admin,cn=config -f krb_acl.ldif

Добавление служебных пользователей для Kerberos в LDAP

Создайте файл krb_init_dn.ldif с содержимым:

dn: cn=krb-kdc,dc=net
cn: krb-kdc
objectClass: simpleSecurityObject
objectClass: organizationalRole
description: Default bind DN for the Kerberos KDC server
userPassword: [пароль1]

dn: cn=krb-adm,dc=net
cn: krb-adm
objectClass: simpleSecurityObject
objectClass: organizationalRole
description: Default bind DN for the Kerberos Administration server
userPassword: [пароль2]

Вместо [пароль1] и [пароль2] укажите пароли для этих пользователей
После создания файла выполните команду: ldapadd -xWD cn=admin,dc=net -f krb_init_dn.ldif

Файлы настроек Kerberos

/etc/krb5.conf
Замените содержимое файла /etc/krb5.conf на следующее:

[libdefaults]
default_realm = ORG1.NET
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true

[realms]
ORG1.NET = {
kdc = kdc.org1.net
admin_server = kdc.org1.net
database_module = org1_ldapconf
}

ORG2.NET = {
kdc = kdc.org1.net
admin_server = kdc.org1.net
database_module = org2_ldapconf
}

[domain_realm]
.org1.net = ORG1.NET
org1.net = ORG1.NET
.org2.net = ORG2.NET
org2.net = ORG2.NET

[login]
krb4_convert = true
krb4_get_tickets = false

[logging]
kdc = FILE:/var/log/krb5/kdc.log
admin_server = FILE:/var/log/krb5/kadmin.log
default = FILE:/var/log/krb5/klib.log

[dbdefaults]
ldap_kdc_dn = "cn=krb-kdc,dc=net"
ldap_kadmind_dn = "cn=krb-adm,dc=net"
ldap_service_password_file = /etc/krb5kdc/service.keyfile

[dbmodules]
org1_ldapconf = {
db_library = kldap
ldap_kerberos_container_dn = dc=org1,dc=net
ldap_conns_per_server = 3
}

org2_ldapconf = {
db_library = kldap
ldap_kerberos_container_dn = dc=org2,dc=net
ldap_conns_per_server = 3
}

С учетом ваших собственных доменов

Также необходимо исправить файл /etc/krb5kdc/kdc.conf с учетом ваших доменов (не забудьте исправить параметр key_stash_file = /etc/krb5kdc/.k5.ORG1.NET)
и выполнить команду:mkdir /var/log/krb5/

Инициализация служебных пользователей и доменов

Выполните следующие команды:

echo "create the stash for the KDC service"
kdb5_ldap_util -D cn=admin,dc=net stashsrvpw -f /etc/krb5kdc/service.keyfile cn=krb-kdc,dc=net
echo "create a stash for the Kerberos administration server"
kdb5_ldap_util -D cn=admin,dc=net stashsrvpw -f /etc/krb5kdc/service.keyfile cn=krb-adm,dc=net

echo "create realm ORG1.NET"
kdb5_ldap_util -D cn=admin,dc=net -H ldap://localhost create -r ORG1.NET -s -subtrees dc=org1,dc=net -sscope 2 -containerref dc=org1,dc=net
echo "create realm ORG1.NET"
kdb5_ldap_util -D cn=admin,dc=net -H ldap://localhost create -r ORG2.NET -s -subtrees dc=org2,dc=net -sscope 2 -containerref dc=org2,dc=net

Если у вас все прошло без ошибок, то на этом этапе вы должны получить в дереве LDAP две организации (dc=org1 и dc=org2) в каждой из которых должен находится контейнер Kerberos для соответствующего домена (cn=ORG1.NET и cn=ORG2.NET)

Создание сервисов в Kerberos

Для доступа к серверам посредством Kerberos, необходимо добавить записи о сервисах:

kadmin.local -r ORG1.NET -q 'ank -x containerdn="ou=hosts,dc=org1,dc=net" -randkey host/kdc.org1.net
kadmin.local -r ORG1.NET -q 'ank -x containerdn="ou=hosts,dc=org2,dc=net" -randkey host/kdc.org2.net
kadmin.local -r ORG1.NET -q 'ktadd host/kdc.org1.net'
kadmin.local -r ORG1.NET -q 'ktadd host/kdc.org2.net'

либо если у вас общий сервер, к которому обращаются из всех доменов:

kadmin.local -r ORG1.NET -q 'ank -x containerdn="dc=net" -randkey host/kdc.example.com

вместо сервиса host можно использовать также: HTTP (доступ к веб-сервисам)

Создание пользователей

Создайте файл с тестовыми пользователями test_user.ldif:

dn: cn=test,dc=org1,dc=net
cn: test
sn: test
uid: test.org1
objectClass: simpleSecurityObject
objectClass: inetOrgPerson
userPassword: [пароль1]

dn: cn=test,dc=org2,dc=net
cn: test
sn: test
uid: test.org2
objectClass: simpleSecurityObject
objectClass: inetOrgPerson
userPassword: [пароль2]

и выполните команду: ldapadd -xWD cn=admin,dc=net -f test_user.ldif

Затем выполните команды

kadmin.local -r ORG1.NET -q 'addprinc -x dn="cn=test,dc=org1,dc=net" -pw [пароль1] test'
kadmin.local -r ORG2.NET -q 'addprinc -x dn="cn=test,dc=org2,dc=net" -pw [пароль2[ test'

и в результате в уже созданных пользователей LDAP добавятся атрибуты Kerberos (автоматическое изменение паролей Kerberos при изменении пароля LDAP будет рассмотрено позже)

  One Response to “Интеграция OpenLDAP и Kerberos, SingleSignOn, MultiDomain, часть 1”

  1. Как я с вами связаться по почте – очень нужна ваша консультация по kerberos. Пожалуйста.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)