Схема каталога — это набор правил о том, какие объекты и какие атрибуты в нём допустимы. Она состоит из двух базовых словарей:
attributeTypes): имя атрибута, его OID, синтаксис
(строка, число, DN, SID…), правила сравнения, однозначность (SINGLE-VALUE).
Пример: sAMAccountName, mail, uidNumber.objectClasses): какие атрибуты обязательны
(MUST) и допустимы (MAY) у объекта, от какого класса он наследует
(SUP), и его вид:
user, group,
organizationalUnit);posixAccount, mailRecipient);top).Каждый элемент схемы имеет глобально уникальный OID и публикуется самим сервером,
чтобы клиенты (ADSI, SSSD, ldapsearch) знали, что он поддерживает. В RFC-мире определения
отдаются через subschemaSubentry (атрибуты attributeTypes /
objectClasses); в Active Directory та же информация лежит в отдельном разделе
CN=Schema,CN=Configuration как объекты attributeSchema и
classSchema, а их сводка — в CN=Aggregate.
Исторически сложились несколько семейств схем. Они совместимы по базовым атрибутам, но различаются набором классов и тем, как хранят POSIX-данные, SID, Kerberos и т. д.
| Семейство | Что определяет | Где применяется |
|---|---|---|
| core (RFC 4512/4519) | Базовые классы и атрибуты X.500: top,
person, organizationalPerson, organizationalUnit,
cn, sn, ou, dc. |
Фундамент любого LDAP-сервера (OpenLDAP, 389-DS, ApacheDS). |
| cosine (RFC 4524) | Атрибуты сетевых объектов и почты:
mail, associatedDomain, host. |
OpenLDAP и производные. |
| inetOrgPerson (RFC 2798) | Класс inetOrgPerson: фото, телефоны,
отдел, uid, employeeNumber — «карточка сотрудника». |
Самый ходовой класс пользователя в OpenLDAP/389-DS. |
| nis / RFC 2307 и 2307bis | POSIX-вход в Unix: posixAccount,
posixGroup, uidNumber, gidNumber,
homeDirectory, loginShell. |
Классический вход Linux/Unix через LDAP. |
| Прикладные (ppolicy, samba3, dyngroup…) | Политики паролей, атрибуты Samba
(sambaNTPassword), динамические группы. |
Подключаются к OpenLDAP по мере надобности. |
| 389-DS / FreeIPA / RHDS | core + RFC 2307bis + расширения IPA:
ipaNTHash, krbPrincipalName, HBAC, sudo, host-группы. |
Red Hat IdM (FreeIPA), 389 Directory Server. |
| Active Directory | Классы user, group,
computer, атрибуты sAMAccountName,
userPrincipalName, objectSid, objectGUID,
unicodePwd, разделы Configuration и Schema. Включает и RFC 2307-атрибуты
(через «Services for Unix», msSFU30…). |
Microsoft AD, Samba AD DC и HopeDC. |
Ключевое отличие на практике: в OpenLDAP/389-DS пользователь — это обычно
inetOrgPerson + posixAccount, а идентификатор для Unix берётся из
uidNumber. В AD пользователь — это user, идентичность задаётся
objectSid, а POSIX-идентификаторы — опциональная добавка.
HopeDC поднимает схему Active Directory — ту же, что у Windows Server 2016+
(objectVersion 88). Это сделано намеренно: HopeDC эмулирует контроллер домена
AD, поэтому и словарь объектов у него ровно как у AD.
attributeSchema (типы атрибутов);classSchema (классы объектов);dMD и сводка CN=Aggregate.Шаблон схемы — выгрузка схемы настоящего AD, встроенная прямо в бинарник
(schema_base.txt). Определения подсхемы
(attributeTypes / objectClasses / ditContentRules /
extendedAttributeInfo / extendedClassInfo) не хранятся готовыми, а
строятся из объектов attributeSchema/classSchema по тем же
правилам, что у NTDS. Генератор сверен с CN=Aggregate живого контроллера AD:
все 3803 значения совпадают байт в байт.
ad каталог HopeDC выглядит как обычный AD — отдельная
схема или её конвертация не нужны.CN=Configuration,<лес> и в нём CN=Schema,… со всеми
объектами схемы (функция ядра ensure_forest_schema).ensure_all_forests) — на случай обновления версии продукта.AD-схема HopeDC включает атрибуты RFC 2307 (uidNumber,
gidNumber, homeDirectory, loginShell, класс
posixAccount) — они входят в раздел «Services for Unix» (msSFU30…)
стандартной схемы AD. Поэтому вход Linux работает двумя способами:
ad) — SSSD вычисляет
uid/gid из objectSid алгоритмически, POSIX-атрибуты в
каталоге заполнять не обязательно.uidNumber/gidNumber
(единые с существующим NFS/Unix-парком), их можно задать в каталоге, и SSSD будет брать
их. HopeDC умеет подобрать следующий свободный POSIX-идентификатор по всему каталогу.При импорте из FreeIPA/389-DS (где пользователь — posixAccount/
inetOrgPerson) HopeDC сопоставляет объекты с AD-классами и переносит POSIX- и
Kerberos-данные в свою схему.
Схему можно расширять как в настоящем AD: добавление нового объекта
attributeSchema или classSchema в раздел схемы сразу отражается в
CN=Aggregate, и клиенты (ADSI SchCache) перечитывают её по
изменённой метке времени. Это позволяет приложениям, рассчитанным на расширение AD-схемы
(например, установка собственных атрибутов), работать штатно.
ad — штатный путь ввода
Linux в домен; он рассчитан на AD-схему.Схемы OpenLDAP (inetOrgPerson + RFC 2307) выбрали бы, если бы продукт был
«обычным» LDAP-каталогом для Unix-парка. HopeDC же заменяет контроллер домена AD, поэтому
совместимость с AD-схемой — обязательное требование, а не одна из опций.
objectVersion 88): ~1500 типов атрибутов, ~270 классов и
сводку CN=Aggregate в разделе CN=Schema,CN=Configuration, побайтно
совпадающую с настоящим AD. Классические схемы LDAP — это core (RFC 4519), cosine,
inetOrgPerson (RFC 2798), nis/RFC 2307 для POSIX и расширения 389-DS/FreeIPA; их HopeDC не
использует как основу, но POSIX-атрибуты RFC 2307 в AD-схему входят, поэтому вход Linux
поддержан и по SID, и по uidNumber.