Введение
LDAP, или Lightweight Directory Access Protocol, является открытым протоколом, используемым для хранения иполучения данных изкаталога сиерархической структурой. Обычно используемый для хранения информации оборганизации, ееактивах ипользователях, LDAP является гибким решением для определения любого типа сущностей иихсвойств.
Для многих пользователей LDAP может показаться сложным для понимания, поскольку онопирается насвоеобразную терминологию, имеет иногда необычные сокращения, ичасто используется как компонент более крупной системы, состоящей извзаимодействующих частей. Вэтом тексте мыпознакомим вас снекоторыми основами LDAP, чтобы увас была хорошая основа для работы стехнологией.
Что такое служба каталогов?
Служба каталогов используется для хранения, организации
ипредставления данных вформате вида
Данные, хранящиеся вслужбе каталогов, часто носят описательный
характер ииспользуются для определения качеств сущности. Примером
физического объекта, который былбы хорошо представлен вслужбе
каталога, является адресная книга. Каждое лицо может быть
представлено записью всправочнике, спарами
Что такое LDAP?
LDAP, или облегчённый протокол доступа ккаталогам, является коммуникационным протоколом, который определяет методы, вкоторых служба каталога может быть доступна. Говоря более широко, LDAP формирует способ, которым данные внутри службы директории должны быть представлены пользователям, определяет требования ккомпонентам, используемым для создания записей данных внутри службы директории, иописывает способ, которым различные примитивные элементы используются для составления записей.
Поскольку LDAP является открытым протоколом, существует множество различных реализаций. Проект OpenLDAP является одним изнаиболее хорошо поддерживаемых вариантов соткрытым исходным кодом.
Основные компоненты данных LDAP
Выше мыобсуждали, как LDAP является протоколом, используемым для связи сбазой данных директорий сцелью запроса, добавления или изменения информации. Однако это простое определение искажает сложность систем, поддерживающих этот протокол. То, как LDAP отображает данные для пользователей, очень зависит отвзаимодействия иотношений между некоторыми определенными структурными компонентами.
Атрибуты
Сама информация в
Установка значения для атрибута производится
спомощью имени атрибута изначения атрибута, разделенного двоеточием
ипробелом. Пример атрибута под названием mail
, который
определяет почтовый адрес, будет выглядеть следующим образом:
email: admin@example.com
При обращении катрибуту иего данным (когда оннезадан), две стороны соединяются знаком равенства:
Значения атрибутов содержат большую часть фактических данных,
которые выхотите хранить, иккоторым выхотите получить доступ
всистеме LDAP. Остальные элементы внутри LDAP используются для
определения структуры, организации
Записи
Атрибуты сами посебе неочень полезны. Чтобы иметь смысл, они
должны быть связаны с
Например, выможете иметь запись для пользователя ввашей системе,
или для каждого предмета инвентаризации. Это примерно аналогично
строке всистеме реляционной базы данных, или одной странице
вадресной книге (атрибуты здесь будут представлять различные поля
вкаждой изэтих моделей). Втовремя как атрибут определяет качество
или характеристику
Пример записи, отображаемой вLDIF (LDAP Data Interchange Format), будет выглядеть примерно так:
dn: sn=Ellingwood,ou=people,dc=digitalocean,dc=comobjectclass: personsn: Ellingwoodcn: Justin Ellingwood
Приведенный выше пример может быть валидной записью всистеме LDAP.
DIT
Начав знакомиться сLDAP, легко понять, что данные, определяемые атрибутами, представляют собой лишь часть доступной информации обобъекте. Остальное это расположение записи всистеме LDAP исвязи, проистекающие изэтого.
Например, если можно иметь записи как для пользователя, так идля
объекта инвентаризации, как
DIT представляет собой организационную структуру, похожую
нафайловую систему, где каждая запись (кроме записи верхнего
уровня) имеет ровно одну родительскую запись ипод ней может
находиться любое количество дочерних записей. Поскольку записи
в
Таким образом, увас может быть запись для people изапись для inventoryItems. Ваши фактические записи данных могут быть созданы как дочерние записи приведенных выше, чтобы лучше различать ихтип. Ваши организационные записи могут быть произвольно определены, чтобы наилучшим образом представить ваши данные.
Впримере записи вразделе выше мывидим одно указание наDIT,
встроке dn
:
Эта строка называется distinguished name (dn,
отличительное имя) записи (подробнее обэтом позже) ииспользуется
для идентификации записи. Она функционирует как полный путь докорня
DIT. Вданном случае унас есть запись под названием
sn=Ellingwood
, которую мысоздаем. Прямым родителем
является запись сименем ou=people
, которая, вероятно,
используется вкачестве контейнера для записей, описывающих людей.
Родители этой записи произошли отдоменного имени
digitalocean.com
, которое выступает как корень нашей
DIT.
Определение компонентов данных LDAP
Впоследнем разделе мыобсудили, как представлены данные всистеме LDAP. Однако мытакже должны поговорить отом, как определяются компоненты, которые хранят данные. Например, мыупомянули, что данные должны соответствовать типу, определённому для каждого атрибута. Откуда берутся эти определения? Давайте начнем ссамого низа (сточки зрения сложности), ипройдём весь путь вверх.
Определения атрибутов
Атрибуты определяются сиспользованием достаточно сложного синтаксиса. Они должны указывать имя атрибута, любые другие имена/названия, которые могут быть использованы для ссылки наатрибут, тип данных, атакже множество других метаданных. Эти метаданные могут описывать атрибут, указывая LDAP, как сортировать или сравнивать значение атрибута, ипояснять, как онсоотносится сдругими атрибутами.
Например, это определение для атрибута name
:
attributetype (<nobr>2.5.4.41</nobr> NAME 'name' DESC 'RFC4519: common supertype of name attributes' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX <nobr>1.3.6.1</nobr>.4.1.1<nobr>466.115.121.1</nobr>.15{32768})
name
это имя атрибута. Номер впервой строке это
глобально уникальный OID (object id, идентификатор объекта),
присвоенный атрибуту, чтобы отличить его отвсех остальных
атрибутов. Остальная часть записи определяет, как можно сравнить
запись вовремя поиска, иимеет указатель, поясняющий, где найти
информацию потребуемому типу данных атрибута.
Одной изважных частей определения атрибута является то, можетли
атрибут быть задан взаписи более одного раза. Например,
вопределении может быть определено, что фамилия может быть
определена взаписи только один раз, ноатрибут niece позволительно
указывать несколько раз водной записи. Атрибуты поумолчанию
многозначны идолжны содержать флаг
<nobr>SINGLE-VALUE</nobr>
, если ихможно
задавать взаписи только один раз.
Определения атрибутов намного сложнее, чем использование иустановка атрибутов. Ксчастью, вбольшинстве случаев Вам непридётся определять собственные атрибуты, так как наиболее распространённые изних включены вбольшинство реализаций LDAP, адругие легко импортируются.
Определения классов объектов
Атрибуты собираются всущностях, называемых ObjectClass (классы объектов). ObjectClasses это просто группировка связанных атрибутов, которая былабы полезна при описании конкретной вещи. Например, person это objectClass.
Записи имеют возможность использовать атрибуты objectClass путем
задания специального атрибут сназванием objectClass
,
задающий objectClass, который выхотите использовать. Насамом деле,
objectClass
это единственный атрибут, который можно
задать взаписи, неуказывая более objectClass.
Таким образом, если Высоздаете запись для описания человека,
тоobjectClass person
(или любой изболее специфических
объектов objectClasses, производных отperson обэтом мыпоговорим
позже) позволяет использовать все атрибуты внутри этого
objectClass:
dn: . . .objectClass: person
После этого увас появляется возможность установить внутри записи следующие аттрибуты:
cn: Общее имя (Common name)
description: Понятное человеку описание записи
seeAlso: Ссылка насвязанные записи
sn: Фамилия (Surename)
telephoneNumber: Номер телефона
userPassword: Пароль пользователя
Атрибут objectClass
может использоваться несколько
раз, если вам нужны атрибуты изразных классов объектов, ноесть
правила, которые диктуют, что разрешено. ObjectClasses может быть
нескольких типов.
Два основных типа ObjectClasses это структурный
(structural) идополнительный (auxiliary). Запись
должна должна иметь ровно один структурный класс,
номожет иметь ноль или более вспомогательных классов, используемых
для дополнения списка атрибутов, доступных этому классу.
Структурный ObjectClasses используется для создания иопределения
записи, авспомогательные
Определения ObjectClass определяют, являютсяли предоставляемые
атрибуты обязательными (обозначаются спецификацией
MUST
) или необязательными (обозначаются спецификацией
MAY
). Несколько ObjectClasses могут предоставлять одни
итеже атрибуты, акатегоризация атрибута MAY
или
MUST
может варьироваться от
Вкачестве примера, объект Класс person
определяется
так:
objectclass (<nobr>2.5.6.6</nobr> NAME 'person' DESC 'RFC2256: a person' SUP top STRUCTURAL MUST (sn $ cn) MAY (userPassword $ telephoneNumber $ seeAlso $ description))
Это определяется как структурный объектClass, что означает, что
онможет быть использован для создания записи. Созданная запись
должна содержать заданными атрибуты surname
иcommonname
, иможет, при желании, содержать аттрибуты
userPassword
, telephoneNumber
,
seeAlso
, или description
.
Схемы
Определения ObjectClass иопределения атрибутов, всвою очередь, сгруппированы вконструкции, известной как schema (схема). Вотличие оттрадиционных реляционных баз данных, схемы вLDAP представляют собой просто наборы взаимосвязанных ObjectClasses иатрибутов. Один DIT может иметь много различных схем, так что онможет создавать нужные ему записи иатрибуты.
Схемы часто включают дополнительные определения атрибутов имогут
требовать атрибутов, определенных вдругих схемах. Например,
объектный класс person
, окотором мыговорили выше,
требует, чтобы атрибут surname
или sn
был
установлен для любых записей, использующих объектный класс
person
. Если они неопределены всамом
Формат схемы, посути, является просто комбинацией вышеперечисленных записей, например:
. . .objectclass (<nobr>2.5.6.6</nobr> NAME 'person' DESC 'RFC2256: a person' SUP top STRUCTURAL MUST (sn $ cn) MAY (userPassword $ telephoneNumber $ seeAlso $ description))attributetype (<nobr>2.5.4.4</nobr> NAME ('sn' 'surname') DESC 'RFC2256: last (family) name(s) for which the entity is known by' SUP name)attributetype (<nobr>2.5.4.4</nobr> NAME ('cn' 'commonName') DESC 'RFC4519: common name(s) for which the entity is known by' SUP name). . .
Организация данных
Мырассмотрели общие элементы, которые используются для построения записей вLDAP системе ипоговорили отом, как эти строительные блоки определяются всистеме. Однако мыеще немного говорили отом, как организована иструктурирована сама информация вLDAP DIT.
Размещение записей вDIT
DIT это просто иерархия, описывающая взаимосвязь существующих
записей. После создания, каждая новая запись должна подключаться
ксуществующему DIT, помещая себя вкачестве дочерней поотношению
к
Верхний DIT это самая широкая категория, под которой каждый
последующий узел является dc=example,dc=com
для управляющей информации LDAP,
связанной сexample.com
), местоположений
(l=new_york,c=us
для организации или сегмента
вou=marketing,o=Example_Co
).
Записи, используемые для организации (используемые как папки)
часто используют объектный класс organizationalUnit
,
что позволяет использовать простой описательную метку атрибут
сназванием ou=
. Такого рода записи часто используются
для общих категорий взаписи DIT верхнего уровня (пример часто
используемых ou=people
, ou=groups
иou=inventory
). LDAP оптимизирован для поиска
информации подереву внаправлении
Именование (Naming) иссылочные записи (Referencing Entries) вDIT
Мыссылаемся назаписи поихатрибутам. Это означает, что каждая запись должна иметь однозначный атрибут или группу атрибутов насвоем уровне виерархии DIT. Этот атрибут или группа атрибутов называется относительное отличительное имя или RDN (отrelative distinguished name), инесет туже функцию, что иимя файла вкаталоге.
Чтобы однозначно ссылаться назапись, выиспользуете её RDN всочетании совсеми RDN её родительских записей. Эта цепочка RDN ведет назад, вверх поиерархии DIT иуказывает однозначный путь ксоответствующему элементу. Мыназываем эту цепочку RDN различимым именем или DN (отdistinguished name). Выдолжны указать DNдля записи вовремя создания, чтобы система LDAP знала, где разместить новую запись, имогла убедиться, что RDN записи уже неиспользуется другой записью.
Поаналогии, выможете считать RDN относительным именем файла или
директории, как еслибы выработали сними вфайловой системе. DN,
сдругой стороны, больше похоже наабсолютный путь. Важным отличием
является то, что LDAP DNсодержит наиболее уточнящие значение
слева, втовремя как файловые пути содержат наиболее
уточняющую информацию справа.
Например, запись для человека поимени Джон Смит может быть
помещена под запись People ворганизации example.com
.
Так как ворганизации может быть несколько Джонов Смитов,
идентификатор пользователя может быть лучшим выбором для RDN
записи. Запись может быть указана вот так:
dn: uid=jsmith1,ou=People,dc=example,dc=comobjectClass: inetOrgPersoncn: John Smithsn: Smithuid: jsmith1
Нам пришлось использовать объектный класс
inetOrgPerson
, чтобы получить доступ катрибуту
uid
вданном случае (кроме того, мыещё имеем доступ
ковсем атрибутам, определенным вобъектном классе
person
, причина этого будет понятна вследующем
разделе).
Наследование вLDAP
Побольшей части то, как данные в
Наследование объектных классов
Каждый objectClass это класс, который описывает характеристики объектов данного типа.
Однако, вотличие отпростого наследования, объекты вLDAP могут быть, ичасто являются, экземплярами нескольких классов (некоторые языки программирования предоставляют аналогичную функциональность посредством множественного наследования). Это возможно потому, что LDAP под классом понимает просто набор атрибутов, которые онДОЛЖЕН (MUST) или может (MAY) иметь. Это позволяет указать для записи несколько классов (хотя только один структурный объектный класс может идолжен присутствовать), врезультате чего объект просто имеет доступ кобъединенной коллекции атрибутов сострожайшими определениями MUST или MAY, имеющими приоритет.
Посвоему определению, объектный класс может иметь указывать
народительский объектный класс, откоторого оннаследует свои
атрибуты. Это делается спомощью определениям SUP
,
закоторым следует название объектного класса, откоторого происходит
наследование. Например, определение объектного класса
organizationalPerson
начинается следующим образом:
objectclass (<nobr>2.5.6.7</nobr> NAME 'organizationalPerson' SUP person STRUCTURAL. . .
Родительским объектом является объектный класс, следующий
заидентификатором SUP
. STRUCTURAL
или AUXILIARY
).
Дочерний объектный класс автоматически наследует атрибуты
итребования атрибутов родителя.
При назначении объектного класса конкретной записи, Вам нужно
только указать самого последнего потомка цепочки наследования,
чтобы иметь доступ ковсему набору атрибутов. Впредыдущем разделе
мыиспользовали это для указания inetOrgPerson
вкачестве единственного objectClass для нашей записи John
Smith, втоже время получив доступ катрибутам, определенным
вобъектных классах person
иorganizationalPerson
. Иерархия наследования
inetOrgPerson
выглядит следующим образом:
inetOrgPerson -> organizationalPerson -> person -> top
Почти все деревья наследования каждого объектного класса заканчиваются специальным объектным классом, называемым top. Это абстрактный объектный класс, единственное предназначение которого заключается втом, чтобы можно было выполнить требование задавания объектного класса. Ониспользуется для указания вершины цепочки наследования.
Наследование атрибутов
Точно также, сами атрибуты могут указать родительский атрибут всвоем определении. Вэтом случае атрибут наследует свойства, которые были установлены вродительском атрибуте.
Это часто используется для создания более специфических версий общего атрибута. Например, атрибут фамилия (surname) имеет тотже тип, что иимя, иможет использовать все теже методы для сравнения ипроверки наравенство. Онможет унаследовать эти качества, чтобы получить обобщенную форму атрибута имя (name). Наделе, конкретное определение фамилии может содержать чуть больше, чем указатель народительский атрибут.
Это полезно, так как позволяет создать конкретный атрибут,
полезный для людей, интерпретирующих элемент, даже когда его
обобщенная форма остаётся неизменной. Наследование атрибута
surname
, окотором мыговорили здесь, помогает людям
различать фамилию иболее обощенное имя, нокроме разницы взначениях
названия, разница между фамилией иименем вLDAP системе
невелика.
Вариации протокола LDAP
Вначале мыупоминали, что LDAP насамом деле является лишь протоколом, определяющим интерфейс связи для работы сослужбами каталогов. Обычно онизвестен как LDAP, или протокол ldap.
Стоит упомянуть, что выможете увидеть некоторые варианты вобычном формате:
ldap://: Это основной протокол LDAP, позволяющий получить структурированный доступ кслужбе каталогов.
ldap://: Этот вариант используется для доступа
кLDAP поверх SSL/TLS. Обычно трафик LDAP нешифруется, нобольшинство
реализаций LDAP поддерживают подобный вариант доступа. Такой способ
шифрования
ldapi://: Это используется для указания LDAP
через IPC. Это часто используется для безопасного соединения
слокальной
Все три формата используют протокол LDAP, нопоследние два указывают надополнительную информацию отом, как ониспользуется.
Заключение
Выдолжны достаточно хорошо понимать протокол LDAP ито, как
реализации LDAP представляют данные для пользователей. Понимание
того, как элементы системы связаны друг сдругом, игде они получают
свои свойства, делает управление ииспользование