OpenLDAP на Rocky Linux 9 — установка и настройка
В этой статье пошагово показано, как установить OpenLDAP на Rocky Linux 9, настроить базовый домен и пользователей, включить защищённый LDAPS (SSL/TLS) и подключить клиент через SSSD. Приведены рекомендации по безопасности, проверке, резервному копированию и отладке.
Важно: пример использует домен dc=hwdomain,dc=lan и хосты ldap (192.168.5.25) и client (192.168.5.80). Замените значения на ваши.
Оглавление
- Введение и краткие определения
- Требования
- Подготовка FQDN и /etc/hosts
- Установка OpenLDAP на Rocky Linux 9
- Настройка firewalld
- Базовая конфигурация OpenLDAP (пароль root, схемы)
- Настройка базового домена и OU
- Добавление пользователя
- Включение TLS/LDAPS
- Подключение клиента через OpenLDAP-клиент и SSSD
- Проверка входа под LDAP-пользователем
- Резервное копирование и восстановление
- Безопасность и hardening
- Репликация и масштабирование (обзор)
- Сценарии отказов и отладка
- Чек-листы для ролей
- Критерии приёмки
- Глоссарий, рекомендации и вывод
Введение и краткие определения
LDAP — Lightweight Directory Access Protocol, протокол для организации централизованного хранилища атрибутов (пользователей, групп, политик). OpenLDAP — открытая реализация LDAP-сервера. Небольшие определения:
- SLAPD: демон OpenLDAP, основной сервер LDAP.
- LDIF: формат для импорта/экспорта записей LDAP.
- SSSD: System Security Services Daemon — локальный агент для интеграции NSS/PAM с LDAP/AD.
Требования
Минимальные требования для примера в статье:
- Сервер Rocky Linux 9 с минимум 4 ГБ ОЗУ и 2 CPU (имя ldap, IP 192.168.5.25).
- Клиент Rocky Linux 9 (имя client, IP 192.168.5.80).
- Непривилегированный пользователь с sudo или доступ root.
- SELinux в режиме permissive (если вы используете строгий режим, потребуется донастройка контекстов).
Список серверов в примере:
Hostname IP Address Used as
-----------------------------------------
ldap 192.168.5.25 OpenLDAP Server
client 192.168.5.80 OpenLDAP ClientИзображение ниже иллюстрирует конфигурацию имен и хостов в примере.

Подготовка FQDN и /etc/hosts
Перед установкой LDAP важно, чтобы у сервера был корректный FQDN и запись в /etc/hosts (или DNS) указывала на правильный IP.
Установите FQDN командой:
sudo hostnamectl set-hostname ldap.hwdomain.lanОткройте /etc/hosts и добавьте соответствующую строку:
sudo nano /etc/hostsДобавьте (замените значения на ваши):
# ip - fqdn - hostname
192.168.5.25 ldap.hwdomain.lan ldapПроверьте FQDN и доступность:
sudo hostname -f
ping -c3 ldap.hwdomain.lan
Совет: в реальной среде лучше настраивать DNS, а не полагаться на /etc/hosts.
Установка OpenLDAP Server
Репозитории Rocky Linux: пакеты OpenLDAP находятся в репозитории “plus”, который может быть отключён по умолчанию. Включите его и установите пакеты:
sudo dnf config-manager --set-enabled plus
sudo dnf repolist
sudo dnf install openldap-servers openldap-clientsПосле установки запустите и включите сервис slapd:
sudo systemctl start slapd
sudo systemctl enable slapd
sudo systemctl status slapdПроверка: статус должен быть active (running) и enabled.


Настройка firewalld
Откройте порты LDAP (389) и LDAPS (636) на внешнем фаерволе службы firewalld:
sudo firewall-cmd --add-service={ldap,ldaps} --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-allВ разделе services должны появиться ldap и ldaps.

Базовая конфигурация OpenLDAP: пароль root и схемы
OpenLDAP хранит конфигурацию в cn=config и работает через интерфейс ldapi:///. Для изменения конфигурации часто используют sasl/EXTERNAL.
Создаём хеш пароля для администратора (olcRootPW):
slappasswdСкопируйте сгенерированный хеш (пример: {SSHA}Uf13… ). Создайте LDIF-файл changerootpass.ldif:
nano changerootpass.ldifВставьте (замените olcRootPW на ваш хеш):
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}Uf13AbVHOcs/aDWJOvDxxfBSl3omExG2Примените изменения:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f changerootpass.ldifИмпортируйте стандартные схемы (cosine, nis, inetorgperson):
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldifПерезапустите slapd:
sudo systemctl restart slapd
Пояснение: схемы определяют доступные атрибуты и objectClass для объектов в дереве LDAP.
Настройка базового домена (Base DN)
Создайте LDIF setdomain.ldif, где указываете sufix (olcSuffix) и olcRootDN (админ DN для БД mdb):
nano setdomain.ldifПример содержимого (замените dc=hwdomain,dc=lan и хеш пароля):
# setdomain.ldif
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=hwdomain,dc=lan" read by * none
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=hwdomain,dc=lan
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=hwdomain,dc=lan
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}Uf13AbVHOcs/aDWJOvDxxfBSl3omExG2
dn: olcDatabase={2}mdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=hwdomain,dc=lan" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=hwdomain,dc=lan" write by * readПримените:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f setdomain.ldifПроверьте namingContexts:
sudo ldapsearch -H ldap:// -x -s base -b "" -LLL "namingContexts"Вы должны увидеть базовый DN, например dc=hwdomain,dc=lan.

Создание организационных единиц (OU) — People и Group
Создайте addou.ldif:
nano addou.ldifПример содержимого (замените dc и название организации):
# addou.ldif
dn: dc=hwdomain,dc=lan
objectClass: top
objectClass: dcObject
objectclass: organization
o: My hwdomain Organisation
dc: hwdomain
dn: cn=Manager,dc=hwdomain,dc=lan
objectClass: organizationalRole
cn: Manager
description: OpenLDAP Manager
dn: ou=People,dc=hwdomain,dc=lan
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=hwdomain,dc=lan
objectClass: organizationalUnit
ou: GroupДобавьте записи в LDAP:
sudo ldapadd -x -D cn=Manager,dc=hwdomain,dc=lan -W -f addou.ldifПроверьте:
sudo ldapsearch -x -b "dc=hwdomain,dc=lan" ou
Добавление пользователя в LDAP
Шаги:
- Сгенерировать хеш пароля slappasswd.
- Создать LDIF с записью пользователя.
- Выполнить ldapadd.
Пример файла adduser.ldif для пользователя rocky:
nano adduser.ldif# adduser.ldif
dn: uid=rocky,ou=People,dc=hwdomain,dc=lan
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: rocky
sn: temp
userPassword: {SSHA}cDG5NuQd+rYn6rWh1r5UnysUOwJlt1uk
loginShell: /bin/bash
uidNumber: 2000
gidNumber: 2000
homeDirectory: /home/rocky
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0
dn: cn=rocky,ou=Group,dc=hwdomain,dc=lan
objectClass: posixGroup
cn: rocky
gidNumber: 2000
memberUid: rockyДобавление пользователя:
sudo ldapadd -x -D cn=Manager,dc=hwdomain,dc=lan -W -f adduser.ldifПроверка:
sudo ldapsearch -x -b "ou=People,dc=hwdomain,dc=lan"
Замечание: uidNumber/gidNumber должны быть уникальны среди всех пользователей/групп.
Включение TLS/LDAPS (Self-signed пример)
Для защиты передачи данных используйте TLS. В производстве лучше подписанный сертификат CA. Для тестового примера сгенерируем self-signed сертификат:
sudo openssl req -x509 -nodes -days 365 \
-newkey rsa:2048 \
-keyout /etc/pki/tls/ldapserver.key \
-out /etc/pki/tls/ldapserver.crtИзмените владельца файлов на ldap:ldap, чтобы slapd мог читать их:
sudo chown ldap:ldap /etc/pki/tls/{ldapserver.crt,ldapserver.key}Создайте tls.ldif:
sudo nano tls.ldif# tls.ldif
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/pki/tls/ldapserver.crt
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/pki/tls/ldapserver.key
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/pki/tls/ldapserver.crtПримените:
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f tls.ldifОтредактируйте /etc/openldap/ldap.conf, укажите путь к CA и установите поведение проверки сертификата (в тесте можно использовать TLS_REQCERT never, в проде — demand/allow в зависимости от инфраструктуры):
sudo nano /etc/openldap/ldap.confTLS_CACERT /etc/pki/tls/ldapserver.crt
TLS_REQCERT neverПерезапустите slapd и проверьте LDAPS:
sudo systemctl restart slapd
sudo ldapsearch -x -b dc=hwdomain,dc=lan -ZZФлаг -ZZ делает StartTLS; для прямого LDAPS-подключения можно указывать ldaps:// и порт 636.


Важно: в продуктивной среде используйте сертификаты от доверяемого CA и не устанавливайте TLS_REQCERT в never.
Подключение клиента (Rocky Linux) через OpenLDAP client и SSSD
На клиенте выполняются те же подготовительные шаги: FQDN, /etc/hosts, подключение репозитория plus, установка пакетов openldap-clients и sssd.
Настройка FQDN и hosts на клиенте
sudo hostnamectl set-hostname client.hwdomain.lan
sudo nano /etc/hostsДобавьте запись сервера LDAP:
192.168.5.25 ldap.hwdomain.lan ldapУстановка клиента и SSSD
sudo dnf config-manager --set-enabled plus
sudo dnf repolist
sudo dnf install openldap-clients sssd sssd-ldap oddjob-mkhomedirВключение SSSD как источника аутентификации
Выберите профиль authselect для sssd и разрешите mkhomedir:
sudo authselect select sssd with-mkhomedir --forceЗапустите oddjobd, который создаёт домашние каталоги по умолчанию:
sudo systemctl enable --now oddjobd.service
sudo systemctl status oddjobd.service
Конфигурация /etc/openldap/ldap.conf и /etc/sssd/sssd.conf
Отредактируйте /etc/openldap/ldap.conf, укажите URI и BASE:
sudo nano /etc/openldap/ldap.confURI ldap://ldap.hwdomain.lan/
BASE dc=hwdomain,dc=lanСоздайте /etc/sssd/sssd.conf:
sudo nano /etc/sssd/sssd.confПример содержимого (замените ldap_uri и ldap_search_base на ваши):
[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://ldap.hwdomain.lan/
ldap_search_base = dc=hwdomain,dc=lan
ldap_id_use_start_tls = True
ldap_tls_cacertdir = /etc/openldap/certs
cache_credentials = True
ldap_tls_reqcert = allow
[sssd]
services = nss, pam, autofs
domains = default
[nss]
homedir_substring = /homeОграничьте права на конфиг SSSD:
sudo chmod 0600 /etc/sssd/sssd.confЗапустите SSSD и проверьте его статус:
sudo systemctl start sssd
sudo systemctl enable sssd
sudo systemctl status sssd
Проверка входа на клиент как LDAP-пользователь
С сервера или с любого хоста, имеющего доступ, выполните ssh на клиент (в примере IP 192.168.5.80) и войдите под LDAP-пользователем rocky:
ssh [email protected]Подтвердите вход:
id
whoamiВы должны увидеть, что текущий пользователь — rocky и uid/gid соответствуют LDAP-записи.

Резервное копирование и восстановление
Регулярное резервное копирование LDAP — критично. Инструменты:
- slapcat — экспортирует базу в LDIF.
- slapadd — добавляет из LDIF в базу (обычно используется при восстановлении; база должна быть остановлена перед slapadd).
Пример резервного экспорта:
sudo systemctl stop slapd
sudo slapcat -v -l /root/openldap-backup.ldif
sudo systemctl start slapdВосстановление (при необходимости, с остановленным slapd):
sudo systemctl stop slapd
sudo slapadd -v -l /root/openldap-backup.ldif
sudo chown -R ldap:ldap /var/lib/ldap
sudo systemctl start slapdДополнительно полезно: регулярная проверка LDIF-файлов, хранение резервных копий в защищённом хранилище и тестовые процедуры восстановления.
Безопасность и hardening
Ключевые рекомендации по безопасности:
- Используйте сертификаты от доверенного CA и проверку сертификата (TLS_REQCERT demand/allow).
- Отключите анонимный bind, если он не нужен.
- Ограничьте доступ по iptables/firewalld к портам 389/636 только доверенным сетям.
- Применяйте строгие ACL в olcAccess для критичных атрибутов (userPassword, shadow*).
- Храните root-пароль LDAP в безопасном хранилище (Vault, KMS) и меняйте его по политике.
- Ограничьте права на ключи/сертификаты (владельцем ldap, права 640/600).
- Включите аудит (audit logs) для критичных операций.
- Защитите файлы бэкапа (шифрование, доступ только администраторам).
Пример ACL, запрещающий чтение пароля посторонним:
olcAccess: {0}to attrs=userPassword,shadowLastChange by dn="cn=Manager,dc=hwdomain,dc=lan" write by anonymous auth by self write by * noneSELinux: если SELinux включён в enforcing, проверьте контексты файлов сертификатов и базы данных, при необходимости применяйте semanage fcontext и restorecon.
Репликация и масштабирование (обзор)
Для отказоустойчивости и распределения нагрузки используйте репликацию. В OpenLDAP применяются механизмы syncrepl (обычно с базой mdb). Основные концепции:
- master-slave (producer/consumer) через syncrepl.
- multi-master (rabid? — требует осторожности с конфликтами; лучше использовать подходы с хорошо продуманной политикой записи).
Репликация — тема отдельной инструкции: потребуется настроить репликаторы, аутентификацию репликации (ревизионные credentials), и правильно настроить olcSyncRepl в cn=config.
Сценарии отказов и отладка
Частые проблемы и пути их решения:
- slapd не стартует: смотрите journalctl -u slapd и /var/log/messages. Частая причина — некорректные права на /var/lib/ldap или конфигурационные ошибки LDIF.
- Ошибка bind: проверьте DN и пароль, используйте ldapwhoami и ldapsearch с -ZZ/-H ldapi:///.
- Проблемы с TLS: проверьте пути к сертификатам, права доступа, и опцию TLS_REQCERT. Если используется self-signed — добавьте CA в доверенные на клиентах.
- Неправильные uidNumber/gidNumber: конфликт приводит к проблемам при логине.
- SSSD не видит пользователей: проверьте /var/log/sssd/ и sssctl user-checks.
Полезные команды для диагностики:
journalctl -u slapd -b
sudo ldapsearch -H ldapi:/// -Y EXTERNAL -b cn=config '(objectClass=*)'
ldapwhoami -x -D "cn=Manager,dc=hwdomain,dc=lan" -W
sssctl domain-list
sss_debuglevel 9 (подробнее для sssd)Чек-листы по ролям
Чек-лист для системного администратора (развёртывание OpenLDAP):
- Подготовить сервер и DNS/FQDN.
- Установить пакеты, запустить slapd.
- Добавить схемы и настроить olcSuffix/olcRootDN.
- Сгенерировать и установить TLS-сертификаты (использовать CA).
- Настроить ACL и права доступа.
- Настроить firewalld и SELinux.
- Настроить резервное копирование (slapcat) и тест восстановления.
- Документировать DNs, пароли, резервные копии.
Чек-лист для инженера безопасности:
- Проверить использование CA-сертификатов и TLS_REQCERT.
- Проверить ACL на чтение userPassword и shadow*.
- Убедиться, что бэкапы зашифрованы и доступны только уполномоченным.
- Привести в порядок права на сертификаты и ключи.
- Включить аудит и мониторинг изменений в cn=config.
Чек-лист для DevOps (подключение клиентов):
- Убедиться в наличии пакетов sssd/openldap-clients.
- Настроить authselect и oddjobd.
- Настроить /etc/sssd/sssd.conf и права 600.
- Проверить что SSSD успешно получает записи из ldap.
- Настроить создание домашних каталогов автоматом.
Критерии приёмки
- Сервис slapd запущен и автозапуск включён.
- Базовый DN отображается в namingContexts.
- Как минимум один пользователь (например, rocky) успешно аутентифицируется на клиенте через SSSD и может получить домашний каталог.
- TLS для LDAP работает (проверка ldapsearch -ZZ или успешное подключение ldaps://).
- Резервное копирование выполнено и успешно восстановлено в тестовой среде.
Мини-методология развёртывания (шаги)
- Подготовить хосты, сетевые записи и политики доступа.
- Установить OpenLDAP и убедиться в работе slapd.
- Настроить olcSuffix/olcRootDN и импортировать базовые схемы.
- Настроить TLS и ACL.
- Добавить OU и первого пользователя.
- Настроить клиента через SSSD, протестировать аутентификацию.
- Настроить резервное копирование и процедуры восстановления.
- Документировать и при необходимости автоматизировать (Ansible).
Альтернативные подходы и когда использовать их
- FreeIPA/IdM: если нужна интеграция с Kerberos, централизованное управление сертификатами и политиками, лучше FreeIPA (он включает LDAP, Kerberos, CA, DNS-интеграцию).
- 389 Directory Server: альтернатива OpenLDAP с простым управлением и GUI в некоторых пакетах; может быть предпочтительней в больших окружениях.
- Microsoft Active Directory: для среды Windows-first (политики GPO и т.д.).
Выбор зависит от требований: поддержка Kerberos, управления политиками, 규모 деплоймента и навыков команды.
Тесты и контроль качества (набор проверок)
- Юнит-проверки: ldapsearch на корневой DN и конкретные записи.
- Интеграция: попытка входа на клиенте через sssd под LDAP-пользователем.
- Нагрузочная проверка: базовые LDAP-lookup тесты (например, ab или ldapsearch в цикле) для оценки задержек.
- Failover: симуляция отказа мастера и проверка репликации (если настроено).
Примеры acceptance test (кратко):
- ldapsearch возвращает запись ou=People для базового DN.
- Пользователь rocky может выполнить ssh на клиент и получить /home/rocky.
- LDAP отвечает по TLS и сертификат валиден.
Отладочные кейсы и типичные ошибки
- “Can’t contact LDAP server”: проверьте firewall, DNS/FQDN, слушает ли slapd на нужном интерфейсе.
- “Invalid credentials”: проверьте DN и пароль, хеши паролей в базе.
- “Insufficient access”: проверьте ACL (olcAccess) и используемый DN при операциях.
Советы по миграции и совместимости
- При миграции с другого LDAP сервера экспортируйте LDIF; внимательно проверьте совпадение схем и атрибутов (uidNumber, gidNumber).
- Для интеграции с приложениями убедитесь, что используемые атрибуты (mail, uid, uidNumber, gidNumber, homeDirectory) доступны и индексированы при необходимости.
- При обновлении OpenLDAP читайте release notes: формат cn=config может меняться.
Ментальные модели и эвристики
- “LDAP как дерево каталога”: думайте о DC как о корне, OU — как о папках; пользователи и группы — объекты внутри.
- ACL в LDAP работают «сверху вниз»: более специфичные правила перевешивают общие.
- TLS защищает канал, но не заменяет корректные ACL и контроль доступа.
Глоссарий (1 строка на термин)
- DN: Distinguished Name — уникальный идентификатор LDAP-объекта.
- Base DN: корень или суффикс базы данных LDAP.
- LDIF: текстовый формат для представления записей LDAP.
- SLAPD: основной демон OpenLDAP.
- SSSD: агент для интеграции системы с LDAP/AD.
Часто задаваемые вопросы (коротко)
Q: Можно ли использовать OpenLDAP без TLS? A: Можно, но небезопасно для передачи паролей. Для продуктивных сред TLS обязателен.
Q: Как часто делать резервное копирование? A: Резервное копирование должно соответствовать RPO вашей службы; минимум — ежедневные бэкапы и журналирование изменений.
Decision flowchart
flowchart TD
A[Нужно централизованное управление пользователями?] -->|Да| B{Нужен Kerberos/CA/DNS?}
B -->|Да| C[FreeIPA/IdM]
B -->|Нет| D{Требуется легковесный LDAP?}
D -->|Да| E[OpenLDAP]
D -->|Нет| F[389 Directory Server]
A -->|Нет| G[Не использовать LDAP]Заключение
В этой инструкции вы научились разворачивать OpenLDAP на Rocky Linux 9: от базовой установки до настройки TLS и подключения клиента через SSSD. Дополнительно приведены рекомендации по безопасности, резервному копированию, репликации и отладке. Следующие шаги — внедрить автоматизацию (Ansible), настроить репликацию для отказоустойчивости и заменить self-signed сертификаты на CA-подписанные.
Краткие рекомендации:
- В проде используйте CA-сертификаты, строгие ACL и регулярные бэкапы.
- Документируйте все DNs, пароли и процессы восстановления.
- Тестируйте восстановление и сценарии отказов в отдельной среде.
Спасибо за внимание. Для глубокой проработки репликации и политик авторизации рекомендуется обратиться к официальной документации OpenLDAP.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента