Введение

Сетевой протокол для поддержки распределенных справочных информационных служб.

Легкий протокол доступа к каталогам (LDAP) – это открытый, независимый от поставщика, отраслевой стандартный протокол прикладного уровня для доступа и обслуживания распределенных справочных информационных служб по сети Интернет-протокола (IP). Справочные службы играют важную роль в разработке интранет- и интернет-приложений, обеспечивая возможность обмена информацией о пользователях, системах, сетях, сервисах и приложениях во всей сети. В качестве примеров, справочные службы могут предоставлять любой структурированный набор записей, часто с иерархической структурой, например, корпоративный каталог электронной почты. Аналогично, телефонный справочник представляет собой список абонентов с адресом и номером телефона. LDAP специфицирован в серии публикаций Internet Engineering Task Force (IETF) на основе стандарта Request for Comments (RFC), с использованием языка описания ASN.1. Последней спецификацией является версия 3, опубликованная как RFC 4511 (обзор технических спецификаций представлен в RFC4510). Распространенное применение LDAP – предоставление централизованного хранилища имен пользователей и паролей. Это позволяет множеству различных приложений и сервисов подключаться к серверу LDAP для аутентификации пользователей. LDAP основан на упрощенном подмножестве стандартов, содержащихся в стандарте X.500. Благодаря этой взаимосвязи, LDAP иногда называют X.500 lite.

История

После 70 лет разработки и управления телефонными справочниками телекоммуникационные компании хорошо понимали требования к каталогам. Эти компании внедрили концепцию каталожных служб в информационные технологии и компьютерные сети, и их вклад вылился в создание всеобъемлющей спецификации X.500 – набора протоколов, разработанных Международным союзом электросвязи (МСЭ) в 1980-х годах. Доступ к каталожным службам X.500 традиционно осуществлялся через протокол доступа к каталогам X.500 (DAP), требовавший использования стека протоколов Open Systems Interconnection (OSI). LDAP изначально задумывался как облегченный альтернативный протокол для доступа к каталожным службам X.500 через более простой (и теперь широко распространенный) стек протоколов TCP/IP. Эта модель доступа к каталогам была заимствована из протоколов DIXIE и Directory Assistance Service. Протокол был первоначально разработан Тимом Хауэсом из Университета Мичигана, Стивом Киллом из Isode Limited, Колином Роббинсом из Nexor и Вэнгиком Йонгом из Performance Systems International примерно в 1993 году как преемник DIXIE и DAS. Марк Уолл из Critical Angle Inc., Тим Хаус и Стив Килл начали работу в 1996 году над новой версией LDAP, LDAPv3, под эгидой Internet Engineering Task Force (IETF). LDAPv3, впервые опубликованный в 1997 году, заменил LDAPv2, добавил поддержку расширяемости, интегрировал Simple Authentication and Security Layer и лучше согласовал протокол с редакцией X.500 1993 года. Дальнейшая разработка спецификаций LDAPv3 и многочисленных расширений, добавляющих функциональность к LDAPv3, осуществлялась в рамках IETF. На ранних этапах разработки LDAP он был известен как протокол облегченного просмотра каталогов, или LDBP. Он был переименован в связи с расширением области применения протокола за пределы просмотра и поиска каталогов, включив в себя функции обновления каталогов. Название "облегченный" он получил, поскольку был менее требователен к сетевым ресурсам, чем его предшественник DAP, и поэтому его было легче реализовать в Интернете благодаря относительно скромному использованию полосы пропускания. LDAP оказал влияние на последующие интернет-протоколы, включая более поздние версии X.500, XML Enabled Directory (XED), Directory Service Markup Language (DSML), Service Provisioning Markup Language (SPML) и Service Location Protocol (SLP). Он также используется в качестве основы для Microsoft Active Directory.

Изменить DN

Изменение DN (перемещение/переименование записи) принимает новый RDN (Relative Distinguished Name), опционально новый DN родительской записи и флаг, указывающий, следует ли удалять значения в записи, соответствующие старому RDN. Сервер может поддерживать переименование целых поддеревьев каталога. Операция обновления является атомарной: другие операции увидят либо новую, либо старую запись. С другой стороны, LDAP не определяет транзакции, охватывающие несколько операций: если вы прочитаете запись, а затем попытаетесь ее изменить, другой клиент мог успеть обновить эту запись. Однако серверы могут реализовывать расширения, поддерживающие такую функциональность.

Расширенные операции

Расширенная операция — это универсальная операция LDAP, позволяющая определять новые операции, не предусмотренные исходной спецификацией протокола. StartTLS является одним из наиболее важных расширений. Другие примеры включают Cancel и Password Modify.

Оставь меня .

Операция Abandon запрашивает у сервера прервать операцию, идентифицированную по ID сообщения. Сервер не обязан удовлетворять этот запрос. Ни операция Abandon, ни успешно прерванная операция не отправляют ответ. Похожая расширенная операция Cancel отправляет ответы, но не все реализации это поддерживают.

Развязать

Операция "Развязка" прерывает все ожидающие выполнения операции и закрывает соединение. Она не имеет ответа. Название исторически сложилось и не является обратной операцией к "Привязке". Клиенты могут завершить сеанс, просто закрыв соединение, но рекомендуется использовать "Развязку". "Развязка" позволяет серверу корректно закрыть соединение и освободить ресурсы, которые в противном случае он удерживал бы некоторое время, пока не обнаружил бы, что клиент прервал соединение. Она также инструктирует сервер отменить операции, которые подлежат отмене, и не отправлять ответы на операции, которые отменить невозможно.

Схема

Содержание записей в поддереве регулируется схемой каталога — набором определений и ограничений, касающихся структуры информационного дерева каталога (DIT). Схема сервера каталогов определяет набор правил, регулирующих типы информации, которые может хранить сервер. Она включает в себя ряд элементов, таких как:
Синтаксисы атрибутов — предоставляют информацию о типе информации, который может быть сохранен в атрибуте. Правила сопоставления — предоставляют информацию о том, как проводить сравнения со значениями атрибутов. Области применения правил сопоставления — указывают, какие типы атрибутов могут использоваться в сочетании с конкретным правилом сопоставления. Типы атрибутов — определяют идентификатор объекта (OID) и набор имен, которые могут ссылаться на данный атрибут, а также связывают этот атрибут с синтаксисом и набором правил сопоставления. Классы объектов — определяют именованные коллекции атрибутов и классифицируют их на наборы обязательных и необязательных атрибутов. Формы имен — определяют правила для набора атрибутов, которые должны быть включены в RDN для записи. Правила содержания — определяют дополнительные ограничения относительно классов объектов и атрибутов, которые могут использоваться в сочетании с записью. Правило структуры — определяет правила, регулирующие типы подчиненных записей, которые может иметь данная запись. Атрибуты — это элементы, отвечающие за хранение информации в каталоге, и схема определяет правила для атрибутов, которые могут использоваться в записи, типы значений, которые эти атрибуты могут иметь, и способы взаимодействия клиентов с этими значениями. Клиенты могут узнать об элементах схемы, поддерживаемых сервером, путем получения соответствующей подзаписи подсхемы. Схема определяет классы объектов. Каждая запись должна иметь атрибут objectClass, содержащий именованные классы, определенные в схеме. Определение схемы классов записи определяет, какой объект может представлять запись, например, человека, организацию или домен. Определения классов объектов также определяют список атрибутов, которые должны содержать значения, и список атрибутов, которые могут содержать значения. Например, запись, представляющая человека, может принадлежать к классам "top" и "person". Принадлежность к классу "person" требует, чтобы запись содержала атрибуты "sn" и "cn", а также позволяет записи содержать "userPassword", "telephoneNumber" и другие атрибуты. Поскольку записи могут иметь несколько значений ObjectClasses, каждая запись имеет комплекс дополнительных и обязательных наборов атрибутов, сформированных из объединения классов объектов, которые она представляет. ObjectClasses могут быть унаследованы, и одна запись может иметь несколько значений ObjectClasses, определяющих доступные и обязательные атрибуты самой записи. Схема objectClass аналогична определению класса и экземпляру в объектно-ориентированном программировании, представляющим LDAP objectClass и LDAP-запись соответственно. Серверы каталогов могут публиковать схему каталога, контролирующую запись, в базовом DN, заданном оперативным атрибутом subschemaSubentry записи. (Оперативный атрибут описывает работу каталога, а не информацию о пользователе и возвращается только при поиске, если он явно запрошен.) Администраторы сервера могут добавлять дополнительные записи схемы в дополнение к предоставленным элементам схемы. Схема для представления отдельных людей в организациях называется схемой "белых страниц".

Вариации

Большая часть функционирования сервера остается на усмотрение разработчика или администратора. Соответственно, серверы могут быть настроены для поддержки самых разных сценариев. Например, способ хранения данных на сервере не определен – сервер может использовать плоские файлы, базы данных или выступать в качестве шлюза к другому серверу. Контроль доступа не стандартизирован, хотя работы в этом направлении ведутся и существуют общепринятые модели. Пароли пользователей могут храниться в их записях или в другом месте. Сервер может отказаться выполнять операции по своему усмотрению и устанавливать различные ограничения. Большинство компонентов LDAP расширяемы. Примеры: можно определить новые операции. Контроли могут изменять запросы и ответы, например, для запроса отсортированных результатов поиска. Можно определить новые области поиска и методы аутентификации (Bind). Атрибуты могут иметь опции, изменяющие их семантику.

Другие модели данных

По мере распространения LDAP, поставщики стали предлагать его как протокол доступа к другим сервисам. В этом случае реализация преобразует данные, чтобы они соответствовали модели LDAP/X.500, однако степень соответствия может различаться. Например, существует программное обеспечение для доступа к SQL-базам данных через LDAP, несмотря на то, что LDAP не очень подходит для этой цели. Серверы X.500 также могут поддерживать LDAP. Аналогично, данные, ранее хранившиеся в других типах хранилищ, иногда переносятся в каталоги LDAP. Например, информацию о пользователях и группах Unix можно хранить в LDAP и получать к ней доступ через модули PAM и NSS. LDAP часто используется другими сервисами для аутентификации и/или авторизации (определения действий, которые может выполнять конкретный аутентифицированный пользователь в конкретном сервисе). Например, в Active Directory Kerberos используется на этапе аутентификации, а LDAP – на этапе авторизации. Примером такой модели данных является схема GLUE, которая используется в распределенной информационной системе на основе LDAP, позволяющей пользователям, приложениям и сервисам обнаруживать, какие сервисы доступны в Grid-инфраструктуре, а также получать дополнительную информацию об их структуре и состоянии.

Использование

Сервер LDAP может возвращать перенаправления на другие серверы для запросов, которые он не может обработать самостоятельно. Для этого требуется структура именования для записей LDAP, позволяющая найти сервер, содержащий заданное различающееся имя (DN) – концепция, определенная в каталоге X.500 и также используемая в LDAP. Другой способ определения местоположения серверов LDAP для организации – запись SRV в DNS-сервере. Организация с доменом example.org может использовать верхний уровень LDAP DN dc=example, dc=org (где dc означает компонент домена). Если сервер LDAP также имеет имя ldap.example.org, URL LDAP верхнего уровня организации будет выглядеть как ldap://ldap.example.org/dc=example,dc=org. В X.500 [2008] и LDAPv3 в основном используются два распространенных стиля именования. Они задокументированы в спецификациях ITU и RFC IETF. Исходная форма принимает объект верхнего уровня как объект страны, например c=US, c=FR. Модель компонентного домена использует модель, описанную выше. Примером именования на основе страны может быть l=Locality, ou=Some Organizational Unit, o=Some Organization, c=FR, или в США: cn=Common Name, l=Locality, ou=Some Organizational Unit, o=Some Organization, st=CA, c=US.