Настройка OpenLDAP и выполнение административных задач LDAP

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

Требования

Чтобы начать работу, вы должны иметь доступ к системе с установленным и настроенным OpenLDAP. Все инструкции вы найдете в мануале Установка и настройка OpenLDAP и phpLDAPadmin в Ubuntu 14.04. Вы также должны быть знакомы с базовой терминологией LDAP.

Онлайн-конфигурация OpenLDAP

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

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

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

Этот мануал сосредоточен на базовом управлении OpenLDAP.

Доступ к Root DSE

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

Примечание: DSE расшифровывается как «DSA specific entry» — это запись управления или контроля на сервере LDAP. DSA расшифровывается как «directory system agent» (агент системы каталогов), это сервер каталогов, который реализует протокол LDAP.

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

Для этого нужна команда:

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

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

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 на localhost. Флаг -x без дополнительной информации аутентификации позволяет серверу создать анонимное соединение. Область поиска определяется с помощью null с -s base -b «». Чтобы подавить посторонний вывод, используйте -LLL. «+» выводит скрытые операционные атрибуты (вот где мы найдем нужную нам информацию).

Поиск DIT-записей текущего сервера

Давайте попробуем выяснить, какие DIT-записи обслуживает данный сервер LDAP. Найти эту информацию можно в значении атрибута namingContexts, которое можно найти в выводе выше.

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

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

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

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

dn:
namingContexts: dc=example,dc=com

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

Поиск конфигурационной DIT-записи

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

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

ldapsearch -H ldap:// -x -s base -b "" -LLL "configContext"
dn:
configContext: cn=config

Конфигурационный  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 на -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), а не весь их контент:

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.

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

Запись админа

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

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

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

Вы получите примерно такой результат:

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 для DIT, основанного на dc=example,dc=com. Также здесь есть хешированный пароль.

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

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

Просмотр встроенных схем

Встроенные схемы можно найти в записи cn=schema,cn=config. Для этого нужно ввести:

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

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

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

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

Обычно они содержат заключенное в скобки число, за которым следует имя схемы, например cn={0}core,cn=schema,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 "cn={3}inetorgperson,cn=schema,cn=config" -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.

Бэкэнд

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

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

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

В результате вы увидите информацию о технологии хранения ваших данных.

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=configdatabase, которые мы сейчас используем. В большинстве случаев это будут главным образом настройки контроля доступа, репликации и т. д.
  • olcDatabase={1}hdb,cn=config: эта запись определяет параметры базы данных указанного типа (в этом случае hdb). Она может определять элементы управления доступом, сведения о хранении, кэшировании и буферизации данных, а также корневые записи и административные данные DIT.

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

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

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

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

Отображение атрибутов записи (метаданных)

До сих пор мы работали в основном с DIT 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

Это позволяет увидеть, кто изменил или создал запись, когда это случилось и т.д.

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

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

Поиск подсхемы

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

ldapsearch -H ldap:// -x -s base -b "dc=example,dc=com" -LLL subschemaSubentry
[list subchema entry]
dn: dc=chilidonuts,dc=tk
subschemaSubentry: cn=Subschema

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

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

Чтобы просмотреть содержимое записи подсхемы, нужно запросить запись подсхемы, найденную выше, с областью «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 может сразу же повлиять на запущенную систему. Кроме того, управление системой с помощью DIT позволяет вам настроить удаленное администрирование с помощью инструментов LDAP. Это означает, что вы можете отделить администрирование LDAP от управления сервером.

Tags: ,