Как настроить OpenLDAP и выполнить административные задачи LDAP

Вступление

Управление системой OpenLDAP может быть затруднено, если вы не знаете, как настроить свою систему или где найти важную информацию, которая вам нужна. В этом руководстве мы покажем, как запросить у вашего сервера OpenLDAP важную информацию и как внести изменения в вашу работающую систему.

Предпосылки

Для начала вы должны иметь доступ к системе с установленным и настроенным OpenLDAP. Вы можете узнать, как настроить сервер OpenLDAP https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-openldap-and-phpldapadmin-on-an-ubuntu-14-04- сервер [здесь]. Вы должны быть знакомы с основной терминологией, используемой при работе со службой каталогов LDAP. This Guide можно использовать для более подробного ознакомления с этими темами.

Конфигурация OpenLDAP Online

Системы LDAP организуют данные, которые они хранят, в иерархические структуры, называемые * деревьями информации каталогов * или * DIT * для краткости. Начиная с версии 2.3, фактическая конфигурация для серверов OpenLDAP управляется в специальном DIT, обычно с корнем в записи, называемой + cn = config +.

Эта система конфигурации известна как онлайн-конфигурация OpenLDAP или * OLC *. В отличие от устаревшего метода конфигурации, который основывался на чтении файлов конфигурации при запуске службы, изменения, внесенные в OLC, реализуются немедленно и часто не требуют перезапуска службы.

Система OLC использует стандартные методы LDAP для аутентификации и внесения изменений. Из-за этого управление для опытных администраторов LDAP часто является беспроблемным, поскольку они могут использовать те же знания, навыки и инструменты, которые они используют для управления DIT данных. Однако для новичков в LDAP может быть сложно начать работу, так как вам может понадобиться знать, как использовать инструменты LDAP для настройки среды обучения.

Это руководство будет направлено на то, чтобы научить вас основам администрирования OpenLDAP, чтобы справиться с этой ситуацией, чтобы вы могли начать изучать LDAP и управлять своими системами.

Доступ к корневому DSE

Мы начнем с разговора о конструкции, называемой корневым DSE, которая является структурой, которая содержит все отдельные DIT нашего сервера. Это в основном запись, используемая для управления всеми DIT, о которых знает сервер. Начав с этой записи, мы можем запросить сервер, чтобы узнать, как он организован, и выяснить, куда идти дальше.

Что такое DSE?

Чтобы запросить корневую DSE, мы должны выполнить поиск с пустой (нулевой) базой поиска и с областью поиска «base». Базовая область поиска означает, что будет возвращена только данная запись. Обычно это используется для ограничения глубины поиска, но при работе с корневым DSE это требуется (информация не будет возвращена, если выбрана любая другая область поиска).

Команда нам нужна это:

ldapsearch -H ldap:// -x -s base -b "" -LLL "+"

Мы предполагаем, что вы выполняете это с самого сервера LDAP и что вы еще не установили никаких ограничений доступа. Результаты должны выглядеть примерно так:

корневой вывод DSE

dn:
structuralObjectClass: OpenLDAProotDSE
configContext: cn=config
namingContexts: dc=example,dc=com
supportedControl: 2.16.840.1.113730.3.4.18

. . .

supportedLDAPVersion: 3
supportedSASLMechanisms: GS2-IAKERB
supportedSASLMechanisms: GS2-KRB5
supportedSASLMechanisms: SCRAM-SHA-1
supportedSASLMechanisms: GSSAPI
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
entryDN:
subschemaSubentry: cn=Subschema

Мы немного усекли вывод. Вы можете увидеть важные метаданные об этом сервере LDAP. Мы рассмотрим, что значат некоторые из этих предметов, чуть позже. Сейчас мы рассмотрим команду, сгенерировавшую этот вывод.

Команда + -H ldap: // + используется для указания незашифрованного запроса LDAP на локальном хосте. + -X + без какой-либо информации для аутентификации позволяет серверу знать, что вы хотите анонимное соединение. Мы сообщаем ему область поиска и устанавливаем нулевую базу поиска с помощью + -s base -b" "+. Мы подавляем некоторый посторонний вывод с помощью + -LLL +. Наконец, " + " указывает, что мы хотим видеть операционные атрибуты, которые обычно бы скрыты (именно здесь мы найдем нужную нам информацию).

Найти DIT, которыми управляет этот сервер

Сейчас мы пытаемся выяснить, для каких DIT настроен данный конкретный сервер LDAP. Мы можем найти это в качестве значения операционного атрибута + namingContexts +, который мы видим в выводе выше.

Если бы это была единственная информация, которую мы хотели, мы могли бы создать лучший запрос, который бы выглядел так:

ldapsearch -H ldap:// -x -s base -b "" -LLL "namingContexts"

Здесь мы вызвали точный атрибут, значение которого мы хотим знать. Базовая запись каждого DIT на сервере доступна через атрибут + namingContexts +. Это операционный атрибут, который обычно скрыт, но его явный вызов позволяет его вернуть.

Это будет подавлять другую информацию, давая нам чистый вывод, который выглядит следующим образом:

поиск namingContexts

dn:
namingContexts:

Мы можем видеть, что этот сервер LDAP имеет только один (неуправляемый) DIT, который коренится в записи с отличительным именем (DN) + dc = пример, dc = com +. Возможно, это вернет несколько значений, если сервер отвечает за дополнительные DIT.

Найти конфигурацию DIT

DIT, который можно использовать для настройки сервера OpenLDAP, не возвращается поиском + namingContexts +. Корневая запись конфигурации DIT вместо этого хранится в выделенном атрибуте, называемом + configContext +.

Чтобы узнать базовое DN для DIT конфигурации, вы запрашиваете этот конкретный атрибут, как мы делали раньше:

ldapsearch -H ldap:// -x -s base -b "" -LLL "configContext"

Результат, скорее всего, будет таким:

configContext search

dn:
configContext:

Конфигурация DIT основана на DN, называемом + cn = config +. Поскольку вполне вероятно, что это точно соответствует DIT вашей конфигурации, мы будем использовать это в руководстве. Измените данные команды, если ваша конфигурация DIT отличается.

Доступ к конфигурации DIT

Теперь, когда мы знаем местоположение DIT конфигурации, мы можем запросить его, чтобы увидеть текущие настройки. Для этого нам нужно немного отклониться от формата, который мы использовали до этого момента.

Поскольку этот DIT можно использовать для изменения настроек нашей системы LDAP, он имеет некоторые элементы управления доступом. По умолчанию он настроен на разрешение администрирования для пользователей root или + sudo + ОС.

Команда, которая нам нужна, выглядит следующим образом:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q

Чтобы сделать это, вам нужно использовать + sudo + перед командой и заменить + -x + в наших предыдущих командах + ldapsearch + на + -Y EXTERNAL +, чтобы указать, что мы хотим использовать метод аутентификации SASL , Вам также нужно изменить протокол с + ldap: // + на + ldapi: // +, чтобы сделать запрос через сокет Unix. Это позволяет OpenLDAP проверять пользователя операционной системы, который должен оценить свойства управления доступом. Затем мы используем запись + cn = config + в качестве основы для нашего поиска.

Результатом будет длинный список настроек. Может быть полезно перенаправить его в пейджер, чтобы вы могли легко прокручивать вверх и вниз:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q | less

Вы можете видеть, что существует довольно много информации, которую можно обработать. Эта команда распечатывает все дерево конфигурации. Чтобы лучше понять иерархию, в которой информация организована и хранится, давайте просто распечатаем различные входные DN:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q dn

Это будет гораздо более управляемый список, в котором будут отображаться заголовки записей (DN) вместо всего их содержимого:

cn = настройки входа DN

dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}hdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config

Эти записи представляют иерархию конфигурации, в которой настроены различные области системы LDAP. Давайте посмотрим, какие настройки обрабатываются каждой из этих записей:

Запись верхнего уровня содержит некоторые глобальные настройки, которые будут применяться ко всей системе (если не переопределены в более конкретном контексте). Вы можете увидеть, что хранится в этой записи, набрав:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q -s base

Общими элементами в этом разделе являются глобальные параметры авторизации, параметры многословия на уровне журнала, указатель на местоположение файла PID процесса и информация об аутентификации SASL.

Записи ниже этого настраивают более определенные области системы. Давайте посмотрим на различные типы записей, которые вы, вероятно, увидите.

Найти запись администратора

Теперь, когда у вас есть доступ к DIET + cn = config, мы можем найти корни всех DIT в системе. RootDN - это в основном административная запись. Мы также можем найти пароль (обычно хэшированный), который можно использовать для входа в эту учетную запись.

Чтобы найти rootDN для каждого из ваших DIT, введите:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" "(olcRootDN=*)" olcSuffix olcRootDN olcRootPW -LLL -Q

Вы получите распечатку, которая выглядит примерно так:

Информация rootDN

dn: olcDatabase={1}hdb,cn=config
olcSuffix: dc=example,dc=com
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: {SSHA}AOADkATWBqb0SJVbGhcIAYF+ePzQJmW+

Если ваша система обслуживает несколько DIT, вы должны увидеть один блок для каждого из них. Здесь мы можем видеть, что наша запись администратора: + cn = admin, dc = example, dc = com` для DIRT на основе + dc = example, dc = com. Мы также можем увидеть хешированный пароль.

Просмотр информации о схеме

Схемы LDAP определяют объектные классы и атрибуты, доступные для системы. Схемы могут быть добавлены в систему во время выполнения, чтобы сделать доступными различные типы объектов и атрибуты. Однако определенные свойства встроены в саму систему.

Посмотреть встроенную схему

Встроенную схему можно найти в записи + cn = schema, cn = config +. Вы можете увидеть схему, встроенную в систему LDAP, набрав:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s base -LLL -Q | less

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

Посмотреть дополнительную схему

Встроенная схема обеспечивает хорошую отправную точку, но, вероятно, в ней не будет всего, что вы хотите использовать в своих записях. Вы можете добавить дополнительную схему в вашу систему с помощью традиционных методов LDIF. Они будут доступны в виде вложенных записей под записью + cn = schema +, представляющей встроенную схему.

Обычно они именуются с помощью номера в скобках, за которым следует имя схемы, например + cn = {0} core, cn = схема, cn = config +. Число в скобках представляет индекс, используемый для определения порядка считывания схемы в систему. Обычно это делается автоматически системой при их добавлении.

Чтобы увидеть только имена дополнительной схемы, загруженной в систему, вы можете набрать:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s one -Q -LLL dn

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

дополнительные схемы

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

Сами схемы и присвоенный порядковый номер могут отличаться. Вы можете просмотреть содержимое определенной схемы, выполнив базовый поиск и перечислив интересующую вас конкретную схему. Например, если мы хотим увидеть схему + cn = {3} inetorgperson +, указанную выше, мы можем напечатать:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "" -s base -LLL -Q | less

Если вы хотите распечатать все дополнительные схемы, введите:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -s one -LLL -Q | less

Если вы хотите распечатать всю схему, включая встроенную схему, используйте вместо этого:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=schema,cn=config" -LLL -Q | less

Модули, серверные части и настройки базы данных

Некоторые другие области, представляющие интерес в конфигурации DIT, - это модули и различные параметры технологии хранения.

Модули

Модули используются для расширения функциональности системы OpenLDAP. Эти записи используются для указания и загрузки модулей для использования их функциональных возможностей. Фактическая конфигурация выполняется через другие записи.

Записи, используемые для загрузки модулей, начнутся с + cn = module {#} +, где скобка содержит номер, чтобы упорядочить загрузку модулей и провести различие между различными записями.

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

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "objectClass=olcModuleList"

Вы увидите модули, которые в данный момент загружены в систему:

загруженные модули

dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb

Этот конкретный пример имеет только один модуль, который позволяет нам использовать внутренний модуль + hdb +.

Backends

Бэкэнд-записи используются для указания технологии хранения, которая фактически будет обрабатывать хранение данных.

Чтобы увидеть, какие бэкэнды активны для вашей системы, введите:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "objectClass=olcBackendConfig"

Результат даст вам представление об используемой технологии хранения. Это может выглядеть примерно так:

OpenLDAP активные бэкэнды

dn: olcBackend={0}hdb,cn=config
objectClass: olcBackendConfig
olcBackend: {0}hdb

Базы данных

Фактическая конфигурация этих систем хранения выполняется в отдельных записях базы данных. Должна быть запись базы данных для каждого из DIT, которые обслуживает система OpenLDAP. Доступные атрибуты будут зависеть от серверной части, используемой для каждой из баз данных.

Чтобы увидеть все имена записей базы данных в системе, введите:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "cn=config" -LLL -Q "olcDatabase=*" dn

Вы должны увидеть DN записей базы данных:

записи базы данных

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config

Давайте немного поговорим о том, для чего используется каждый из них:

  • * + olcDatabase = {- 1} frontend, cn = config + *: эта запись используется для определения возможностей специальной базы данных «frontend». Это псевдо-база данных, используемая для определения глобальных настроек, которые должны применяться ко всем другим базам данных (если они не переопределены).

  • * + olcDatabase = {0} config, cn = config + *: Эта запись используется для определения настроек базы данных + cn = config +, которую мы сейчас используем. В большинстве случаев это будут в основном настройки контроля доступа, настройки репликации и т. Д.

  • * + olcDatabase = {1} hdb, cn = config + *: эта запись определяет настройки для базы данных указанного типа (в данном случае + hdb +). Как правило, они определяют элементы управления доступом, подробную информацию о том, как данные будут храниться, кэшироваться и буферизироваться, а также корневую запись и административные данные DIT.

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

Вы можете увидеть содержимое любой из этих записей, набрав:

sudo ldapsearch -H ldapi:// -Y EXTERNAL -b "" -LLL -Q -s base | less

Используйте DN записи, возвращенные из предыдущей команды, чтобы заполнить поле ++.

Напечатайте операционные атрибуты записи (метаданные)

До сих пор мы работали в основном с DIR + cn = config. Остальная часть этого руководства будет применима и к обычным DIT.

Каждая запись имеет операционные атрибуты, которые действуют как административные метаданные. К ним можно получить доступ в любом DIT, чтобы узнать важную информацию о записи.

Чтобы распечатать все операционные атрибуты для записи, вы можете указать специальный атрибут «» после записи. Например, чтобы распечатать рабочие атрибуты записи в ` dc = example, dc = com +`, мы могли бы напечатать:

ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL "+"

Это распечатает все операционные атрибуты. Скорее всего, это будет выглядеть примерно так:

[list operational attributes]
dn: dc=example,dc=com
structuralObjectClass: organization
entryUUID: cdc658a2-8c3c-1034-8645-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150511151904.220840Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150511151904Z
entryDN: dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: TRUE

Это может быть полезно, среди прочего, для просмотра, кто изменил или создал запись в какое время.

Работа с подсхемой

Подсхема - это представление доступных классов и атрибутов. Он показывает информацию, аналогичную элементам схемы в DIET + cn = config, с некоторой дополнительной информацией. Это доступно через обычные неконфигурированные DIT, поэтому root-доступ не требуется.

Нахождение подсхемы

Чтобы найти подсхему для записи, вы можете запросить все рабочие атрибуты записи, как мы делали выше, или вы можете запросить конкретный атрибут, который определяет подсхему для записи (+ subschemaSubentry +):

ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL subschemaSubentry

Это распечатает запись подсхемы, которая связана с текущей записью:

[list subchema entry]
dn: dc=chilidonuts,dc=tk
subschemaSubentry:

Обычно каждая запись в дереве имеет одну и ту же подсхему, поэтому вам обычно не нужно запрашивать это для каждой записи.

Отображение подсхемы

Чтобы просмотреть содержимое записи подсхемы, нам нужно запросить найденную выше запись подсхемы с областью «base». Вся важная информация хранится в эксплуатационных атрибутах, поэтому нам придется снова использовать специальный селектор «+».

Команда нам нужна:

ldapsearch -H ldap:// -x -s base -b "<^>cn=subschema" -LLL "+" | less

Это распечатает всю запись подсхемы. Мы можем фильтровать по типу информации, которую мы ищем.

Если вы хотите увидеть определения синтаксиса LDAP, вы можете отфильтровать, набрав:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL ldapSyntaxes | less

Если вы хотите просмотреть определения, которые управляют обработкой запросов на совпадение с записями, введите:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL matchingRules | less

Чтобы увидеть, с какими элементами можно сопоставить соответствующие правила, введите:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL matchingRuleUse | less

Чтобы просмотреть определения для доступных типов атрибутов, используйте:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL attributeTypes | less

Чтобы просмотреть определения objectClass, введите:

ldapsearch -H ldap:// -x -s base -b "cn=subschema" -LLL objectClasses | less

Заключение

Хотя работа с сервером OpenLDAP поначалу может показаться сложной, знакомство с DIT конфигурации и способами поиска метаданных в системе может помочь вам начать работу. Изменение + cn = config + DIT с помощью файлов LDIF может немедленно повлиять на работающую систему. Кроме того, настройка системы через DIT позволяет вам потенциально настроить удаленное администрирование, используя только инструменты LDAP. Это означает, что вы можете отделить администрирование LDAP от администрирования сервера.