Настройка LDAP-сервера с Microsoft Active Directory

Настройка LDAP с Microsoft Active Directory (MS AD) в качестве источника пользователей


[ Общие сведения ] [ Настройка LDAP-провайдера на стороне MS AD ] [ Первичная настройка LDAP-провайдера в административной консоли Avanpost FAM Server ] [ Настройка на стороне Avanpost FAM в случае осуществленной ранее синхронизации с MS AD ] [ Проверка настройки ] [ Проверка пользователей ] [ Проверка групп ] [ Первичная загрузка/импорт пользователей из домена на базе Microsoft Active Directory в Avanpost FAM ] [ Автоматическое создание пользователя в Avanpost FAM при его добавлении в домене Microsoft Active Directory ] [ Обновление атрибутов пользователя при их изменении в домене Microsoft Active Directory ] [ Быстрое удаление пользователей из групп Microsoft Active Directory ] [ Исключения ] [ Приложение А. Примеры LDAP-фильтров для выборки пользователей, синхронизируемых из MS AD в Avanpost FAM ] [ Приложение Б. Примеры LDAP-фильтров для выборки групп, синхронизируемых из MS AD в Avanpost FAM ] [ Приложение В. Примеры импортируемых атрибутов пользователей при синхронизации из MS AD в Avanpost FAM ] [ Приложение Г. Скрипт автоматизации загрузки пользователей из MS AD в Avanpost FAM ]

Общие сведения

Avanpost FAM обладает встроенной функциональностью LDAP-синхронизации и LDAP-аутентификации. В статье описывается настройка интеграции с Microsoft Active Directory в качестве поставщика информации о пользователях, членстве пользователей в группах и в качестве средства проверки паролей. Интеграция осуществляется посредством протокола LDAP.

Механизм интеграции Avanpost FAM с MS AD посредством LDAP может применяться при решении следующих задач:

  1. Первичная загрузка данных о пользователях из домена MS AD.
  2. Поддержка актуальности данных о пользователях при их изменении в домене MS AD.
  3. Загрузка информации о членстве пользователей в группах в MS AD.
  4. Проверка пароля в MS AD при 2FA/MFA для корпоративных ресурсов.
  5. Проверка пароля в MS AD при 2FA для серверов и компьютеров под управлением Windows и Linux.

Avanpost FAM поддерживает одновременную интеграцию с несколькими доменами, в качестве которых могут выступать экземпляры MS AD и другие LDAP-каталоги (OpenLDAP, FreeIPA, Avanpost DS и т.д.).

Системные требования для интеграции Avanpost FAM:

  1. Сервер Microsoft Active Directory на базе Microsoft Windows Server 2012R2, Microsoft Windows Server 2016, Microsoft Windows Server 2019, Microsoft Windows Server 2022.
  2. Сервер Avanpost FAM 1.3+.

Дополнительная информация об особенностях настройки LDAP-провайдеров в Avanpost FAM содержится в статье Управление LDAP-источниками

Настройка LDAP-провайдера на стороне MS AD

Настройка на стороне Microsoft Active Directory осуществляется в следующей последовательности:

  1. Создать служебную учетную запись c полномочиями Domain Users.
  2. Убедиться, что открыт LDAP-интерфейс.
  3. На стороне MS AD получить значения параметров, которые далее будут использованы для настройки на стороне Avanpost FAM:
    • значение IP-адреса или DNS-имя сервера MS AD;
    • значение порта LDAP-интерфейса сервера MS AD;
    • значение Base Distinguished Name (Base DN);
    • NetBIOS-имя контроллера домена;
    • логин и пароль служебной УЗ в MS AD.



Первичная настройка LDAP-провайдера в административной консоли Avanpost FAM Server

Настройка LDAP-провайдера в административной консоли Avanpost FAM Server при первичной синхронизации осуществляется в следующей последовательности:

  1. Зайти в раздел «Настройки LDAP-провайдеров» режима «Сервис».
  2. В разделе «Настройки LDAP-провайдеров» создать новый провайдер, нажав кнопку "Добавить".
  3. Пошагово заполнить параметры LDAP-провайдера согласно таблице (более подробно настраиваемые параметры описаны в разделе Управление LDAP-источниками):
    Наименование параметраОписание параметра

    Пример значения

    Шаг 1. Основные настройки

    ИмяПроизвольное настроенного LDAP провайдера, которое будет отображаться в системеExample Provider
    Домен

    Домен LDAP-провайдера (одному домену должен соответствовать один LDAP-провайдер). Cледует использовать NetBIOS-имя домена (без суффиксов .local, .corp и т.д.). Для проверки NetBIOS-имени домена рекомендуется использовать PowerShell или встроенные оснастки управления контроллером домена). Создание нескольких LDAP-провайдеров в одном домене нежелательно.

    Имя домена. Например, AVANPOST

    Группы по умолчанию

    Группы Access Server (FAM), в которые будут добавлены пользователи после импорта из домена

    Имя группы, созданной в Avanpost FAM: lk-client

    Доменный пароль

    Установить флаг в чекбокс "Создать метод аутентификации Доменный пароль":

    • при установленном чекбоксе создается отдельный метод типа "Доменный пароль", привязанный к данному LDAP-провайдеру;
    • при выключенном чекбоксе отдельный метод типа "Доменный пароль" для создаваемого LDAP-провайдера не создается.
    Установить флаг, если планируется использовать метод "Доменный пароль".

    Наименование

    Наименование автоматически создаваемого метода типа "Доменный пароль". Поле появляется при установке флага в чекбокс "Создать метод аутентификации Доменный пароль".

    Example Domain Method

    Шаг 2. Настройки подключения

    Служба каталогов

    Тип службы каталогов LDAP-сервера. Выбрать из выпадающего списка.

    Active Directory

    ХостIP-адрес или DNS имя контроллера домена MS AD. Указание нескольких значений не предусмотрено.

    Пример IP-адреса: 10.10.17.91,

    Пример имени контроллера домена: dc-ad.avanpost.demo

    ПортПорт подключения к LDAP-каталогу

    Без TLS: 389.

    С TLS: 636.

    SSL

    Переключатель "Использовать защищенное соединение" для включения поддержки подключения к LDAP-каталогу по протоколу LDAPS:

    • при включенном переключателе () соединение с LDAP-провайдером осуществляется с использованием протокола безопасности;
    • при выключенном переключателе () соединение с LDAP-провайдером протокол безопасности не используется.
    Включить переключатель
    Пропустить проверку TLS-сертификата

    Переключатель "Пропустить проверку TLS-сертификата" (используется при включенном переключателе SSL):

    • при включенном переключателе () проверка сертификата TLS пропускается при использовании SSL;
    • при выключенном переключателе () проверка TLS-сертификата выполняется.
    Выключить переключатель
    Версия TLS

    Выбрать версию протокола TLS.

    None
    BaseDN

    Объект каталога, начиная с которого производится поиск. Можно указать несколько баз для поиска, используя точку с запятой в качестве разделителя.

    Формат ввода: dc=example,dc=com, где dc = Domain Component.

    DC=avanpost,DC=demo
    Имя пользователя

    Имя служебной УЗ в виде DN, используемая для импорта УЗ и для проверки существования УЗ в LDAP-каталоге при попытке аутентифицироваться с использованием пароля от УЗ в домене. Может быть добавлен только один пользователь.

    Формат ввода: cn=admin,cn=users,dc=example,dc=com, где dc = Domain Component, cn = Common Name.

    CN=famuser,OU=special,DC=avanpost,DC=demo


    ПарольПароль от служебной учетной записи.P@ssw0rd!
    Расписание синхронизации (Cron или Quartz)

    Частота выполнения синхронизации. Формат временного интервала задается в Cron-выражении или в формате Quartz.

    0 30 12 * * *
    Управление паролями

    Разрешить задавать доменные пароли:

    • при включенном переключателе () разрешается задавать пароли для домена LDAP-провайдера;
    • при выключенном переключателе () запрещается задавать пароли для домена LDAP-провайдера.
    Включить/выключить переключатель

    Шаг 3. Настройки интеграции 

    Настройки импорта пользователей
    Фильтр поиска пользователя

    Фильтр, ограничивающий зону поиска пользователей для импорта пользователя из LDAP-провайдера в FAM. Допускается использовать несколько плейсхолдеров.

    (&(objectClass=user)(objectCategory=person)(memberof=CN=VPN,OU=FAM,DC=avanpost,DC=demo))

    Фильтр поиска аутентифицируемого пользователя

    Фильтр, ограничивающий зону поиска по LDAP-каталогу для пользователя, который проходят аутентификацию в Avanpost FAM, но еще не импортированы из LDAP-каталога. 

    Чтобы для пользователей из этого домена MS AD проверка пароля выполнялась в LDAP-каталоге, то необходимо указать значение LDAP-фильтра. Иначе оставить пустое значение параметра.

    Допускается использовать несколько плейсхолдеров.


    Во избежание возникновения ошибок при аутентификации рекомендуется использовать фильтр: (&(objectClass=user)(samAccountName=%s))

    LDAP-атрибут, содержащий логин пользователя

    Наименование атрибута на стороне LDAP-провайдера, содержащего логин импортируемого пользователя.

    sAMAccountName
    Внешний ключ учетной записи

    Наименование атрибута, содержащего идентификатор безопасности (значение, используемое для идентификации) пользователя (на стороне MS AD). Не рекомендуется использовать атрибут DN в качестве внешнего ключа УЗ.

    Не рекомендуется использовать атрибут DN в качестве внешнего ключа УЗ. Если уже указан атрибут DN и была выполнена синхронизация с AD, то необходимо использовать для настройки инструкцию по настройке при повторной синхронизации.

    objectSid

    Атрибут для связывания учетной записи из LDAP c учетной записью IDP

    Наименование атрибута, по которому осуществляется идентификация и привязка данных пользователя из LDAP-провайдера к IdP Avanpost FAM. Предназначен для проверки уникальности учетной записи в MS AD.

    userPrincipalName
    Управлять статусом учетной записи через каталог

    Установить/убрать флажок из чекбокса:

    • при установленном флажке Avanpost FAM статус учетной записи в системе будет автоматически изменяться после синхронизации в случае изменения статуса на стороне LDAP-каталога (например, учетная запись автоматически разблокируется в случае разблокировки на стороне источника);
    • при выключенном флажке статус учетной записи в системе не изменяется при синхронизации с LDAP-каталогом.
    Включить/выключить флаг
    LDAP атрибут, содержащий отчество пользователя

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

    middleName
    Атрибут пользователя (или DN), перечисляемый в поле member группы LDAP

    Название атрибута или DN (Distinguished Name), значения которого перечисляются в перечне участников группы (в поле member). По данному атрибуту производиться поиск пользователей по группам.


    dn
    Импорт дополнительных атрибутов учетной записи

    Список дополнительных атрибутов, которые импортируются из LDAP-каталога в Avanpost FAM. Следует настроить импорт дополнительных атрибутов из AD в FAM.

    Согласно приложению B

    Настройки импорта групп

    Синхронизировать группы

    Флаг включения процесса синхронизации групп пользователей на стороне Avanpost FAM и LDAP-провайдера:

    • при установленном флажке Avanpost FAM импортирует и синхронизирует группы пользователей со стороннего LDAP-провайдера в соответствии с настройками;
    • при выключенном флажке Avanpost FAM не импортирует группы пользователей с данного LDAP-провайдера.
    Включить/выключить флаг
    Искать группу с учётом домена

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

    • при установленном флаге импортируемые группы должны принадлежать тому же домену, что задан для LDAP-провайдера в соответствующем параметре;
    • при выключенном флажке домен не учитывается при поиске групп.
    Включить/выключить флаг
    Фильтр поиска групп

    LDAP-фильтр для импорта групп. Если в  данной настройке будут найдены пользователи из "Фильтр поиска пользователей", то их учетные записи автоматически попадут в эту группу в FAM.

    (&(objectClass=ipausergroup)(cn=FreeIPA_FAMusers))

    Атрибут наименования группыНаименование атрибута, содержащего наименование импортируемой группы. Атрибут на стороне LDAP-провайдера.cn
    Фильтр для поиска пользователей для привязки к группам

    Фильтр предназначен для добавления/удаления из групп пользователей, по какой-либо причине отсутствующих в фильтре "Фильтр поиска групп", но при этом уже существующих в Avanpost FAM. Фильтр ускоряет привязку импортированных пользователей и групп.

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

    (&(objectClass=user)(objectCategory=person)(memberof=CN=VPN,OU=FAM,DC=avanpost,DC=demo))

    Атрибут для поиска существующего пользователя

    Атрибут пользователя, добавленного в Avanpost FAM. Атрибут на стороне Avanpost FAM, который связывается с атрибутом для связывания учетной записи из LDAP c учетной записью IDP на стороне LDAP-провайдера. По связанному атрибуту осуществляется поиск пользователя в LDAP-каталоге для синхронизации данных (актуализации членства в группах).

    Выбрать из выпадающего списка (например, логин).
    Атрибут для связывания учетной записи из LDAP c учетной записью IDP

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

    userPrincipalName

    =Наименование атрибута пользователя, по которому будет производится поиск пользователей по группам. Например за факт наличия пользователей в группе отвечает атрибут группы memberUid, он в свою очередь является атрибутом uid у пользователя.

    userPrincipalName
    Атрибут описания группыАтрибут на стороне MS AD, содержащий описание группы.description
    Атрибут со списком участников группыАтрибут на стороне LDAP-каталога, содержащий перечень участников группы.member
    Шаг 4. Завершение
    Сделать активным

    Установить/убрать флажок из чекбокса:

    • при установленном флажке LDAP-провайдер включается сразу после создания;
    • при выключенном флажке приложение LDAP-провайдер выключен: для включения потребуется включить синхронизацию в профиле LDAP-провайдера.
    Включить флаг
  4. Убедиться, что в списке LDAP-провайдеров настроенный провайдер находится в статусе «Active».

В случае, если администратор хочет разрешить автоматическую смену логина импортированных пользователей (при смене логина на стороне LDAP-источника или при смене атрибута, используемого в качестве логина), требуется:

  1. В разделе «Настройки LDAP-провайдеров» режима «Сервис» перейти в профиль настроенного LDAP-источника.
  2. Во вкладке «Интеграция» установить флаг в чекбокс «Разрешить смену логина».

Если чекбокс не установлен, Avanpost FAM не позволяет менять логин импортированным пользователям. 

Настройка на стороне Avanpost FAM в случае осуществленной ранее синхронизации с MS AD

Данная настройка осуществляется, если раннее при настройке интеграции с LDAP-провайдером в качестве значения «Внешний ключ учетной записи» был указан атрибут DN. Так как это может привести к некорректной работе Avanpost FAM Server, следует перенастроить интеграцию через дополнительный атрибут:

  1. Перед выполнением данной инструкции необходимо сделать копию (бэкап) базы данных и сервера.
  2. Войти в профиль данного LDAP-провайдера (выбрать из реестра во вкладке «Настройки LDAP-провайдеров» режима «Сервис»).
  3. Чтобы начать редактировать параметры, нажать кнопку в разделе «Настройки интеграции».
  4. Добавить дополнительный атрибут учётной записи, по которому будет осуществляться интеграция, в настройках FAM (более подробно настройки дополнительных атрибутов описаны в Управление LDAP-источниками):
    1. В графе «Импорт дополнительных атрибутов учетной записи» нажать.
    2. В столбце «Атрибут LDAP» ввести наименование атрибута на стороне LDAP-провайдера.
    3. Если атрибут с таким название уже существует в FAM Server, установить флаг «Отображение атрибута» и ввести его наименование в FAM Server. Если атрибута с таким названием не существовало, он автоматически создастся в FAM при следующей синхронизации.
    4. Сохранить изменения.
  5. Убедиться, что атрибут отображается в учетной записи пользователя:
    1. Зайти в профиль любого пользователя, данные которого синхронизируются через настраиваемый MS AD, выбрав его из реестра пользователей режима «Пользователи».
    2. Во вкладке «Профиль» в разделе «Дополнительные атрибуты» найти добавленный атрибут.
  6. Войти в профиль настраиваемого LDAP-провайдера (режим «Сервис» - «Настройки LDAP-провайдеров») и остановить синхронизацию, нажав .
  7. Далее подключиться к базе данных с учетными данными пользователя, предназначенного для подключения в базе данных.

    Информацию о логине и пароле пользователя, предназначенного для подключения в базе данных используется в конфигурационном файле Avanpost FAM config.toml в параметре connectionString:

  8. Выполнить следующий SQL-запрос:
    UPDATE public.user_external_ids
    SET  id_value=subq.value,
                     id_key='objectSid'
    FROM (
                    SELECT value, user_Id
                    FROM public.user_custom_attributes
                    WHERE attr_id=(SELECT id FROM public.user_custom_attributes_schema WHERE name='objectSid')) AS subq
    WHERE subq.user_Id = public.user_external_ids.user_id
    ;
  9. В настройках провайдера в административной консоли Avanpost FAM во вкладке «Интеграция» изменить значение «Внешний ключ учётной записи» на значение дополнительного параметра, настроенного в п. 4 данной инструкции.
  10. Сохранить настройки и в командной строке выполнить:
sudo journalctl -xefu idp

Проверка настройки

Проверка настройки производится при помощи скриптов PowerShell путем подстановки требуемых параметров, указанных при настройке фильтров. 

Если используются скрипты PowerShell, то запуск проверки следует производить от имени пользователя, от имени которого будут производится синхронизация LDAP.

Проверка пользователей
$LDAPSEARCH = New-Object System.DirectoryServices.DirectorySearcher
$LDAPSEARCH.SearchRoot = "LDAP://DC=avanpost,DC=test"
$LDAPSEARCH.Filter = "(&(objectClass=user)(objectCategory=person)(memberof= CN=Employees,OU=AvanGroups,DC=avanpost,DC=test))"
$LDAPSEARCH.FindAll()
Проверка групп
$LDAPSEARCH = New-Object System.DirectoryServices.DirectorySearcher
$LDAPSEARCH.SearchRoot = "LDAP://DC=avanpost,DC=test" 
$LDAPSEARCH.Filter = "(&(objectClass=group)(CN=Employees))"
$LDAPSEARCH.FindAll()

Сценарии использования

Первичная загрузка/импорт пользователей из домена на базе Microsoft Active Directory в Avanpost FAM

Система Avanpost FAM может выполнить первичную загрузку и создание пользователей, импортировав данные из домена Microsoft Active Directory. Загрузка всех пользователей будет выполнена в результате первой синхронизации в соответствии с заданным расписанием.

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

В Microsoft Active Directory по умолчанию возвращает только первые 1000 объектов и 1500 атрибутов для каждого объекта в результатах запроса LDAP. Поэтому в Avanpost FAM предусмотрен механизм дополнительного автоматического запроса к LDAP-каталогу, который происходит без участия администратора при превышении лимита объектов и атрибутов. Дополнительная настройка на стороне MS AD при этом не проводится.

Автоматическое создание пользователя в Avanpost FAM при его добавлении в домене Microsoft Active Directory

При добавлении пользователей в Microsoft Active Directory, подключенном к Avanpost FAM, система будет автоматически создавать пользователей, которые попадают под правила заданного LDAP-фильтра поиска пользователей.

Обновление атрибутов пользователя при их изменении в домене Microsoft Active Directory

При изменении атрибутов пользователя в домене Microsoft Active Directory, подключенном к Avanpost FAM, система будет автоматически обновлять значения атрибутов, которые настроены в правилах маппинга.

Аутентификация с проверкой пароля через LDAP BIND в домене Microsoft Active Directory

Если пользователь найден в домене Microsoft Active Directory, подключенном к Avanpost FAM, в соответствии с заданным фильтром поиска аутентифицируемого пользователя, то пароль проверяется в LDAP-каталоге. Иначе проверка пароля пользователя выполняется внутренними средствами Avanpost FAM.

Быстрое удаление пользователей из групп Microsoft Active Directory

Для быстрого удаления пользователей из групп следует изменить настройки LDAP.

  1. Создать в домене новую группу пользователей. В FAM зайти в настройки LDAP (Сервис > Настройки LDAP провайдеров > Выбираем необходимую интеграцию > Интеграция).

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

После настройки новой группы, необходимо включить параметр “Удалять пользователей, отсутствующих в текущей выборке”, но важно будет проверить, чтобы в карточке учетной записи администратора в FAM поле “Домен” отсутствовало или отличалось от домена пользователей, которых мы хотим удалить, так как иначе мы потеряем доступ к консоли администрирования для суперпользователя в FAM.

Исключения

Если пользователь был добавлен в FAM через LDAP и пользователь ни разу не заходил в ЛК, то аутентификация через MSCHAPv2 не сработает. 

Это происходит из-за особенности протоколов LDAP и MSCHAPv2, так как при аутентификации пользователя через LDAP в ответе будет содержаться только разрешение на вход, а MSCHAPv2 передает аутентификационные данные в "шифрованном виде". То есть по "зашифрованным" данным из MSCHAPv2 FAM не может сформировать запрос в AD для подтверждения легитимности пользователя.

Важно, что бы в интеграции с AD был включен параметр "Обновлять пароль в процессе аутентификации", так как иначе FAM не сможет получить пароль для дальнейшей проверок.

Важно, что бы пароли в FAM хранились в открытом или зашифрованном виде, так как FAM не сможет проверить пароль из MSCHAPv2 по хешу.

Пользователю необходимо один раз авторизоваться в FAM, что бы FAM первоначально проверил правильность введенных данных в AD, а потом только сохранил данную информацию в шифрованном виде у себя в БД для дальнейшей проверки через MSCHAPv2. 

Приложение А. Примеры LDAP-фильтров для выборки пользователей, синхронизируемых из MS AD в Avanpost FAM

Пример LDAP-фильтра для выгрузки пользователей из нескольких групп:

(&(objectClass=user)(objectCategory=person)(|(memberof=CN=VPN,OU=FAM,DC=avanpost,DC=demo)(memberof=CN=Servicedesk,OU=FAM,DC=avanpost,DC=demo)(memberof=CN=1C,OU=FAM,DC=avanpost,DC=demo)))

Приложение Б. Примеры LDAP-фильтров для выборки групп, синхронизируемых из MS AD в Avanpost FAM

Пример LDAP-фильтра для выгрузки нескольких определённых групп:

(&(objectClass=group)(|(CN=1C)(CN=VPN)(CN=Servicedesk)))

Приложение В. Примеры импортируемых атрибутов пользователей при синхронизации из MS AD в Avanpost FAM

Таблица с указанием наиболее часто импортируемых атрибутов пользователя в MS AD:

Атрибут

Значение

Пример значения

name

ФИО

Петров Иван Сергеевич

givenName

Имя

Иван

sn

Фамилия

Петров

displayName

ФИО

Петров Иван Сергеевич

mail

E-mail (атрибут E-mail-Addresses); загружается в основной атрибут номера телефона

petrovis@avanpost.ru

sAMAccountName

Имя входа пользователя

petrovIS

userPrincipalName

Имя входа пользователя

petrovis@avanpost.ru

CN

Общее имя (Common Name) 

Петров Иван Сергеевич

OU

Подразделение (Organizational Unit)

ИТ отдел

DN

Уникальное имя (Distinguished Name)

CN=Петров Иван Сергеевич,OU=ИТ отдел,DC=avanpost,DC=ru

mobile

Мобильный номер телефона (атрибут Mobile в Microsoft Outlook); загружается в основной атрибут номера телефона

Значение номера телефона в сохранённом формате

telephoneNumber

Рабочий номер телефона (атрибут Business в Microsoft Outlook)

Значение номера телефона в сохранённом формате

Исчерпывающий перечень доступных для загрузки атрибутов содержится в документации на Microsoft Active Directory.

Приложение Г. Скрипт автоматизации загрузки пользователей из MS AD в Avanpost FAM

Для упрощения импорта пользователей нужно воспользоваться готовым PowerShell-скриптом (расширение .ps1).

  1. Сохраните файл из примера ниже, введите путь и имя файла скрипта и используйте параметры для отправки данных и задания параметров. Прежде чем запускать скрипт в Windows, необходимо изменить политику выполнения PowerShell по умолчанию, инструкцию об этом следует посмотреть в Помощи своей операционной системы.
  2. Первым вопросом будет определение домена, для которого создается LDAP-фильтр. Следует ввести "y" для положительного ответа, и "n", если нужно выбрать другой домен.
  3. Далее следует определить, сопоставлен ли сам фильтр и ввести IP-адрес контроллера домена. Сразу после этого нужно ввести логин пользователя и пароль для авторизации. Имя пользователя вводится без указания домена.

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

Далее при желании следует скопировать фильтры поиска, а также имя служебного пользователя в буфер обмена. Обратите внимание на то, что после копирования следует убрать переносы строк. Для выхода нажать Enter.


if (!(Get-Command 'Get-ADUser' -errorAction SilentlyContinue))
{
Write-Host @'
Необходимый модуль PS для выполнения скрипта не доступен, следует установить:
-С помощью команд в PowerShell с повышенными правами:
dism /online /get-capabilities | ForEach {if ($_ -match "DS-LDS.Tools" ) {$mass = $_ -split " : "}}
& 'dism' @('/online', '/add-capability', $('/CapabilityName:'+$mass[1]))
-Через графический интерфейс. Настройки - Приложения - Дополнительные компоненты:
Добавить компонент "Средства удаленного администрирования сервера: средства 
доменных служб Active Directory и служб облегченного доступа к каталогам"
'@
Read-Host 'Press Enter to exit...'
Exit
}
$domain = Get-WmiObject -Class Win32_ComputerSystem
$groupforfilter = @()
$serviceuser = ""
if ($domain.PartOfDomain) {
    if (('y','н') -contains (Read-Host "Для этого домена ""$($domain.Domain)"" составляем LDAP-фильтр?[y\n]")) {
        $groups = @()
        Get-ADGroup -Filter * -Properties * | Where-Object {!($_.IsCriticalSystemObject) -or $_.name -like "Пользователи удаленного рабочего стола" -or $_.name -like "Remote Desktop Users"} | Sort CN | ForEach-Object {$groups+=@{Name=$_.CN;DN=$_.DistinguishedName}}
        for ($i = 0; $i -lt $groups.count; $i++) {
            Write-Host $i'-'$($groups[$i].Name+' ['+$groups[$i].DN+']')}
        do {$groupforfilter = $($(Read-Host "`nИз каких групп выше нужно импортировать пользователей?").Trim(","," ") -split  {$_ -eq " " -or $_ -eq ","})}
        until ($groupforfilter)
        $serviceuser = Read-Host "Введите логин служебного пользователя"
        try {$serviceuser = $(Get-ADUser -Identity $serviceuser -Properties DistinguishedName).DistinguishedName}
        catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException] {
            $serviceuser = "Такой пользователь "+$serviceuser+" не найден"
        }
    }else{
    $DCip = Read-Host "Введите ip-адрес контроллера домена (запрос будет на порт 9389)"
    $Cred = Get-Credential -Message 'Введите имя служебного пользоватля без домена и пароль'
    $groups = @()    
    try {Get-ADGroup -Filter * -Server $DCip -Credential $Cred -Properties * | Where-Object {!($_.IsCriticalSystemObject) -or $_.name -like "Пользователи удаленного рабочего стола" -or $_.name -like "Remote Desktop Users"} | Sort CN | ForEach-Object {$groups+=@{Name=$_.CN;DN=$_.DistinguishedName}}}
    catch [Microsoft.ActiveDirectory.Management.ADServerDownException]{
        Read-Host $("Не удалось подключиться к "+$DCip+":9389`nPress Enter to exit...")
        Exit}
    catch [System.Security.Authentication.AuthenticationException] {
        Read-Host "Не удалось авторизоваться с введёнными учетными данными`nPress Enter to exit..."
        Exit}
    for ($i = 0; $i -lt $groups.count; $i++) {
            Write-Host $i'-'$($groups[$i].Name+' ['+$groups[$i].DN+']')}
    do {$groupforfilter = $($(Read-Host "`nИз каких групп выше нужно импортировать пользователей?").Trim(","," ") -split {$_ -eq " " -or $_ -eq ","})}
        until ($groupforfilter)
    #$serviceuser=$($Cred.UserName -split '\\')[1]
    $serviceuser=$Cred.UserName
    $serviceuser = $(Get-ADUser -Identity $serviceuser -Properties DistinguishedName).DistinguishedName
    }
}else{
    $DCip = Read-Host "Введите ip-адрес контроллера домена (запрос будет на порт 9389)"
    $Cred = Get-Credential -Message 'Введите имя служебного пользоватля - domain\user и пароль'
    $groups = @()    
    try {Get-ADGroup -Filter * -Server $DCip -Credential $Cred -Properties * | Where-Object {!($_.IsCriticalSystemObject) -or $_.name -like "Пользователи удаленного рабочего стола" -or $_.name -like "Remote Desktop Users"} | Sort CN | ForEach-Object {$groups+=@{Name=$_.CN;DN=$_.DistinguishedName}}}
    catch [Microsoft.ActiveDirectory.Management.ADServerDownException]{
        Read-Host $("Не удалось подключиться к "+$DCip+":9389`nPress Enter to exit...")
        Exit}
    catch [System.Security.Authentication.AuthenticationException] {
        Read-Host "Не удалось авторизоваться с введёнными учетными данными`nPress Enter to exit..."
        Exit}
    for ($i = 0; $i -lt $groups.count; $i++) {
            Write-Host $i'-'$($groups[$i].Name+' ['+$groups[$i].DN+']')}
    do {$groupforfilter = $($(Read-Host "`nИз каких групп выше нужно импортировать пользователей?").Trim(","," ") -split {$_ -eq " " -or $_ -eq ","})}
        until ($groupforfilter)
    #$serviceuser=$($Cred.UserName -split '\\')[1]
    $serviceuser=$Cred.UserName
    $serviceuser = $(Get-ADUser -Identity $serviceuser -Properties DistinguishedName).DistinguishedName
    }
if ($groupforfilter.Count -gt 1) {
    $filtergroup = '(|'
    $groupforfilter.ForEach({$filtergroup+='(memberof='+$groups[$_].DN+')'})
    $filtergroup += ')'
    $filtergropgroup = '(|'
    $groupforfilter.ForEach({$filtergropgroup+='(cn='+$groups[$_].Name+')'})
    $filtergropgroup += ')'
} else {
    $filtergroup = ''
    $filtergropgroup = ''
    $groupforfilter.ForEach({$filtergroup+='(memberof='+$groups[$_].DN+')'})
    $groupforfilter.ForEach({$filtergropgroup+='(cn='+$groups[$_].Name+')'})
}
$ldapusers="(&(objectClass=user)(objectCategory=person)"+$filtergroup+")"
$ldapuser="(&(objectClass=user)(sAMAccountName=%s)"+$filtergroup+")"
$ldapgroups="(&(objectClass=group)"+$filtergropgroup+")"
Write-Host ("`nФильтр поиска пользователЕЙ:`n"+$ldapusers+"`n")
Write-Host ("Внешний ключ учётной записи: objectSid`n")
Write-Host ("Фильтр поиска групп:`n"+$ldapgroups+"`n")
Write-Host ("Фильтр поиска пользователЯ:`n"+$ldapuser+"`n")
Write-Host ("Имя служебного пользователя: "+$serviceuser)
Write-host ("`nВНИМАНИЕ. После копирования мышью из консоли нужно убрать переносы строк`n")
if (('y','н') -contains $(Read-Host 'cкопировать "Фильтр поиска пользователЕЙ" в буфер обмена?[y\n]')) {Set-Clipboard -Value $ldapusers}
if (('y','н') -contains $(Read-Host 'cкопировать "Фильтр поиска групп" в буфер обмена?[y\n]')) {Set-Clipboard -Value $ldapgroups}
if (('y','н') -contains $(Read-Host 'cкопировать "Фильтр поиска пользователЯ" в буфер обмена?[y\n]')) {Set-Clipboard -Value $ldapuser}
if (('y','н') -contains $(Read-Host 'cкопировать "Имя служебного пользователя" в буфер обмена?[y\n]')) {Set-Clipboard -Value $serviceuser}
Read-Host 'Press Enter to exit...'


Обсуждение