В этой статье мы продолжим разворачивать и настраивать 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)


  1. Johan_Palych
    07.06.2023 13:55
    -2

    "Вот какая елочка выросла у нас! Мы такую елочку видим первый раз!" Сл. и муз. М. Ю. Картушиной.
    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.


  1. Slipeer
    07.06.2023 13:55
    +2

    Это новая версия "Как нарисовать сову?" - cтавим openldap и у нас автоматически настроен SASL и сокет.

    И ладно бы так, но ведь кое где чушь прямо написана!

    В LDAP индексы могут быть предоставлены для любого атрибута, но индексироваться должны только те, которые отображаются в результатах поиска.

    Так ли? Может быть всё-таки индексировать следует атрибуты которые фигурируют в условиях поиска, а не отражаются в результатах?

    Также с помощью ключа –x можно пройти аутентификацию в LDAP:

    $ ldapwhoami -x -D cn=admin,dc=domain,dc=com -W

    А вы написали в этой или предыдущей статье как её включить и настроить? Как установить пароль для этого admin.


    Контент ради пиара компании, а не пользы читателя?