Как настроить репликацию OpenLDAP
- Font size: Larger Smaller
- Hits: 904
- 0 Comments
- Bookmark
Материал habrahabr.ru о репликации OpenLDAP будет полезен тем кто задумывается о центролизации в управлении авторизацией пользователями. Автор расматривает пример для сети в филиалами. Для сервисных компаний шаблон использования может быть более продвинут. OpenLDAP Docker, Azure и эту часть нужно еще дописать.
Дано:
1. Организация с филиалами. В главном офисе и в каждом филиале есть сервер LDAP который хранит у себя логины/пароли пользователей.
Задача:
Сделать так, что бы между главныи офисом и филиалами было «единое пространство имен», то есть что бы каждый LDAP сервер «знал» о логинах/паролях всех остальных филиалов и главного офиса.
Решение:
1. Установку Linux, OpenLDAP, настройку OpenVPN (главный офис и филиалы связаны через OpenVPN) описывать не буду. Будем считать что у вас это уже установлено и настроено.
2. У нас есть три сервера. Главный 192.168.1.1, и два филиала 192.168.1.2 и 192.168.1.3 соответственно. Все они связаны друг с другом через OpenVPN.
2. Теперь настройка OpenLDAP. В главном офисе (192.168.1.1) в LDAP заносятся все логины/пароли который нужны.
В файле slapd.conf главного сервера помимо всего прочего необходимо в самом начале добавить строку ServerID 001. Это идентификатор сервера.
Еще нужно раскоментировать строку moduleload syncprov.la. Это необходимо сделать для загрузки модуля синхронизации.
В файлах slapd.conf серверов филиала помимо всего прочего необходимо в самом начале добавить строку ServerID 002 и ServerID 003 соответственно. Это идентификатор сервера и раскоментировать строку moduleload syncprov.la. Это необходимо сделать для загрузки модуля синхронизации.
Далее. В файле slapd-hdb-db01.conf (файл настройки собственно базы), ПОСЛЕ описания типа БД, директории хранения базы и т. д. Добавляем следующие строки:
# это главный сервер. Имеет адрес 192.168.1.1. и такие строки должны быть добавлены для каждого из серверов (то есть в файле главного сервера должны быть добавлены строки для остальных филиалов).
# база для сервера 192.168.1.2
syncrepl rid=000
provider=ldap://192.168.1.2 # адрес сервера филиала
type=refreshAndPersist # тип обновления. После соединения потребителя и поставщика, происходит синхронизация, и по окончании синхронизации связь поддерживается. То есть соединение является постоянным
retry=«60 20 300 +» # повторы соединения. Здесь реконнект каждую минуту, для 20 попыток. После неудачных 20 попыток — новые реконнекты производить каждые 5 минут.
searchbase=«dc=test-1,dc=office,dc=com» # каталог который будет синхронизирован между серверами (в данном случае это весь каталог)
scope=sub # глубина поиска. В данном случае по всей области которая находится ниже относительно searchbase.
bindmethod=simple
binddn=«cn=admin,dc=test-1,dc=office,dc=com» # пользователь от имени которого будет производиться синхронизация. В данном случае это admin и его пароль который описан директивой ниже.
credentials=хххххххххх
# база для сервера 192.168.1.3
syncrepl rid=001
provider=ldap://192.168.1.3 # адрес сервера филиала
type=refreshAndPersist # тип обновления. После соединения потребителя и поставщика, происходит синхронизация, и по окончании синхронизации связь поддерживается. То есть соединение является постоянным
retry=«60 20 300 +» # повторы соединения. Здесь реконнект каждую минуту, для 20 попыток. После неудачных 20 попыток — новые реконнекты производить каждые 5 минут.
searchbase=«dc=test-1,dc=office,dc=com» # каталог который будет синхронизирован между срверами(в данном случае это весь каталог)
scope=sub # глубина поиска. В данном случае по всей области которая находится ниже относительно searchbase.
bindmethod=simple
binddn=«cn=admin,dc=test-1,dc=office,dc=com» # пользователь от имени которого будет производиться синхронизация. В данном случае это admin и его пароль который описан директивой ниже.
credentials=хххххххххх
ПОСЛЕ описания всех серверов добавляем строки
mirrormode TRUE # запись изменений на главном сервере. Без включения этой директивы вы не сможете сохранить изменения в своем каталоге LDAP.
overlay syncprov
syncprov-checkpoint 100 1
syncprov-sessionlog 100
Для сервера с адресом 192.168.1.2 соответственно строки относящиеся к синхронизации будут выглядеть так:
# база для сервера 192.168.1.1
syncrepl rid=000
provider=ldap://192.168.1.1# адрес главного сервера
type=refreshAndPersist # тип обновления. После соединения потребителя и поставщика, происходит синхронизация, и по окончании синхронизации связь поддерживается. То есть соединение является постоянным
retry=«60 20 300 +» # повторы соединения. Здесь реконнект каждую минуту, для 20 попыток. После неудачных 20 попыток — новые реконнекты производить каждые 5 минут.
searchbase=«dc=test-1,dc=office,dc=com» # каталог который будет синхронизирован между срверами(в данном случае это весь каталог)
scope=sub # глубина поиска. В данном случае по всей области которая находится ниже относительно searchbase.
bindmethod=simple
binddn=«cn=admin,dc=test-1,dc=office,dc=com» # пользователь от имени которого будет производиться синхронизация. В данном случае это admin и его пароль который описан директивой ниже.
credentials=хххххххххх
# база для сервера 192.168.1.3
syncrepl rid=001
provider=ldap://192.168.1.3 # адрес сервера филиала
type=refreshAndPersist # тип обновления. После соединения потребителя и поставщика, происходит синхронизация, и по окончании синхронизации связь поддерживается. То есть соединение является постоянным
retry=«60 20 300 +» # повторы соединения. Здесь реконнект каждую минуту, для 20 попыток. После неудачных 20 попыток — новые реконнекты производить каждые 5 минут.
searchbase=«dc=test-1,dc=office,dc=com» # каталог который будет синхронизирован между срверами(в данном случае это весь каталог)
scope=sub # глубина поиска. В данном случае по всей области которая находится ниже относительно searchbase.
bindmethod=simple
binddn=«cn=admin,dc=test-1,dc=office,dc=com» # пользователь от имени которого будет производиться синхронизация. В данном случае это admin и его пароль который описан директивой ниже.
credentials=хххххххххх
overlay syncprov
syncprov-checkpoint 100 1
syncprov-sessionlog 100
ну и для сервера 192.168.1.3 соответственно:
# база для сервера 192.168.1.1
syncrepl rid=000
provider=ldap://192.168.1.1 # адрес главного сервера
type=refreshAndPersist # тип обновления. После соединения потребителя и поставщика, происходит синхронизация, и по окончании синхронизации связь поддерживается. То есть соединение является постоянным
retry=«60 20 300 +» # повторы соединения. Здесь реконнект каждую минуту, для 20 попыток. После неудачных 20 попыток — новые реконнекты производить каждые 5 минут.
searchbase=«dc=test-1,dc=office,dc=com» # каталог который будет синхронизирован между срверами(в данном случае это весь каталог)
scope=sub # глубина поиска. В данном случае по всей области которая находится ниже относительно searchbase.
bindmethod=simple
binddn=«cn=admin,dc=test-1,dc=office,dc=com» # пользователь от имени которого будет производиться синхронизация. В данном случае это admin и его пароль который описан директивой ниже.
credentials=хххххххххх
# база для сервера 192.168.1.2
syncrepl rid=001
provider=ldap://192.168.1.2 # адрес сервера филиала
type=refreshAndPersist # тип обновления. После соединения потребителя и поставщика, происходит синхронизация, и по окончании синхронизации связь поддерживается. То есть соединение является постоянным
retry=«60 20 300 +» # повторы соединения. Здесь реконнект каждую минуту, для 20 попыток. После неудачных 20 попыток — новые реконнекты производить каждые 5 минут.
searchbase=«dc=test-1,dc=office,dc=com» # каталог который будет синхронизирован между срверами(в данном случае это весь каталог)
scope=sub # глубина поиска. В данном случае по всей области которая находится ниже относительно searchbase.
bindmethod=simple
binddn=«cn=admin,dc=test-1,dc=office,dc=com» # пользователь от имени которого будет производиться синхронизация. В данном случае это admin и его пароль который описан директивой ниже.
credentials=хххххххххх
overlay syncprov
syncprov-checkpoint 100 1
syncprov-sessionlog 100
Вроде бы все.
P. S. Таким образом если интернет работает исправно, на всех серверах LDAP будет одинаковая база. При создании/изменении пользователя на любом сервере, информация о нем сразу же поменяется на других серверах.
Каждый сервер при такой синхронизации является ГЛАВНЫМ. Подчинение отсутствует.
И если база создана на главном сервере то переносить ее в филиалы не надо. После настройки и после команды service slapd restart на сервере филиала, произойдет синхронизация и база с главного сервера зальется на филиальный и таким образом после синхронизации базы будут одинаковые.Цель, получить единое пространство имен.
Саться http://habrahabr.ru/post/270635/ традиционно много интересного в комментариях на Хабре.