====== OpenLDAP ======
{{:openldap:ldapworm.gif|}}
[[https://www.openldap.org/images/headers/LDAPworm.gif|Оригинал]]
OpenLDAP — открытая реализация сервера каталогов [[ldap:ldap|LDAP]].
http://www.openldap.org
:!: В OpenLDAP 2.3 и более новых версиях осуществлён переход к использованию механизма ''динамической конфигурации времени исполнения'', этот механизм также называется ''cn=config (OLC)''. \\ При использовании этого механизма сервер хранит свои конфигурационные данные в базе данных ''LDIF'', обычно в папке ''/etc/openldap/slapd.d'' и позволяет менять все настройки ''slapd'' на сразу, не требуя перезагрузки демона ''slapd'' для вступления изменений в силу. \\ Все приведённые ниже примеры и настройки даны для ''cn=config (OLC)'' и формата БД: ''[[openldap:backends#MDB|MDB]]''.
Примеры которые здесь приведены могут быть использованы для настройки следующих решений:
* [[roundcube:ldap#Адресная книга|Адресная книга в Roundcube]]
* [[isc-dhcp-server:isc-dhcp-server#LDAP|ISC DHCP сервер]]
* [[powerdns:powerdns#LDAP|Настройка сервера PowerDNS]]
Примеры:
* [[openldap:examples|OpenLDAP: Примеры]]
* [[samba:examples_ldap|Примеры структур Samba LDAP]]
====== Установка ======
apt-get install slapd ldap-utils
При первоначальной настройке пакета потребуется ввести пароль администратора LDAP сервера (''admin'')
Если после установки пакета нужно задать имя домена, для этого нужно использовать следующие команды:
- :!: При выполнении этой команды происходит удаление БД, будьте внимательны ! dpkg-reconfigure slapd
- Запуск сервера: service slapd start
Статус сервера и список активных соединений:
#!/bin/bash
echo "Статус:"
netstat -tulpn |grep slapd
echo "Активные соединения:"
sockstat|grep :389
====== Настройка ======
Файл настройки запуска сервера: ''/etc/default/slapd''
Запуск на всех интерфейсах:
SLAPD_SERVICES="ldap:/// ldapi:///"
Только на ''localhost'':
SLAPD_SERVICES="ldap://127.0.0.1:389/ ldapi:///"
====== Одиночный сервер ======
- [[#Добавление схем|Добавление схем]]
- [[#Создание пользователей|Создание пользователей]]
- [[#Настройка прав доступа|Настройка прав доступа]]
- [[#Индексы|Индексы]]
====== Репликация ======
Ниже описан пример с репликацией данных между серверами:
* Один главный сервер, несколько подчиненных.
* Изменение данных происходит только на главном сервере.
* Подчиненные серверах предоставляют данные **только для чтения**.
Такое решение удобно использовать для распределения нагрузки между серверами.
[[openldap:examples#Схема репликации|Пример схемы репликации]]
===== Главный сервер =====
- [[#Добавление схем|Добавление схем]]
- [[#Создание пользователей|Создание пользователей]]
- [[#Настройка прав доступа|Настройка прав доступа]]
- [[#Индексы|Индексы]]
- [[#Наложение для реплики на главном сервере|Наложение для реплики на главном сервере]]
- [[#Настройка лимитов|Настройка лимитов]]
===== Подчинённый сервер =====
Это решение можно использовать и для нескольких DIT
Порядок настройки:
- [[#Добавление схем|Добавление схем]]
- [[#Создание нового DIT|Создание нового DIT]]
- [[#Настройка прав доступа|Настройка прав доступа]]
- [[#Индексы|Индексы]]
- [[#Настройка соединения с главным сервером|Настройка соединения с главным сервером]]
Перед выполнением перечисленных ниже процедур, в файлах ''.ldif'' нужно установить соответствующий номер БД. (в примерах используется ''{1}''):
* [[#Создание нового DIT|Создание нового DIT]]
* [[#Настройка прав доступа|Настройка прав доступа]]
* [[#Настройка соединения с главным сервером|Настройка соединения с главным сервером]]
:!: Для большей безопасности на отдельных серверах можно использовать следующее решение: [[#srvs|Пользователь для чтения всех данных кроме паролей]]
:!: При необходимости реплику можно удалить: [[#Удаление соединения с главным сервером|Удаление соединения с главным сервером]]
====== Инициализация ======
:!: Эта последовательность команд полностью удаляет БД !
#!/bin/bash
service slapd stop
rm -r /var/lib/ldap/*
dpkg-reconfigure slapd
service slapd start
====== Добавление схем ======
:!: Команды выполняются от имени пользователя ''root''
* [[postfix:postfix#Работа с OpenLDAP|Postfix]]
* [[isc-dhcp-server:isc-dhcp-server#LDAP|ISC DHCP сервер]]
* [[powerdns:powerdns#LDAP|Сервер PowerDNS]]
* [[samba:samba#LDAP|Сервер Samba]]
* [[asterisk:ldap#OpenLDAP|Asterisk]]
* [[freeradius:freeradius#OpenLDAP|FreeRADIUS]]
===== Qmail =====
:!: Схема Qmail не совместима с схемой [[#Misc|Misc]]
{{:openldap:qmail.ldif|qmail.ldif}}
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/qmail.ldif
===== Misc =====
:!: Схема Misc не совместима с схемами [[postfix:postfix#Работа с OpenLDAP|Postfix]] и [[#Qmail|Qmail]]
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: mailLocalAddress eq
-
add: olcDbIndex
olcDbIndex: rfc822MailMember eq
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/misc.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f olcDbIndex_misc.ldif
===== inetorgperson =====
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
====== Создание пользователей ======
Во всех примерах пароль: ''ПАРОЛЬ''
===== Создание хеша пароля =====
slappasswd -h '{SSHA}' -s 'ПАРОЛЬ'
===== repl =====
Пользователь для репликации.
Фактически этому пользователю доступны все поля в режиме "только чтение".
dn: cn=repl,dc=domain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: repl
description: replicator
userPassword: {SSHA}8qlXsh1GzfvkLoOI8x19QF1/7KaN+Qo8
ldapadd -Y EXTERNAL -H ldapi:/// -f repl.ldif
===== srvs =====
Пользователь для чтения всех данных кроме паролей.
Если настройка прав доступа к серверу выполнена по описанию: [[#Настройка прав доступа|Настройка прав доступа]], то можно создать специального пользователя, например ''srvs'', для выполнения репликации всех данных кроме паролей.
dn: cn=srvs,dc=domain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: srvs
description: services
userPassword: {SSHA}8qlXsh1GzfvkLoOI8x19QF1/7KaN+Qo8
ldapadd -Y EXTERNAL -H ldapi:/// -f srvs.ldif
===== addressbook =====
Пользователь для [[roundcube:ldap#Адресная книга|Адресной книги в Roundcube]].
dn: cn=addressbook,dc=domain
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: addressbook
description: addressbook user
userPassword: {SSHA}8qlXsh1GzfvkLoOI8x19QF1/7KaN+Qo8
ldapadd -Y EXTERNAL -H ldapi:/// -f addressbook.ldif
====== olcRootPW ======
olcRootPW — пароль администратора LDAP сервера (admin).
===== Создание olcRootPW =====
Используется при [[#Создание нового DIT|создании нового DIT]]
Нужно создать [[#Создание хеша пароля|хеш пароля]] и заменить значение ''olcRootPW'' на полученный в файле ''olcRootPW.ldif''.
Пример:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}rxcXIxAZM40zRAIrwt1Q8l/KNlV7Br4a
ldapadd -Y EXTERNAL -H ldapi:/// -f olcRootPW.ldif
===== Изменение olcRootPW =====
Нужно создать [[#Создание хеша пароля|хеш пароля]] и заменить значение ''olcRootPW'' на полученный в файле ''olcRootPW.ldif''.
Пример:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
delete: olcRootPW
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}rxcXIxAZM40zRAIrwt1Q8l/KNlV7Br4a
ldapadd -Y EXTERNAL -H ldapi:/// -f olcRootPW.ldif
====== Настройка прав доступа ======
В этом примере к стандартным полям добавлены права на:
* [[samba:samba|Samba]]: ''sambaLMPassword'',''sambaNTPassword'',''sambaPwdLastSet''
* [[roundcube:ldap#Адресная книга|Адресная книга в Roundcube]]
Пользователи:
* ''admin'' — все права. Первоначально пароль задаётся при выполнении [[#Инициализация|инициализации]], возможно [[#Изменение olcRootPW]]
* ''repl'' — [[#repl|Репликатор]] (все объекты только для чтения)
* ''srvs'' — [[#srvs|Пользователь для чтения всех данных кроме паролей]], используется для служб DNS, DHCP
* ''addressbook'' — [[#addressbook|Пользователь]] для [[roundcube:ldap#Адресная книга|Адресной книги в Roundcube]]
dn: olcDatabase={1}mdb,cn=config
changetype: modify
delete: olcAccess
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to dn.subtree="ou=addressbook,dc=domain" by dn="cn=addressbook,dc=domain" write by * read
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {1}to attrs=userPassword,shadowLastChange,sambaLMPassword,sambaNTPassword,sambaPwdLastSet by self write by anonymous auth by dn="cn=admin,dc=domain" write by dn="cn=repl,dc=domain" read by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {2}to dn.one="ou=users,dc=domain" by self write by dn="cn=repl,dc=domain" read by dn="cn=srvs,dc=domain" read by anonymous read
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {3}to dn.one="ou=groups,dc=domain" by self write by dn="cn=repl,dc=domain" read by dn="cn=srvs,dc=domain" read by anonymous read
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {4}to dn.regex="(.+,)?(uid=[^,]+,ou=users,dc=domain)$" by dn.exact,expand="$2" write by dn="cn=repl,dc=domain" read by self write
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {5}to dn.subtree="ou=dhcp,dc=domain" by dn="cn=srvs,dc=domain" read by dn="cn=repl,dc=domain" read by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {6}to dn.subtree="ou=dns,dc=domain" by dn="cn=srvs,dc=domain" read by dn="cn=repl,dc=domain" read by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {7}to dn.subtree="ou=aliases,dc=domain" by dn="cn=srvs,dc=domain" read by dn="cn=repl,dc=domain" read by anonymous auth by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {8}to dn.subtree="ou=computers,dc=domain" by dn="cn=srvs,dc=domain" read by dn="cn=repl,dc=domain" read by anonymous auth by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {9}to dn.subtree="ou=idmap,dc=domain" by dn="cn=srvs,dc=domain" read by dn="cn=repl,dc=domain" read by anonymous auth by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {10}to dn.base="cn=admin,dc=domain" by dn="cn=repl,dc=domain" read by anonymous auth by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {11}to dn.base="cn=srvs,dc=domain" by dn="cn=repl,dc=domain" read by anonymous auth by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {12}to dn.base="cn=repl,dc=domain" by dn="cn=repl,dc=domain" read by anonymous auth by * none
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {13}to * by self write by dn="cn=admin,dc=domain" write by dn="cn=repl,dc=domain" read by * read
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {14}to dn.base="" by * none
ldapadd -Y EXTERNAL -H ldapi:/// -f olcAccess.ldif
====== Индексы ======
:!: Нужно выполнить [[#Индексирование]], чтобы избежать ошибок типа:
slapd: <= bdb_equality_candidates: (mailLocalAddress) not indexed
===== Удаление всех индексов =====
При использовании [[openldap:backends#MDB|MDB]] нельзя только удалить все индексы, нужно создать какие-то, поэтому в этот файл включено также //создание индексов по умолчанию//:
dn: olcDatabase={1}mdb,cn=config
changetype: modify
delete: olcDbIndex
-
add: olcDbIndex
olcDbIndex: cn eq,pres,sub
-
add: olcDbIndex
olcDbIndex: sn eq,pres,sub
-
add: olcDbIndex
olcDbIndex: uid eq,pres,sub
-
add: olcDbIndex
olcDbIndex: objectClass eq
-
add: olcDbIndex
olcDbIndex: uidNumber,gidNumber eq
-
add: olcDbIndex
olcDbIndex: member,memberUid eq
ldapadd -Y EXTERNAL -H ldapi:/// -f olcDbIndex_delete.ldif
===== Создание общих индексов =====
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: default sub
-
add: olcDbIndex
olcDbIndex: ou eq,pres,sub
-
add: olcDbIndex
olcDbIndex: o eq,pres,sub
-
add: olcDbIndex
olcDbIndex: givenname eq,pres,sub
-
add: olcDbIndex
olcDbIndex: loginShell eq,pres
-
add: olcDbIndex
olcDbIndex: uniqueMember eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: displayName pres,sub,eq
-
add: olcDbIndex
olcDbIndex: telephoneNumber eq,pres,sub
-
add: olcDbIndex
olcDbIndex: mobile eq,pres,sub
-
add: olcDbIndex
olcDbIndex: homePhone eq,pres,sub
-
add: olcDbIndex
olcDbIndex: mail eq,pres,sub
-
add: olcDbIndex
olcDbIndex: maildrop eq,pres,sub
-
add: olcDbIndex
olcDbIndex: description eq,pres,sub
ldapadd -Y EXTERNAL -H ldapi:/// -f olcDbIndex_common.ldif
===== Индексирование =====
sudo -u openldap -g openldap slapindex -F /etc/ldap/slapd.d/
====== Наложение для реплики на главном сервере ======
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
dn: olcOverlay=syncprov,olcDatabase={1}mdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpCheckpoint: 100 10
olcSpSessionlog: 100
ldapadd -Y EXTERNAL -H ldapi:/// -f replica_Master.ldif
====== Настройка лимитов ======
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
delete: olcSizeLimit
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
add: olcSizeLimit
olcSizeLimit: unlimited
ldapadd -Y EXTERNAL -H ldapi:/// -f limit_Master.ldif
====== Настройка соединения с главным сервером ======
:!: Важно на каждом подчинённом сервере установить уникальный ''rid'' (Replica ID), это уникальное трёхзначное число, идентифицирующее данную реплику. \\ Подробный пример описан в главе:[[openldap:examples#Схема репликации|Схема репликации]]
dn: olcDatabase={1}mdb,cn=config
changetype: modify
add: olcSyncRepl
olcSyncrepl: rid=1 provider="ldap://ldap0.domain.ru:389/" type=refreshAndPersist retry="60 30 300 +" searchbase="dc=domain" bindmethod=simple binddn="cn=repl,dc=domain" credentials=ПАРОЛЬ
ldapadd -Y EXTERNAL -H ldapi:/// -f replica_Slave.ldif
====== Удаление соединения с главным сервером ======
dn: olcDatabase={1}mdb,cn=config
changetype: modify
delete: olcSyncRepl
ldapadd -Y EXTERNAL -H ldapi:/// -f replica_Slave_delete.ldif
====== Создание нового DIT ======
FIXME
Directory Information Tree, информационное дерево каталога (также известное как naming-context). DIT — это иерархия объектов, составляющих структуру локального каталога. Одним LDAP-сервером может поддерживаться более одного DIT. Эта информация предоставляется Root DSE. Дополнительная информация [[https://pro-ldap.ru/tr/zytrax/apa/dits.html|здесь]].
https://pro-ldap.ru/tr/zytrax/apd/index.html#dit
Домен создаётся при [[#Инициализация|инициализации пакета]]. Далее описано как создать новый домен в дополнение к существующим:
- Сначала нужно создать папку для БД:
#!/bin/bash
DIR=/var/lib/ldap/domain2
mkdir $DIR
chown openldap:openldap $DIR
chmod 755 $DIR
- В файле ''domain2.ldif'' нужно установить соответствующий номер БД, в данном примере используется ''{2}''
Также нужно создать [[#Создание хеша пароля|хеш пароля]] и заменить значение ''olcRootPW''
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcDbCheckpoint: 512 30
olcDbMaxSize: 1073741824
olcDbIndex: objectClass eq
olcDbDirectory: /var/lib/ldap/domain2
olcSuffix: dc=domain2
olcRootDN: cn=admin,dc=domain2
olcRootPW:: {SSHA}rxcXIxAZM40zRAIrwt1Q8l/KNlV7Br4a
dn: dc=domain2
objectClass: top
objectClass: dcObject
objectClass: organization
o: Домен2
dc: domain2
ldapadd -Y EXTERNAL -H ldapi:/// -f domain2.ldif
- [[#Создание olcRootPW|Создать olcRootPW для нового DIT]]
====== Удаление DIT ======
:!: Этот способ удаления предусматривает перезагрузку ''slapd'' \\ К сожалению нам известен только такой способ удаления.
Пример удаления DIT с номером {2}
#!/bin/bash
service slapd stop
rm /etc/ldap/slapd.d/cn=config/olcDatabase={2}mdb.ldif
rm -r /var/lib/ldap/domain2
service slapd start
====== Преобразование схем ======
Преобразование схем из формата ''schema'' в формат ''ldif''
===== Извлечение схемы =====
Пример:
zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
===== Создание ldif файла =====
Сначала нужно создать фиктивный файл ''/tmp/dummy.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/qmail.schema
include /etc/ldap/schema/postfix.schema
include /etc/ldap/schema/samba.schema
Затем нужно создать фиктивную папку: ''/tmp/dummy.d'' и выполнить преобразование:
mkdir /tmp/dummy.d
slaptest -F /tmp/dummy.d -f /tmp/dummy.conf
===== Изменение ldif файла =====
Нужно выполнить действия по образцу, на примере схемы [[#qmail|qmail]]:
- Скопировать схему:
cp /tmp/dummy.d/cn=config/cn=schema/cn={5}qmail.ldif /etc/ldap/schema/qmail.ldif
- Заменить стоки:
^''cn={5}qmail.ldif''^''qmail.ldif''^
|
dn: cn={5}qmail
objectClass: olcSchemaConfig
cn: {5}qmail
|
dn: cn=qmail,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: qmail
|
- Удалить из ''cn={5}qmail.ldif'' строки:
structuralObjectClass: olcSchemaConfig
entryUUID: a8f199bc-2bcf-1032-8ece-d70658724f78
creatorsName: cn=config
createTimestamp: 20130328084600Z
entryCSN: 20130328084600.309604Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20130328084600Z
===== Добавление схемы =====
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/qmail.ldif
===== Удаление схемы =====
Пример удаления схемы [[#qmail|qmail]]:
#!/bin/sh
service slapd stop
rm /etc/ldap/slapd.d/cn=config/cn=schema/*qmail*
service slapd start
{{anchor:emptygroupofnames}}
====== Пустая группа groupOfNames ======
Используется для использования [[roundcube:ldap#Группы адресов|групп адресов в RoundCube]].
Если для создания группы нужно/можно ввести только имя тогда, нужно изменить свойства объекта ''groupOfNames'' в схеме ''core'', в результата получится **LDAP schema member-less group**.
Порядок действий:
- В исходной схеме нужно найти:
objectclass ( 2.5.6.9 NAME 'groupOfNames'
DESC 'RFC2256: a group of names (DNs)'
SUP top STRUCTURAL
MUST ( member $ cn )
MAY ( businessCategory $ seeAlso $ owner $ ou $ o $ description ) )
и заменить на:
objectclass ( 2.5.6.9 NAME 'groupOfNames'
DESC 'RFC2256: a group of names (DNs)'
SUP top STRUCTURAL
MUST cn
MAY ( member $ businessCategory $ seeAlso $ owner $ ou $ o $ description ) )
- Выполнить для этой схемы действия описанные в разделе [[#Преобразование схем|Преобразование схем]]
- Установить правильные права на новый файл:
chown openldap:openldap cn=\{0\}core.ldif
- Скопировать изменённый файл в папку ''/etc/ldap/slapd.d/cn=config/cn=schema''
:!: Перед применением изменений сервер [[openldap:openldap|ОpenLDAP]] нужно остановить service slapd stop
а затем запустить service slapd start
{{:openldap:core_schema.tar.gz|Архив с готовыми и исходными файлами}} (источник ''core.schema'' — файл ''slapd_2.4.44+dfsg-5+deb9u2_amd64.deb'')
Готовый скрипт для выполнения всех перечисленных выше действий:
#/bin/bash
service slapd stop
chown openldap:openldap cn=\{0\}core.ldif
cp -f cn=\{0\}core.ldif /etc/ldap/slapd.d/cn=config/cn=schema/
service slapd start
======= Резервное копирование =======
Простой вариант:
slapcat -l OpenLDAP_Backup.ldif
Скрипт для копирования в файл, в имени которого присутствует номер дня недели:
#!/bin/bash
backup_path=/root/Backup/
wd=`date '+%u'`
slapcat -l /etc/ldap/OpenLDAP_$wd.ldif
tar -cvzf $backup_path`hostname`_OpenLDAP_$wd.tar.gz /etc/ldap
FIXME
Резервное копирование БД №2:
slapcat -n 2 -l OpenLDAP_Backup_2.ldif
======= Восстановление =======
Если восстановление выполняется после выполнении процедуры [[#Инициализация]] и требуется восстановить настройки с другого сервера, то перед выполнением восстановления данных нужно сначала выполнить процедуры [[#Одиночный сервер]] или [[#Репликация]] соответственно.
#!/bin/bash
service slapd stop
slapadd -l ldap.ldif
chown -R openldap:openldap /var/lib/ldap
chown -R openldap:openldap /etc/ldap/slapd.d
service slapd start
====== Восстановление контрольной суммы CRC32 LDIF-файла в конфигурации cn=config ======
FIXME
[[https://pro-ldap.ru/books/diving/app2/crc32.html|Восстановление контрольной суммы CRC32 LDIF-файла в конфигурации cn=config]]
====== Использование атрибута c ======
Для использования атрибута ''c'' (''country'') нужно, чтобы у объекта был класс (objectClass): ''extensibleObject''
Значение атрибута: двухбуквенный код страны.
----
[[https://stackoverflow.com/a/21996393|java - LDAP - Not able to create a new person with country - Stack Overflow]]
====== autofs-ldap ======
FIXME
LDAP map support for autofs
Autofs controls the operation of the automount daemons. The automount daemons automatically mount filesystems when they are used and unmount them after a period of inactivity. This is done based on a set of pre-configured maps.
The kernel automounter implements an almost complete SunOS style automounter under Linux. A recent version of the kernel autofs4 module (builtin or separate) is required.
http://www.kernel.org/pub/linux/daemons/autofs/v5/
https://wiki.debian.org/LDAP/AutoFSSetup
====== Ссылки ======
[[http://blog.remibergsma.com/2012/03/05/howto-solve-openldap-bdb_equality_candidates-errors/|HOWTO solve OpenLDAP bdb_equality_candidates errors]]
[[http://www.openldap.org/lists/openldap-technical/201106/msg00050.html|Re: ldapsearch and sambaAcctFlags]]
[[https://pro-ldap.ru/tr/man/slapcat.8.html|pro-ldap.ru: slapcat - утилита генерации LDIF из базы данных SLAPD]]
[[https://pro-ldap.ru/books/openldap-ubuntu-in-practice/backup.html|pro-ldap.ru: OpenLDAP и Ubuntu на практике > Резервное копирование и восстановление сервера OpenLDAP]]
[[https://pro-ldap.ru/books/openldap-ubuntu-in-practice/repl.html|pro-ldap.ru: OpenLDAP и Ubuntu на практике > Репликация сервера OpenLDAP]]
**[[https://pro-ldap.ru/tr/zytrax/ch2/#model|pro-ldap.ru: LDAP для учёных-ракетчиков. 2.4 Информационная модель (модель данных или объектная модель) LDAP]]**
[[https://devopsideas.com/openldap-self-service-password-adhoc-ldap-utilities/|openLDAP - Self Service Password and Adhoc LDAP utilities]]
{{tag>LDAP}}