Interested Article - LDAP

LDAP ( англ. Lightweight Directory Access Protocol — «легковесный протокол доступа к каталогам ») — протокол прикладного уровня для доступа к службе каталогов X.500 , разработанный IETF как облегчённый вариант разработанного ITU-T протокола . LDAP — относительно простой протокол , использующий TCP/IP и позволяющий производить операции аутентификации ( bind ), поиска ( search ) и сравнения ( compare ), а также операции добавления, изменения или удаления записей . Обычно LDAP- сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP . Для LDAP-сеансов, инкапсулированных в SSL , обычно используется порт 636.

Описание

Всякая запись в каталоге LDAP состоит из одного или нескольких атрибутов и обладает уникальным именем (DN — англ. Distinguished Name ). Уникальное имя может выглядеть, например, следующим образом: «cn=Иван Петров,ou=Сотрудники,dc=example,dc=com» . Уникальное имя состоит из одного или нескольких относительных уникальных имён (RDN — англ. Relative Distinguished Name ), разделённых запятой. Относительное уникальное имя имеет вид ИмяАтрибута=значение . На одном уровне каталога не может существовать двух записей с одинаковыми относительными уникальными именами. В силу такой структуры уникального имени записи в каталоге LDAP можно легко представить в виде дерева.

Запись может состоять только из тех атрибутов, которые определены в описании класса записи ( object class ), которые, в свою очередь, объединены в схемы ( schma ). В схеме определено, какие атрибуты являются для данного класса обязательными, а какие — необязательными. Также схема определяет тип и правила сравнения атрибутов. Каждый атрибут записи может хранить несколько значений.

Стандарты

Протокол LDAP определён в следующих RFC :

  • — Lightweight Directory Access Protocol (LDAP): Technical Specification Roadmap (заменяет )
  • — Lightweight Directory Access Protocol (LDAP): The Protocol
  • — Lightweight Directory Access Protocol (LDAP): Directory Information Models
  • — Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms
  • — Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names
  • — Lightweight Directory Access Protocol (LDAP): String Representation of Search Filters
  • — Lightweight Directory Access Protocol (LDAP): Uniform Resource Locator
  • — Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules
  • — Lightweight Directory Access Protocol (LDAP): Internationalized String Preparation
  • — Lightweight Directory Access Protocol (LDAP): Schema for User Applications
  • (aka BCP 64) — Internet Assigned Numbers Authority (IANA) Considerations for the Lightweight Directory Access Protocol (LDAP) (заменяет )
  • (aka BCP 118) — Considerations for Lightweight Directory Access Protocol (LDAP): Extension

Кроме протокола, есть верхнеуровневые международные стандарты, описывающие все, что связано с моделью интеграции систем и каталогом (Directory), доступ к которому реализуется с помощью LDAP и DAP:

  • Recommendation ITU-T X.200 (1994) | ISO/IEC 7498-1:1994, Information technology — Open Systems Interconnection — Basic Reference Model: The basic model.
  • Recommendation ITU-T X.500 (2019) | ISO/IEC 9594-1:2020, Information technology — Open Systems Interconnection — The Directory: Overview of concepts, models and services.
  • Recommendation ITU-T X.501 (2019) | ISO/IEC 9594-2:2020, Information technology — Open Systems Interconnection — The Directory: Models.
  • Recommendation ITU-T X.509 (2019) | ISO/IEC 9594-8:2020, Information technology — Open Systems Interconnection — The Directory: Public-key and attribute certificate frameworks.
  • Recommendation ITU-T X.511 (2019) | ISO/IEC 9594-3:2020, Information technology — Open Systems Interconnection — The Directory: Abstract service definition.
  • Recommendation ITU-T X.518 (2019) | ISO/IEC 9594-4:2020, Information technology — Open Systems Interconnection — The Directory: Procedures for distributed operation.
  • Recommendation ITU-T X.519 (2019) | ISO/IEC 9594-5:2020, Information technology — Open Systems Interconnection — The Directory: Protocol specifications.
  • Recommendation ITU-T X.520 (2019) | ISO/IEC 9594-6:2020, Information technology — Open Systems Interconnection — The Directory: Selected attribute types.
  • Recommendation ITU-T X.521 (2019) | ISO/IEC 9594-7:2020, Information technology — Open Systems Interconnection — The Directory: Selected object classes.
  • Recommendation ITU-T X.525 (2019) | ISO/IEC 9594-9:2020, Information technology — Open Systems Interconnection — The Directory: Replication.

Функциональное описание протокола

В протоколе LDAP определены следующие операции для работы с Каталогом:

  • Операции подключения/отключения
    • Подключение ( bind ) — позволяет ассоциировать клиента с определённым объектом Каталога (фактическим или виртуальным) для осуществления контроля доступа для всех прочих операций чтения/записи. Для того, чтобы работать с Каталогом, клиент обязан пройти аутентификацию как объект, отличительное имя (Distinguished Name) которого находится в пространстве имён, описываемом Каталогом. В запросе операции bind клиент может не указывать отличительное имя, в таком случае будет осуществлено подключение под специальным псевдонимом anonymous (обычно это что-то наподобие гостевой учётной записи с минимальными правами)
    • Отключение ( unbind ) — позволяет клиенту в рамках сеанса соединения с LDAP-сервером переключиться на аутентификацию с новым отличительным именем. Команда unbind возможна только после аутентификации на сервере с использованием bind, в противном случае вызов unbind возвращает ошибку
  • Поиск ( search ) — чтение данных из Каталога. Операция сложная, на вход принимает множество параметров, среди которых основными являются:
    • База поиска ( baseDN ) — ветка DIT, от которой начинается поиск данных
    • Глубина поиска ( scope ) — может иметь значения (в порядке увеличения охватываемой области): base, one, sub
      • base — поиск непосредственно в узле — базе поиска
      • one — поиск по всем узлам, являющимся прямыми потомками базового в иерархии, то есть лежащим на один уровень ниже него
      • sub — поиск по всей области, нижележащей относительно базы поиска (baseDN)
    • Фильтр поиска ( searchFilter ) — это выражение, определяющее критерии отбора объектов каталога, попадающих в область поиска, задаваемую параметром scope. Выражение фильтра поиска записывается в польской (префиксной) нотации , состоящей из логических (булевых) операторов и операндов, в свою очередь являющихся внутренними операторами сопоставления значений атрибутов LDAP (в левой части) с выражениями (в правой части) с использованием знака равенства.

Логические операторы представлены стандартным «набором»: & (логическое «И»), | (логическое «ИЛИ») и ! (логическое «НЕ»).

Пример фильтра поиска [ где? ] :

(&(!(entryDN:dnSubtreeMatch:=dc=Piter,dc=Russia,ou=People,dc=example,dc=com))(objectClass=sambaSamAccount)
(|(sn=Lazar*)(uid=Nakhims*)))

  • Операции модификации — позволяют изменять данные в Каталоге, при этом в понятие модификации входит как добавление, удаление и перемещение записей целиком, так и редактирование записей на уровне их атрибутов. Подтипы модификации:
    • Добавление ( add ) — добавление новой записи
    • Удаление ( delete ) — удаление записи
    • Модификация RDN ( modrdn ) — перемещение/копирование записи
    • Модификация записи ( modify ) — позволяет редактировать запись на уровне её атрибутов,
      • добавляя новый атрибут или новое значение многозначного атрибута (add)
      • удаляя атрибут со всеми его значениями (delete)
      • заменяя одно значение атрибута на другое (replace)
      • а также увеличивая (уменьшая) значение атрибута в рамках атомарной операции (increment)
  • Операция сравнения ( compare ) — позволяет для определённого отличительного имени сравнить выбранный атрибут с заданным значением

Операция запроса возможностей

В стандарте LDAP определена специальная операция, позволяющая клиентам получать информацию о поддерживаемых сервером версиях протокола и возможностях LDAP-сервера. Эта команда является надстройкой (расширением) для операции search и выполняется при следующем сочетании параметров последней:

  • BIND анонимный
  • База поиска baseDN указана как "" (пустая строка)
  • Глубина поиска scope указана как base
  • Фильтр поиска: (objectClass=*)
  • Перечень запрашиваемых атрибутов: либо явное перечисление, либо « + » ( ВНИМАНИЕ ! « * » не покажет значения служебных атрибутов, содержащих всю полезную информацию)

Например, при использовании LDAP-клиента из поставки OpenLDAP команда запроса возможностей может выглядеть как:

ldapsearch -x -H ldap:// host : port -LLL -b "" -s base '(objectClass=*)' supportedControls supportedCapabilities

Операция запроса схемы

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

ldapsearch -x -H ldap:// host : port -LLL -s base -b "" '(objectClass=*)' subschemaSubentry

Полученное значение используется в качестве Отличительного имени базы поиска ( baseDN ) в Операции запроса схемы, которую можно описать так:

  • BIND анонимный, либо полный. Большинство серверов каталогов поддерживают запрос схемы без предварительного BIND, но, есть исключения (например, Active Directory );
  • База поиска baseDN равна значению атрибута subschemaSubentry , возвращаемого ;
  • Глубина поиска scope указана как base ;
  • Фильтр поиска: (objectClass=*) ;
  • Перечень запрашиваемых атрибутов: явное перечисление атрибутов (attributeTypes, objectClasses) возможно для всех серверов каталогов, в случае OpenLDAP и некоторых других (OpenDS,ApacheDS и т. д.) возможно указание «+»;

Например, при использовании LDAP-клиента из поставки OpenLDAP Операция запроса схемы может выглядеть так:

ldapsearch -x -H ldap:// host : port -LLL -s base -b "cn=Subschema" '(objectClass=*)' ldapSyntaxes matchingRules

Реализации

Серверная часть

LDAP является широко используемым стандартом доступа к службам каталогов. Из свободно распространяемых открытых реализаций наиболее известен сервер OpenLDAP , из проприетарных — поддержка протокола имеется в Active Directory — службе каталогов от компании Microsoft , предназначенной для централизации управления сетями Windows . Сервер IBM Lotus Domino в своём составе также имеет службу LDAP . Свои реализации служб каталогов, поддерживающие LDAP как протокол доступа, предлагают и другие крупные компании, например, Novell и Sun и, впоследствии, OpenDJ.

Перечень наиболее известных на сегодняшний день LDAP-серверов:

  1. OpenLDAP
  2. Novell eDirectory
  3. (форк проекта OpenLDAP)
  4. Microsoft Active Directory
  5. Samba4 LDAP (OpenSource-реализация MS AD)
  6. 389 Directory Server (по сути тестовая версия предыдущего)
  7. IBM
  8. IBM Domino LDAP
  9. CommuniGate LDAP

Клиентская часть

В качестве клиентов LDAP выступают как адресные книги почтовых клиентов , так и back-end’ы различных сетевых служб (серверы DNS, SMTP, Samba, UTS и т. д.).

См. также

Примечания

  1. от 31 мая 2011 на Wayback Machine (англ.)
  2. . Дата обращения: 31 октября 2010. Архивировано из 8 июня 2013 года.
  3. . Дата обращения: 31 октября 2010. Архивировано из 4 марта 2016 года.

Ссылки

Ресурсы

Серверы

  • 389 Directory Server — бывший Fedora Project Directory Server, проект с открытым исходным кодом, на основе которого создаётся коммерческий продукт —
  • — официальный сайт Active Directory
  • IBM Lotus Domino

Клиенты

  • — кроссплатформенная opensource ( APL2 ) программа для администрирования LDAP каталога на базе Eclipse ( Java ).
  • — Открытая ( GPL ) программа под Windows, для управления LDAP данными
  • OpenSource утилита для администрирования каталога LDAP на языке Java .
  • — развитый клиент LDAP с веб-интерфейсом

Программные интерфейсы (API)

Источник —

Same as LDAP