Настраиваем LDAP в ОС Linux
В этой статье мы продолжим разворачивать и настраивать 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,cn=config # динамически загружаемый модуль dn: cn=schema,cn=config # жестко прописанная схема на уровне системы dn: cn=core,cn=schema,cn=config # жестко прописанная core схема dn: cn=cosine,cn=schema,cn=config # cosine схема dn: cn=nis,cn=schema,cn=config # NIS схема dn: cn=inetorgperson,cn=schema,cn=config # InetOrgPerson схема dn: olcDatabase=frontend,cn=config # база Frontend, настройки по умолчанию для других баз dn: olcDatabase=config,cn=config # база конфигурации slapd dn: olcDatabase=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, которую можно использовать следующим образом:
Также с помощью ключа –x можно пройти аутентификацию в LDAP:
$ ldapwhoami -x -D cn=admin,dc=domain,dc=com -W
При этом, когда вы используете 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=mdb,cn=config add: olcDbIndex olcDbIndex: mail eq,sub
После этого нам необходимо выполнить следующую команду:
$ sudo ldapmodify -Q -Y EXTERNAL -H ldapi:/// -f uid_index.ldif
modifying entry «olcDatabase=mdb,cn=config»
Убедиться в том, что изменения применились можно с помощью следующей команды:
$ sudo ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b \
cn=config '(olcDatabase=mdb)' olcDbIndex dn: olcDatabase=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 необходимо добавить правило:
А для настройки журналирования в самом 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. Мы разберем, что такое процесс и программа, а также познакомимся с системными вызовами для создания процесса.