В этой статье мы продолжим разворачивать и настраивать LDAP под Linux. В первой части мы выполнили базовую установку slapd, развернули домен domain.com, и добавили записи в каталог.
Сейчас мы продолжим выполнять наши настройки в LDAP и поговорим об аутентификации. Наши предыдущие настройки завершились добавлением записей. Посмотрим нашу текущую конфигурацию slapd по протоколу LDAP (с указанием только DNs):
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
dn: cn=config # глобальные настройки
dn: cn=module{0},cn=config # динамически загружаемый модуль
dn: cn=schema,cn=config # жестко прописанная схема на уровне системы
dn: cn={0}core,cn=schema,cn=config # жестко прописанная core схема
dn: cn={1}cosine,cn=schema,cn=config # cosine схема
dn: cn={2}nis,cn=schema,cn=config # NIS схема
dn: cn={3}inetorgperson,cn=schema,cn=config # InetOrgPerson схема
dn: olcDatabase={-1}frontend,cn=config # база Frontend, настройки по умолчанию для других баз
dn: olcDatabase={0}config,cn=config # база конфигурации slapd
dn: olcDatabase={1}mdb,cn=config # база dc=domain dc=com
Вот как выглядит пример вывода запроса для dc=domain, dc=com:
$ ldapsearch -x -LLL -H ldap:/// -b dc=domain,dc=com dn
dn: dc=domain,dc=com
dn: cn=admin,dc=domain,dc=com
Некоторые пояснения к выведенному листингу:
dc=domain,dc=com: основной DIT
cn=admin,dc=domain,dc=com: Administrator (rootDN) для этого DIT
Об аутентификации
При этом обратите внимание на два варианта использования механизмов аутентификации, которые мы использовали вместе с командой ldapsearch в примере выше:
Ключ -x указывает на использование обычной текстовой аутентификации. Поскольку DN привязки не был предоставлен (через -D), это стало анонимной привязкой. Без -x по умолчанию используется привязка Simple Authentication Security Layer (SASL).
Ключ -Y со значением EXTERNAL использует привязку SASL. Вместе с -H ldapi:/// здесь используется локальное соединение с сокетом Unix.
При использовании первого или второго ключа мы получим только те результаты, которые позволят нам увидеть списки контроля доступа к серверу (ACL), исходя из того, какими правами мы обладаем. Очень удобным инструментом для проверки подлинности является команда ldapwhoami, которую можно использовать следующим образом:
$ ldapwhoami -x anonymous
Также с помощью ключа –x можно пройти аутентификацию в LDAP:
$ ldapwhoami -x -D cn=admin,dc=domain,dc=com -W
Enter LDAP Password:
dn:cn=admin,dc=domain,dc=com
При этом, когда вы используете simple bind (-x) и указываете DN привязки с -D в качестве DN аутентификации, сервер будет искать атрибут userPassword в записи и использовать его для проверки учетных данных. В данном конкретном случае, описанном выше, мы использовали запись корневого домена базы данных, т.е. фактического администратора, и это особый случай, пароль которого задается в конфигурации при установке пакета.
Индексы в LDAP
Для ускорения поиска по каталогу LDAP используются индексы. По сути, они работают по тому же принципу, что и индексы в базах данных, то есть используются для ускорения работы запросов на обновление и поиск. В LDAP индексы могут быть предоставлены для любого атрибута, но индексироваться должны только те, которые отображаются в результатах поиска. При этом, каталог LDAP индексировать несколько проще, чем базу данных, поскольку предполагаемое соотношение чтения/записи намного выше, обычно 9 к 1 или более по сравнению с 3 к 1 для СУБД, поэтому затраты на индексацию при вставках и обновлениях несколько меньше.
Индексы лучше создавать перед первоначальной загрузкой каталога с помощью команды ldapadd, тогда при первоначальной загрузке соответствующие индексы будут созданы автоматически.
Но, если нам требуется внести изменения в настройки индексов после первоначальной загрузки, необходимо произвести переиндексирование (повторное создание индексов) каталога с помощью команды slapindex. При этом, естественно, необходимо предварительно остановить slapd.
Для добавления индексов используется команда ldapmodify, которая позволяет добавить index к вашему базе вашего каталога mdb,cn=config (для dc=domain,dc=com).
Создадим файл с именем uid_index.ldif и добавим в него следующее содержимое:
dn: olcDatabase={1}mdb,cn=config
add: olcDbIndex
olcDbIndex: mail eq,sub
После этого нам необходимо выполнить следующую команду:
$ sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f uid_index.ldif
modifying entry "olcDatabase={1}mdb,cn=config"
Убедиться в том, что изменения применились можно с помощью следующей команды:
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \
cn=config '(olcDatabase={1}mdb)' olcDbIndex
dn: olcDatabase={1}mdb,cn=config
olcDbIndex: objectClass eq
olcDbIndex: cn,uid eq
olcDbIndex: uidNumber,gidNumber eq
olcDbIndex: member,memberUid eq
olcDbIndex: mail eq,sub
Журналирование
В процессе эксплуатации slapd обязательной задачей является журналирование наиболее важных событий. Для того, чтобы настроить логирование необходимо внести некоторые правки в конфигурационные файлы.
Для записи логов slapd в журналы операционной системы, в конфигурационный файл syslog/rsyslog необходимо добавить правило:
local4.* /var/log/ldap.log
А для настройки журналирования в самом slapd необходимо создать файл logging.ldif к примеру следующего содержания:
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats
В последней строке у нас указан уровень журналирования. В slapd доступны следующие уровни:
1 (0x1 trace) отслеживание вызовов функций
2 (0x2 packets) отладка обработки пакетов
4 (0x4 args) усиленная отладка (аргументы функций)
8 (0x8 conns) управление соединениями
16 (0x10 BER) вывод посылки и приёма пакетов
32 (0x20 filter) обработка поисковых фильтров
64 (0x40 config) обработка конфигурационного файла
128 (0x80 ACL) обработка списков контроля доступа
256 (0x100 stats) статистика соединений/операций/результатов
512 (0x200 stats2) статистика посылки записей журнала
1024 (0x400 shell) вывод взаимодействия с механизмами манипуляции данными shell
2048 (0x800 parse) вывод отладочной информации разбора записей
16384 (0x4000 sync) вывод отладочной информации репликации LDAPSync
32768 (0x8000 none) только сообщения, выводимые независимо от заданного уровня журналирования
В примере мы используем уровень журналирования stats для сбора информации о соединениях и операциях.
Заключение
В этой статье мы рассмотрели моменты, связанные с аутентификацией, настройкой индексов в LDAP и настройкой журналирования в slapd.
Напоследок хочу порекомендовать вам бесплатный вебинар, в рамках которого поговорим про процессы в Linux. Мы разберем, что такое процесс и программа, а также познакомимся с системными вызовами для создания процесса.
Комментарии (4)
Slipeer
07.06.2023 13:55+2Это новая версия "Как нарисовать сову?" - cтавим openldap и у нас автоматически настроен SASL и сокет.
И ладно бы так, но ведь кое где чушь прямо написана!В LDAP индексы могут быть предоставлены для любого атрибута, но индексироваться должны только те, которые отображаются в результатах поиска.
Так ли? Может быть всё-таки индексировать следует атрибуты которые фигурируют в условиях поиска, а не отражаются в результатах?
Также с помощью ключа –x можно пройти аутентификацию в LDAP:
$ ldapwhoami -x -D cn=admin,dc=domain,dc=com -W
А вы написали в этой или предыдущей статье как её включить и настроить? Как установить пароль для этого admin.
Контент ради пиара компании, а не пользы читателя?
Johan_Palych
"Вот какая елочка выросла у нас! Мы такую елочку видим первый раз!" Сл. и муз. М. Ю. Картушиной.
2-ая младшая группа:
https://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/авторизация_по_сети/openldap_server
https://ubuntu.com/server/docs/service-ldap
https://wiki.archlinux.org/title/OpenLDAP
https://www.opennet.ru/docs/HOWTO-RU/LDAP-HOWTO/
https://www.debian.org/doc/manuals/debian-handbook/sect.ldap-directory.en.html
Почему так сложно воспринимать критику?
Автор статьи: Елена Ленсу (Психотерапевт).
Специализации: организационное консультирование, долговременная терапия,
работа с травмой, сексология.
Бизнес консультант, ex.HRD Pravo.Tech и Rocket10. Автор статей и
преподаватель онлайн-курса «IT-Recruiter» в OTUS.