2007/01/12

OpenLDAP: установка, конфигурация репликации

Данное описание включает в себя описание установки и последующей настройки репликации LDAP-серверов OpenLDAP 2.2.23 на базе Debian Sarge 3.1.

Установка и первоначальная конфигурация

1. Установить OpenLDAP и необходимые утилиты:

# apt-get install slapd ldap-utils
Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
libiodbc2 libperl5.8 libslp1
Suggested packages:
slpd openslp-doc ldap-utils
Recommended packages:
db4.2-util
The following NEW packages will be installed:
libiodbc2 libperl5.8 libslp1 slapd
0 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 1509kB of archives.
After unpacking 3998kB of additional disk space will be used.
Do you want to continue? [Y/n] y

Configuring slapd
The DNS domain name is used to construct the base DN of your LDAP directory.
Entering foo.bar.org will give you the base DN dc=foo, dc=bar, dc=org
DNS domain name:
example.com

Whatever you enter here will be stored as the name of your organization in the base DN of your LDAP directory.
Name of your organization:
My Company

Please enter the password for the admin entry in your LDAP directory
Admin password:
password
Confirm password:
password

The slapd daemon now disables the old LDAPv2 protocol by default.
Programs and users are generally expected to be upgraded to LDAPv3.
If you have old programs which have not been moved to use LDAPv3 and
you still need LDAPv2 support then select this option and 'allow bind_v2'
will be added to your slapd.conf to tell slapd to accept LDAPv2 connections.
Allow LDAPv2 protocol?
No

Setting up slapd (2.2.23-8) ...
Creating initial slapd configuration... done.
Creating initial LDAP directory... done.
Starting OpenLDAP: (db4.2_recover not found), slapd.

Дополнительную информацию об установленном пакете можно почерпнуть из документа /usr/share/doc/slapd/README.Debian

2. Теперь необходимо сконфигурировать LDAP-директорию на основании своих требований. Первым делом следует остановить сервис:

# /etc/init.d/slapd stop
Stopping OpenLDAP: slapd.

Если не устраивает структура директории, построенная по принципу доменных имен (dc=example, dc=com) и хочется использовать географическую структуру (o=My Company, c=LT), прежде необходимо удалить текущую базу LDAP. БД находится в /var/lib/ldap, файл DB_CONFIG является просто конфигурационным файлом и его пока не следует трогать.

Если структура по принципу доменных имен устраивает, то можно сразу "перенашнуть" на шаг №6.

3. Теперь следует поправить основной конфигурационный файл /etc/ldap/slapd.conf. Необходимо изменить suffix (например, на c=lt) и dn администратора в описании доступа (cn=admin,c=lt).

4. Перед запуском LDAP-директории, чтобы избежать проблемы "яйца и курицы", необходимо "наполнить" её минимальным содержанием - сформировать корень и добавить информацию о первом пользователе (cn=admin,lt). Для этого необходимо сформировать LDIF-файл, описывающий данные корень и первого пользователя. Пример содержания:

# cat ldap.ldif
# Entry 1: c=LT
dn: c=LT
c: LT
objectClass: country
objectClass: top

# Entry 2: cn=admin,c=LT
dn: cn=admin,c=lt
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: {crypt}IvuNBMeSU9OzA

Для генерации crypt-хэша будущего пароля администратора можно воспользоваться утилитой makepassword:

# echo "password" | makepasswd --clearfrom=- --crypt
password IvuNBMeSU9OzA

С помощью утилиты slapadd наполняем первоначальным содержимым директорию:

# slapadd -l ldap.ldif

5. Запустить ldap-сервис и проверить работоспособность заново сконфигурированной директории

# /etc/init.d/slapd start
Starting OpenLDAP: (db4.2_recover not found), slapd.
# ldapsearch -x -b "c=lt" -D "cn=admin,c=LT" -w password -h localhost
# extended LDIF
#
# LDAPv3
# base with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# LT
dn: c=LT
c: LT
objectClass: country
objectClass: top

# admin, lt
dn: cn=admin,c=lt
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e2NyeXB0fUl2dU5CTWVTVTlPekE=

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

# ldapsearch -x -b "c=lt" -h localhost
# extended LDIF
#
# LDAPv3
# base with scope sub
# filter: (objectclass=*)
# requesting: ALL
#

# LT
dn: c=LT
c: LT
objectClass: country
objectClass: top

# admin, lt
dn: cn=admin,c=lt
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

Из вывода видно, что в первом случае при аутентификации использовался пользователь cn=admin,c=lt, имеющий доступ к паролям, во втором - анонимный пользователь, имеющий ограниченный круг прав.

6. На данном этапе можно наполнить содержимым только что созданную директорию и начать с ней полноценную работу. Для работы с содержимым ldap-директории существует масса различных программ-клиентов, приведу только те, что использую сам:

Репликация

Для простоты реализации репликации рассматривается 2 ldap-сервера, являющиеся зеркальными копиями друг друга, сконфигурированные по вышеприведенному описанию.

1. Остановить на обоих серверах slapd сервис.

2. На master-сервере в /etc/ldap/slapd.conf добавить описание реплики (slave-сервера):

replica  host=slave_ldap.example.com
"binddn=cn=admin,c=lt"
bindmethod=simple
credentials=password
replogfile /var/lib/ldap/replog
  • host - адрес slave-сервера
  • binddn - пользователь, который будет использоваться master-сервером, при передачи обновленных данных на slave-сервер. Он должен иметь соответствующий доступ на slave-сервере.
  • bindmethod - метод аутентификации. simple - всё передается в чистом виде, очень ненадежно с точки зрения информационной безопасности, но для тестовых целей или изолированной сети вполне подходит.
  • credentials - пароль пользователя binddn

3. На slave-сервере в /etc/ldap/slapd.conf добавить строки:

updatedn        "cn=admin,c=lt"
updateref "ldap://master_ldap.example.com"
  • updatedn - пользователь, которому разрешено проводить репликацию
  • updateref - ссылка на сервер, которая передается клиенту, если клиент пытается внести изменения на slave-сервере

4. Запустить slapd-сервисы на обоих серверах и проверить работоспособность репликации. В случае если изменения происходят на master-сервере, они почти моментально будут переданы на slave-сервер. Если же изменения клиент старается внести непосредственног на slave-сервере, ему будет возвращен адрес master-сервера:

# ldapmodify -f ldap.ldif -x -h slave_ldap.example.com -D "uid=user3,ou=people,c=lt" -w password
modifying entry "uid=user3,ou=people,c=lt"
ldap_modify: Referral (10)
referrals:
ldap://master_ldap.example.com/uid=user3,ou=People,c=lt

Ссылки:

  1. OpenLDAP Software 2.3 Administrator's Guide
  2. LDAPMODIFY(1)

No comments: