Синхронизация с 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'] ?? '') ?: 'сопоставление не задано');// если каталог вообще не отвечает, разбор начинают с сети и портаБез сопоставления все импортированные попадают в группу по умолчанию и получают одинаковые права. Раздача прав по отделам делается именно здесь, а не правкой каждой учётной записи.
Порядок подключения всегда один: сначала связь и учётная запись для чтения, потом базовый путь и отбор, и только затем сопоставление групп. Обратный порядок приводит к тому, что группы сопоставляют для пользователей, которые на сайт ещё не приехали.
Периодическую синхронизацию выполняет агент, а не интерфейс админки. При выключенных агентах данные обновляются только при ручном запуске импорта, и расхождение с каталогом накапливается незаметно.
Полная синхронизация умеет деактивировать записи, которых больше нет в каталоге организации. Включать её стоит осознанно: при ошибке в отборе она деактивирует живых сотрудников целыми отделами, а восстановление таких записей идёт вручную.
Типичные проблемы
Соединение с каталогом не устанавливается.
Закрыт нужный порт или неверна сама учётная запись для чтения этого каталога. Проверяют то и другое отдельно: сайт сообщает об этом одинаково.
Импортировалась часть сотрудников.
Базовый путь указывает на одну ветвь каталога либо отбор исключает остальных. Обе настройки задаются на сервере каталога в админке.
Сотрудники приехали повторно, новыми записями.
Связь по внешнему идентификатору не нашлась после смены отбора или сервера. Совпадение логинов сама платформа связью между этими двумя разными записями не считает.
Все импортированные в одной группе.
Не задано сопоставление групп каталога с группами сайта. Новые записи из каталога получают у нас только одну группу по умолчанию.
Уволенные продолжают входить на сайт.
Выключена полная синхронизация вместе с деактивацией пропавших из каталога учётных записей. Без неё исчезновение записи из каталога сайт не замечает.
Частые вопросы
Можно ли входить по доменной учётной записи без импорта?
Да, проверка пароля идёт в каталоге, а запись на сайте создаётся при первом входе. Импорт нужен, когда сотрудники должны существовать на сайте заранее.
Как связать несколько доменов?
Отдельным подключением на каждый: у каждого свой базовый путь и свой отбор. Пользователи при этом различаются по внешнему идентификатору.
Что делать с изменившимися логинами?
Связь держится на внешнем идентификаторе, а не на логине, поэтому переименование сотрудника переносится штатно. Смена самого идентификатора создаёт новую запись.
Как проверить, что приедет, до импорта?
Запросом к каталогу с тем же отбором из командной строки. Список из ответа и есть то, что увидит сайт.
Смежное
-
LDAP и Active Directory - оглавление подтемы
-
Пользователи, группы и права доступа - устройство учётных записей
-
Права доступа на практике - что получает импортированный сотрудник
-
Агенты и cron - кто выполняет периодический импорт
-
Импорт пользователей из файла: связь, пароли, группы - если каталога организации нет
-
NTLM-авторизация не работает - прозрачный вход по доменной записи
-
LDAP не подключается: причины по убыванию частоты - если каталог не отвечает
-
Синхронизация пользователей с внешней системой: ключ, группы, увольнения - тот же обмен своим кодом
-
Единый вход по доменной учётной записи: настройка NTLM - вход без пароля поверх синхронизированных записей
-
Внешняя авторизация изнутри - что означает отметка о внешнем источнике у записи