LDAP-справочник

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

Администратор создаёт учётные записи, с которыми подключаются другие системы, — LDAP-потребителей. Интегратор или тот, кто обслуживает другую систему, настраивает её по описанным здесь адресу, base DN и учётным данным.

Эта функция лицензируется. Если лицензия вашей организации её не включает, обратитесь в CityScreen.

Что такое справочник

Справочник доступен только для чтения: любая операция записи отклоняется с сообщением «The LDAP interface is read-only». Он работает по LDAPS — это TLS с первого байта, а StartTLS отклоняется. Что видит подключение, определяют роли учётной записи, от имени которой выполнен bind.

Сервер работает по LDAP версии 3 и принимает только простой bind. Он отвечает на bind, search, compare и расширенную операцию «Who am I?» (RFC 4532). Любая другая операция отклоняется.

Адрес

Параметр Значение

Сервер

ldap.<your organization’s domain>, порт 636. CityScreen может подтвердить адрес для вашей организации.

Протокол

LDAPS с TLS 1.2 или 1.3.

Base DN

Один компонент dc= на каждую метку домена вашей организации, без префикса ldap.. Для организации по адресу office.example.com base DN — dc=office,dc=example,dc=com.

Настраивайте клиенты по имени с ldap., на которое выпущен сертификат. Подключение по IP-адресу не работает.

Если у адреса вашей организации нет доменного имени, например потому что это IP-адрес, то у справочника нет base DN, и он не существует. Тогда на странице LDAP-потребители показано «Нет: у адреса этого экземпляра нет доменного имени, поэтому у LDAP-интерфейса нет базового DN.»

Дерево справочника

В дереве три организационные единицы ниже base DN.

Единица Класс записи RDN Атрибуты

ou=people

inetOrgPerson

employeeNumber=<employee id>

uid — имя пользователя. cn и sn содержат полное имя или имя пользователя, если имя пустое. mail — адрес электронной почты.

ou=groups

groupOfNames

cn=<machine name>

description — название группы. member перечисляет DN участников. mail — адрес электронной почты группы, если он есть.

ou=consumers

applicationProcess

cn=<consumer id>

description — название потребителя.

Атрибут без значения в запись не включается. mail и uid сравниваются без учёта регистра.

Публикуются только группы сотрудников, в которых есть участники. member перечисляет только сотрудников, которые входят в группу напрямую. RDN группы — её машинное имя, которое никогда не меняется, а её mail — адрес электронной почты группы.

Поиск с пустым DN в качестве основы и областью base возвращает root DSE, в котором base DN указан в namingContexts.

Кто может подключаться

LDAP-потребитель выполняет bind с DN своей записи и своим секретом. Сотрудник выполняет bind с DN своей записи и либо паролем учётной записи, либо паролем приложения.

Кто Bind DN Пароль

LDAP-потребитель

cn=<consumer id>,ou=consumers,<base DN>

Секрет потребителя, который начинается с csd_ldc_.

Сотрудник

employeeNumber=<employee id>,ou=people,<base DN>

Пароль учётной записи или пароль приложения, который начинается с csd_app_.

Анонимные bind и bind с пустым паролем отклоняются.

Пароль учётной записи отклоняется для сотрудника, который использует двухэтапную проверку, в том числе для сотрудника, чья организация её требует, и для сотрудника, у которого истёк срок действия пароля. Такие сотрудники выполняют bind с паролем приложения, который создают в разделе Аккаунт > Пароли приложений. См. Токены доступа и пароли приложений и Двухэтапная проверка. Панель Использование в почтовом клиенте на вкладке Пароли приложений показывает Bind DN (имя пользователя) и Базовый DN сотрудникам, которым разрешено просматривать LDAP-потребителей.

Bind, в котором сервер отклоняет DN, секрет или пароль, получает ответ invalidCredentials (49) с сообщением «Invalid credentials» независимо от причины. Bind другим методом, не простым, получает ответ authMethodNotSupported (7), а bind с LDAP версии 2 — protocolError (2).

Если в вашей организации этой функции нет, каждый bind получает ответ unwillingToPerform (53) с сообщением «The LDAP interface is not available under the license of this instance». Попытки bind записываются в журнал входов с точкой входа «LDAP-привязка (bind)».

Что видит подключение

Учётная запись, выполнившая bind, видит записи, которые разрешают ей просматривать её роли. Для записей сотрудников нужно право просматривать сотрудников, для записей групп — право просматривать группы сотрудников, для записей потребителей — право просматривать LDAP-потребителей. Действует область права: учётная запись, которой разрешено просматривать только собственную запись сотрудника, видит в ou=people только свою запись.

Запись, которую учётной записи просматривать нельзя, для неё не существует. Поиск эту запись не возвращает, поиск с этой записью в качестве основы отвечает «No such object», а в значениях member группы эта запись пропускается. Потребитель без ролей не видит ни сотрудников, ни групп, ни потребителей.

Операции и ограничения

Тема Поведение

Операции

Поиск с областями base, one-level и subtree, compare и «Who am I?». Add, modify, modify DN, delete и Password Modify получают ответ unwillingToPerform (53) с сообщением «The LDAP interface is read-only».

Фильтры

Фильтр применяется ко всем записям, которые учётной записи разрешено просматривать.

Предел размера

Не более 1000 записей на один поиск, какой бы предел размера ни запросил клиент. Поиск, который достиг предела, получает ответ sizeLimitExceeded (4) с первыми 1000 записей.

Предел времени

Поиск, который идёт слишком долго, получает ответ timeLimitExceeded (3) с найденными к этому моменту записями.

Прочитано записей

Поиск, которому пришлось бы прочитать слишком много записей, получает ответ adminLimitExceeded (11) с сообщением «Too many entries to search» и не возвращает записей.

Controls

Control, помеченный как критичный, в том числе control постраничного вывода результатов, отклоняется с unavailableCriticalExtension (12). Некритичный control игнорируется.

Неактивные подключения

Сервер закрывает подключение с выполненным bind, которое остаётся неактивным.

Занятый сервер

Когда сервер занят, он отвечает busy (51), и клиент повторяет операцию позже.

Когда доступ заканчивается

Изменение ролей применяется при следующей операции подключения, в котором bind уже выполнен.

Подключение заканчивается, когда его учётные данные перестают действовать:

  • Подключение потребителя заканчивается, когда потребителя удаляют или перевыпускают его секрет.

  • Подключение сотрудника, выполнившего bind с паролем учётной записи, заканчивается, когда пароль меняется или истекает, когда к сотруднику применяется двухэтапная проверка или когда учётная запись деактивируется.

  • Подключение сотрудника, выполнившего bind с паролем приложения, заканчивается, когда пароль приложения отзывают или учётную запись деактивируют. Смена пароля учётной записи его не завершает.

  • Каждое подключение заканчивается, когда организацию деактивируют или заканчивается лицензия на функцию.

На операцию, которая обнаруживает недействительные учётные данные, приходит ответ insufficientAccessRights (50) с сообщением «Authentication required», и подключение разрывается.

LDAP-потребители

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

Потребители управляются в разделе Сотрудники > LDAP-потребители. Вкладка показывается сотрудникам, чья роль включает право LDAP-потребители и чья организация использует эту функцию. Право действует только в области «все» и включает действия «Создание», «Просмотр», «Редактирование» и «Удаление». См. Роли и права.

В заголовке страницы показаны Base DN и состояние интерфейса:

Состояние Значение

Принимает подключения

Сервер принимает подключения.

Не принимает подключения

Лицензия включает функцию, но сервер не принимает подключения. Обратитесь в CityScreen.

Недоступно по лицензии

В вашей организации этой функции нет.

В таблице каждый потребитель показан в таких столбцах:

Столбец Содержимое

Название

Название потребителя, под ним — начало его секрета.

Bind DN

DN, с которым потребитель выполняет bind, с кнопкой Копировать bind DN.

Роли

Роли, с правами которых действует потребитель.

Последний bind

Дата и время последнего успешного bind или Никогда.

Создание потребителя

  1. Откройте Сотрудники > LDAP-потребители и нажмите Создать потребителя.

  2. Введите Название до 255 символов, например «Почтовый сервер Postfix».

  3. Выберите Роли.

  4. Нажмите Создать.

  5. В диалоге «LDAP-потребитель создан» показаны Bind DN и Секрет. Скопируйте секрет кнопкой Копировать секрет и нажмите Готово.

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

Предупреждение в диалоге гласит: «Скопируйте секрет сейчас. Он больше не будет показан. Относитесь к нему как к паролю.» После закрытия диалога секрет показать снова нельзя.

Изменение и удаление потребителя

  • Редактировать меняет название и роли. Секрет остаётся прежним.

  • Перевыпустить секрет выдаёт новый секрет и показывает его один раз. Старый секрет перестаёт работать сразу, и каждый сервер, который его использует, нужно настроить с новым.

  • Удалить удаляет потребителя. Серверы, которые выполняют bind с ним, сразу теряют доступ, и это нельзя отменить.

Роль нельзя удалить, пока она назначена потребителю.

Пример: почтовый сервер

В этом примере используются значения: office.example.com — домен организации, 7 — идентификатор потребителя и jdoe — имя пользователя.

Чтобы проверить, что потребитель может читать справочник, найдите сотрудника по имени пользователя:

ldapsearch -x -H ldaps://ldap.office.example.com:636 \
  -D "cn=7,ou=consumers,dc=office,dc=example,dc=com" -w "$CONSUMER_SECRET" \
  -b "ou=people,dc=office,dc=example,dc=com" "(uid=jdoe)" uid cn mail

Почтовому серверу, например Postfix, нужны три запроса; потребитель выполняет все три поиска, а проверка пароля затем выполняет bind от имени сотрудника:

  1. Поиск почтового ящика. Сервер ищет сотрудника, на чей адрес доставляет почту. Фильтр — (&(objectClass=person)(mail=<address>)) ниже ou=people, результирующий атрибут — mail.

  2. Списки рассылки. Сервер ищет группу по её адресу фильтром (&(objectClass=groupOfNames)(mail=<address>)) ниже ou=groups. Затем он раскрывает значения member: каждое из них — DN сотрудника, чей mail читается поиском с областью base. Потребитель должен иметь возможность просматривать участников, потому что участник, которого он просматривать не может, пропускается в списке.

  3. Проверка пароля. Когда сервер проверяет пароль почтового ящика, он находит сотрудника по (uid=<username>) ниже ou=people и выполняет bind с DN найденной записи и паролем, который ввёл пользователь.

Для Postfix первые два запроса — таблицы такого вида:

# mailboxes
server_host = ldaps://ldap.office.example.com:636
version = 3
bind = yes
bind_dn = cn=7,ou=consumers,dc=office,dc=example,dc=com
bind_pw = csd_ldc_...
search_base = ou=people,dc=office,dc=example,dc=com
query_filter = (&(objectClass=person)(mail=%s))
result_attribute = mail

# distribution lists
server_host = ldaps://ldap.office.example.com:636
version = 3
bind = yes
bind_dn = cn=7,ou=consumers,dc=office,dc=example,dc=com
bind_pw = csd_ldc_...
search_base = ou=groups,dc=office,dc=example,dc=com
query_filter = (&(objectClass=groupOfNames)(mail=%s))
special_result_attribute = member
result_attribute = mail

Для saslauthd проверка пароля использует такие настройки:

ldap_servers: ldaps://ldap.office.example.com:636
ldap_bind_dn: cn=7,ou=consumers,dc=office,dc=example,dc=com
ldap_bind_pw: csd_ldc_...
ldap_search_base: ou=people,dc=office,dc=example,dc=com
ldap_filter: (uid=%u)
ldap_auth_method: bind
Подключайтесь по адресу ldaps:// и оставляйте StartTLS выключенным: не используйте -Z с ldapsearch и start_tls = yes в почтовом сервере. Не запрашивайте постраничный вывод результатов, потому что сервер отклоняет критичный control постраничного вывода.