Русский
Русский
English
Статистика
Реклама

Перевод Понимание LDAP-протокола, иерархии данных и компонентов записей

Введение


LDAP, или Lightweight Directory Access Protocol, является открытым протоколом, используемым для хранения иполучения данных изкаталога сиерархической структурой. Обычно используемый для хранения информации оборганизации, ееактивах ипользователях, LDAP является гибким решением для определения любого типа сущностей иихсвойств.


Big Tree

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


Что такое служба каталогов?


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


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


Что такое LDAP?


LDAP, или облегчённый протокол доступа ккаталогам, является коммуникационным протоколом, который определяет методы, вкоторых служба каталога может быть доступна. Говоря более широко, LDAP формирует способ, которым данные внутри службы директории должны быть представлены пользователям, определяет требования ккомпонентам, используемым для создания записей данных внутри службы директории, иописывает способ, которым различные примитивные элементы используются для составления записей.


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


Основные компоненты данных LDAP


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


Атрибуты


Сама информация вLDAP-системе восновном хранится вэлементах, называемых атрибутами. Атрибуты, восновном, являются парами ключ-значение. Вотличие отнекоторых других систем, ключи имеют предопределённые имена, которые продиктованы выбранным для данной записи объектными классами (обэтом мыпоговорим чуть позже). Более того, данные ватрибуте должны соответствовать типу, определённому висходном определении атрибута.


Установка значения для атрибута производится спомощью имени атрибута изначения атрибута, разделенного двоеточием ипробелом. Пример атрибута под названием mail, который определяет почтовый адрес, будет выглядеть следующим образом:


email: admin@example.com

При обращении катрибуту иего данным (когда оннезадан), две стороны соединяются знаком равенства:



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


Записи


Атрибуты сами посебе неочень полезны. Чтобы иметь смысл, они должны быть связаны счем-то. ВLDAP выиспользуете атрибуты впределах записи (entry). Запись, посути, представляет собой набор атрибутов под именем, используемым для описания чего-либо.


Например, выможете иметь запись для пользователя ввашей системе, или для каждого предмета инвентаризации. Это примерно аналогично строке всистеме реляционной базы данных, или одной странице вадресной книге (атрибуты здесь будут представлять различные поля вкаждой изэтих моделей). Втовремя как атрибут определяет качество или характеристику чего-либо, запись описывает сам предмет, просто собирая эти атрибуты под именем.


Пример записи, отображаемой вLDIF (LDAP Data Interchange Format), будет выглядеть примерно так:


dn: sn=Ellingwood,ou=people,dc=digitalocean,dc=comobjectclass: personsn: Ellingwoodcn: Justin Ellingwood

Приведенный выше пример может быть валидной записью всистеме LDAP.


DIT


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


Например, если можно иметь записи как для пользователя, так идля объекта инвентаризации, как кто-то сможет отличить ихдруг отдруга? Один изспособов отличить записи разных типов это создание отношений игрупп. Это взначительной степени зависит оттого, где находится запись при еесоздании. Все записи добавляются всистему LDAP ввиде веток надеревьях, называемых Data Information Trees, или DIT-ы.


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


Таким образом, увас может быть запись для 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&nbsp;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 используется для создания иопределения записи, авспомогательные ObjectClasses-ы добавляют дополнительную функциональность через дополнительные атрибуты.


Определения ObjectClass определяют, являютсяли предоставляемые атрибуты обязательными (обозначаются спецификацией MUST) или необязательными (обозначаются спецификацией MAY). Несколько ObjectClasses могут предоставлять одни итеже атрибуты, акатегоризация атрибута MAY или MUST может варьироваться отobjectClass-а кobjectClass-у.


Вкачестве примера, объект Класс person определяется так:


objectclass (<nobr>2.5.6.6</nobr> NAME 'person' DESC 'RFC2256: a&nbsp;person' SUP top STRUCTURAL MUST (sn&nbsp;$ cn) MAY (userPassword $ telephoneNumber $ seeAlso $ description))

Это определяется как структурный объектClass, что означает, что онможет быть использован для создания записи. Созданная запись должна содержать заданными атрибуты surname иcommonname, иможет, при желании, содержать аттрибуты userPassword, telephoneNumber, seeAlso, или description.


Схемы


Определения ObjectClass иопределения атрибутов, всвою очередь, сгруппированы вконструкции, известной как schema (схема). Вотличие оттрадиционных реляционных баз данных, схемы вLDAP представляют собой просто наборы взаимосвязанных ObjectClasses иатрибутов. Один DIT может иметь много различных схем, так что онможет создавать нужные ему записи иатрибуты.


Схемы часто включают дополнительные определения атрибутов имогут требовать атрибутов, определенных вдругих схемах. Например, объектный класс person, окотором мыговорили выше, требует, чтобы атрибут surname или sn был установлен для любых записей, использующих объектный класс person. Если они неопределены всамом LDAP-сервере, схема, содержащая эти определения, может быть использована для добавления этих определений всловарь сервера.


Формат схемы, посути, является просто комбинацией вышеперечисленных записей, например:


. . .objectclass (<nobr>2.5.6.6</nobr> NAME 'person' DESC 'RFC2256: a&nbsp;person' SUP top STRUCTURAL MUST (sn&nbsp;$ 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&nbsp;known by' SUP name)attributetype (<nobr>2.5.4.4</nobr> NAME ('cn' 'commonName') DESC 'RFC4519: common name(s) for which the entity is&nbsp;known by' SUP name). . .

Организация данных


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


Размещение записей в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 оптимизирован для поиска информации подереву внаправлении вправо-влево, аневверх-вниз, поэтому зачастую лучше поддерживать иерархию DIT неглубокой, собобщенными организационными ветвями, идальнейшим указанием наразличия через задание определенных атрибутов.


Именование (Naming) иссылочные записи (Referencing Entries) вDIT


Мыссылаемся назаписи поихатрибутам. Это означает, что каждая запись должна иметь однозначный атрибут или группу атрибутов насвоем уровне виерархии DIT. Этот атрибут или группа атрибутов называется относительное отличительное имя или RDN (отrelative distinguished name), инесет туже функцию, что иимя файла вкаталоге.


Чтобы однозначно ссылаться назапись, выиспользуете её RDN всочетании совсеми RDN её родительских записей. Эта цепочка RDN ведет назад, вверх поиерархии DIT иуказывает однозначный путь ксоответствующему элементу. Мыназываем эту цепочку RDN различимым именем или DN (отdistinguished name). Выдолжны указать DNдля записи вовремя создания, чтобы система LDAP знала, где разместить новую запись, имогла убедиться, что RDN записи уже неиспользуется другой записью.


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


Например, запись для человека поимени Джон Смит может быть помещена под запись People ворганизации example.com. Так как ворганизации может быть несколько Джонов Смитов, идентификатор пользователя может быть лучшим выбором для RDN записи. Запись может быть указана вот так:


dn: uid=jsmith1,ou=People,dc=example,dc=comobjectClass: inetOrgPersoncn: John Smithsn: Smithuid: jsmith1

Нам пришлось использовать объектный класс inetOrgPerson, чтобы получить доступ катрибуту uid вданном случае (кроме того, мыещё имеем доступ ковсем атрибутам, определенным вобъектном классе person, причина этого будет понятна вследующем разделе).


Наследование вLDAP


Побольшей части то, как данные вLDAP-системе соотносятся друг сдругом, зависит отиерархии, наследования ивложенности. Изначально 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 -&gt; organizationalPerson -&gt; person -&gt; top

Почти все деревья наследования каждого объектного класса заканчиваются специальным объектным классом, называемым top. Это абстрактный объектный класс, единственное предназначение которого заключается втом, чтобы можно было выполнить требование задавания объектного класса. Ониспользуется для указания вершины цепочки наследования.


Наследование атрибутов


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


Это часто используется для создания более специфических версий общего атрибута. Например, атрибут фамилия (surname) имеет тотже тип, что иимя, иможет использовать все теже методы для сравнения ипроверки наравенство. Онможет унаследовать эти качества, чтобы получить обобщенную форму атрибута имя (name). Наделе, конкретное определение фамилии может содержать чуть больше, чем указатель народительский атрибут.


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


Вариации протокола LDAP


Вначале мыупоминали, что LDAP насамом деле является лишь протоколом, определяющим интерфейс связи для работы сослужбами каталогов. Обычно онизвестен как LDAP, или протокол ldap.


Стоит упомянуть, что выможете увидеть некоторые варианты вобычном формате:


ldap://: Это основной протокол LDAP, позволяющий получить структурированный доступ кслужбе каталогов.


ldap://: Этот вариант используется для доступа кLDAP поверх SSL/TLS. Обычно трафик LDAP нешифруется, нобольшинство реализаций LDAP поддерживают подобный вариант доступа. Такой способ шифрования LDAP-соединений насамом деле устарел, ивместо него рекомендуется использовать шифрование STARTTLS. Если выработаете сLDAP через незащищенную сеть, настоятельно рекомендуется шифрование.


ldapi://: Это используется для указания LDAP через IPC. Это часто используется для безопасного соединения слокальной LDAP-системой вадминистративных целях. Онсвязывается через внутренние сокеты вместо того, чтобы использовать открытый сетевой порт.


Все три формата используют протокол LDAP, нопоследние два указывают надополнительную информацию отом, как ониспользуется.


Заключение


Выдолжны достаточно хорошо понимать протокол LDAP ито, как реализации LDAP представляют данные для пользователей. Понимание того, как элементы системы связаны друг сдругом, игде они получают свои свойства, делает управление ииспользование LDAP-систем более простым ипредсказуемым.

Источник: habr.com
К списку статей
Опубликовано: 24.01.2021 16:23:06
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Системное администрирование

Серверное администрирование

Администрирование баз данных

Хранение данных

Ldap

Ldap аттрибуты

Ldif

Dit

Objectclass

Schema

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru