Перейти к содержимому

Синхронизация с Active Directory - подключение, отбор, группы

Подключаем каталог организации, настраиваем отбор сотрудников и раздаём им права на сайте через сопоставление групп каталога.

Решение

Проверяем связь с сервером каталога:

Окно терминала
# порт 389 для обычного соединения, 636 для защищённого
timeout 5 bash -c '</dev/tcp/dc.example.local/389' && echo 'порт открыт'
ldapsearch -x -H ldap://dc.example.local -D 'reader@example.local' \
-W -b 'dc=example,dc=local' '(objectClass=user)' sAMAccountName | head -20

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

Смотрим настройки подключения на сайте:

use Bitrix\Main\Loader;
Loader::includeModule('ldap');
$res = CLdapServer::GetList();
while ($server = $res->Fetch()) {
printf("%-6s %-24s база=%s\n", $server['ID'], $server['SERVER'], $server['BASE_DN']);
}

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

Проверяем отбор пользователей:

// фильтр каталога: только активные люди, без служебных записей
$filter = '(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))';
// он же задаётся в настройках сервера на сайте, в поле отбора пользователей

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

Сопоставляем группы каталога с группами сайта:

$res = CLdapServer::GetList();
$server = $res->Fetch();
// в настройках сервера каждой группе каталога назначается группа сайта
print_r(unserialize($server['GROUP_MAP'] ?? '') ?: 'сопоставление не задано');
// если каталог вообще не отвечает, разбор начинают с сети и порта

Без сопоставления все импортированные попадают в группу по умолчанию и получают одинаковые права. Раздача прав по отделам делается именно здесь, а не правкой каждой учётной записи.

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

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

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

Типичные проблемы

Соединение с каталогом не устанавливается.

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

Импортировалась часть сотрудников.

Базовый путь указывает на одну ветвь каталога либо отбор исключает остальных. Обе настройки задаются на сервере каталога в админке.

Сотрудники приехали повторно, новыми записями.

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

Все импортированные в одной группе.

Не задано сопоставление групп каталога с группами сайта. Новые записи из каталога получают у нас только одну группу по умолчанию.

Уволенные продолжают входить на сайт.

Выключена полная синхронизация вместе с деактивацией пропавших из каталога учётных записей. Без неё исчезновение записи из каталога сайт не замечает.

Частые вопросы

Можно ли входить по доменной учётной записи без импорта?

Да, проверка пароля идёт в каталоге, а запись на сайте создаётся при первом входе. Импорт нужен, когда сотрудники должны существовать на сайте заранее.

Как связать несколько доменов?

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

Что делать с изменившимися логинами?

Связь держится на внешнем идентификаторе, а не на логине, поэтому переименование сотрудника переносится штатно. Смена самого идентификатора создаёт новую запись.

Как проверить, что приедет, до импорта?

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

Смежное

Первоисточник