LDAP

LDAP ( англ. Lightweight Directory Access Protocol - "Полегшений протокол доступу до каталогами ") - протокол прикладного рівня для доступу до службі каталогів X.500, розроблений IETF як полегшений варіант розробленого ITU-T протоколу DAP. LDAP - відносно простий протокол, що використовує TCP / IP і дозволяє проводити операції авторизації (bind), пошуку (search) та порівняння (compare), а також операції додавання, зміни або видалення записів. Зазвичай LDAP- сервер приймає вхідні з'єднання на порт 389 по протоколам TCP або UDP. Для LDAP-сеансів, інкапсульованих в SSL, зазвичай використовується порт 636.

Всяка запис в каталозі LDAP складається з одного або декількох атрибутів і володіє унікальним ім'ям (DN - англ. Distinguished Name ). Унікальне ім'я може виглядати, наприклад, наступним чином: "cn = Іван Петров, ou = Співробітники, dc = example, dc = com" [1]. Унікальне ім'я складається з одного або декількох відносних унікальних імен (RDN - англ. Relative Distinguished Name ), Розділених комою. Відносне унікальне ім'я має вигляд ІмяАтрібута = значення. На одному рівні каталогу не може існувати двох записів з однаковими відносними унікальними іменами. У силу такої структури унікального імені запису в каталозі LDAP можна легко представити у вигляді дерева.

Запис може складатися тільки з тих атрибутів, які визначені в описі класу записи (object class), які, у свою чергу, об'єднані в схеми (schema). У схемі визначено, які атрибути є для даного класу обов'язковими, а які - необов'язковими. Також схема визначає тип і правила порівняння атрибутів. Кожен атрибут запису може зберігати кілька значень.


1. Стандарти

Протокол LDAP визначений в наступних RFC :

  • RFC 4510 - Lightweight Directory Access Protocol (LDAP): Technical Specification Roadmap (замінює RFC 3377)
  • RFC 4511 - Lightweight Directory Access Protocol (LDAP): The Protocol
  • RFC 4512 - Lightweight Directory Access Protocol (LDAP): Directory Information Models
  • RFC 4513 - Lightweight Directory Access Protocol (LDAP): Authentication Methods and Security Mechanisms
  • RFC 4514 - Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names
  • RFC 4515 - Lightweight Directory Access Protocol (LDAP): String Representation of Search Filters
  • RFC 4516 - Lightweight Directory Access Protocol (LDAP): Uniform Resource Locator
  • RFC 4517 - Lightweight Directory Access Protocol (LDAP): Syntaxes and Matching Rules
  • RFC 4518 - Lightweight Directory Access Protocol (LDAP): Internationalized String Preparation
  • RFC 4519 - Lightweight Directory Access Protocol (LDAP): Schema for User Applications
  • RFC 4520 (aka BCP 64) - Internet Assigned Numbers Authority (IANA) Considerations for the Lightweight Directory Access Protocol (LDAP) (замінює RFC 3383)
  • RFC 4521 (aka BCP 118) - Considerations for Lightweight Directory Access Protocol (LDAP): Extension

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

У протоколі 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 (у лівій частині) з виразами (у правій частині) з використанням знака рівності.

Логічні оператори представлені стандартним "набором": & (логічне "І"), | (логічне "АБО") і! (Логічне "НІ").

Приклад фільтра пошуку:


(| (Sn = Lazar *) (uid = Nakhims *)))

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

2.1. Операція запиту можливостей

У стандарті LDAP визначена спеціальна операція, що дозволяє клієнтам одержувати інформацію про підтримувані сервером версіях протоколу і можливостях LDAP-сервера. Ця команда є надбудовою (розширенням) для операції search й виконується при наступному поєднанні параметрів останньої:

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

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

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


2.2. Операція запиту схеми

Для запиту інформації про діючою схемою 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


3. Реалізації

3.1. Серверна частина

LDAP є широко використовуваним стандартом доступу до служб каталогів. З вільно розповсюджуваних відкритих реалізацій найбільш відомий сервер OpenLDAP, з пропрієтарних - підтримка протоколу мається на Active Directory - службі каталогів від компанії Microsoft, призначеної для централізації управління мережами Windows. Сервер IBM Lotus Domino в своєму складі також має службу LDAP. [2] [3] Свої реалізації служб каталогів, що підтримують LDAP як протокол доступу, пропонують і інші великі компанії, наприклад, Novell і Sun - OpenDS [4] і, згодом, OpenDJ.


3.2. Клієнтська частина

В якості клієнтів LDAP виступають як адресні книги поштових клієнтів, так і back-end'и різних мережевих служб (сервери DNS, SMTP, Samba, UTS і т. д.).

Примітки

  1. Опис параметрів LDAP (англ.) - www.computerperformance.co.uk / Logon / LDAP_attributes_active_directory.htm
  2. The Domino LDAP schema -
  3. Lotus Domino LDAP Configuration Guide - www.metatude.com/pdf/48/DominoR5.pdf
  4. en: OpenDS