Миграция из Microsoft Active Directory в Avanpost DS

Утилита "migrate-tool" предназначена для миграции из Microsoft Active Directory в Avanpost DS объектов следующего типа:

  • Пользователи (Users)
  • Группы безопасности (Security groups)
  • Подразделения (Organizational Unit)

В Avanpost DS используется два механизма авторизации:

  • Для доменных пользователей с Linux-компьютеров - Kerberos.
  • Для фронтенд LDAP Bind - пароль в аттрибуте  "userpassword".

В рамках задачи по переносу паролей работа осуществляется только с хешами паролей и солью. Никаких расшифровок не происходит.

По умолчанию используется алгоритм шифрования BCrypt.

Дополнительный алгоритм шифрования для фронтенд LDAP Bind -  NTLMv2. Он используется для работы с хеш-паролями пользователей, перенесенных из Microsoft AD.

Для получения хешей пароля пользователя и ключей Kerberos используется протокол MS-DRSR. 

Утилита "migrate-tool" подключается к стандартному сервису репликации Microsoft AD по порту 135 для получения необходимых данных для дальнейшей конвертации и загрузки в Avanpost DS. 

1. Процесс миграции из Microsoft AD в Avanpost DS

Для миграции из Microsoft AD в Avanpost DS необходимо подключиться к контроллеру домена и выполнить шаги:

Шаг 1.1. Подготовить конфигурационный файл

Требуется подготовить конфигурационный файл "config.yaml" и поместить его в директорию с утилитой "migrate-tool". (Утилита находится в директории "/opt/avanpost/tools/migratetool/")

Для этого необходимо в шаблон файла "config.yaml" подставить свои значения вместо комментариев, указанных в скобках <>. 

Шаблон файла config.yaml
source:
  address: "<IP-адрес или доменное имя сервера источника>"
  port: "389" # Порт для подключения к Windows AD, по умолчанию LDAP. Сейчас поддерживается работа только по протоколу LDAP, который работает на порту 389
  login: "<Логин для подключения к Windows AD. Пример: sas@winexample.local>"
  password: "<Пароль для подключения к Windows AD>"
  ad_page_size: "<Количество запрашиваемых записей в одном запросе>"

target:
  address: "<IP-адрес или доменное имя сервера назначения>"
  port: "<Порт для подключения к ADS>"
  login:  "<Логин для подключения к ADS>" # Пример: cn=Administrator,ou=users,dc=avanpost,dc=com
  password: "<Пароль для подключения к ADS>"
  home_directory: "/home"  # Директория, которая будет служить для хранения папок пользователей
  default_group_uid: "eb04ddca-a960-11ed-bedf-ff5041429012" # UUID группы `All Users` в Avanpost DS

upload_count: "<Количество одновременно запускаемых загрузок в DS. Тип: Число>"

# Опциональный параметр
# Вы можете указать атрибуты для маппинга между WindowsAD и ADS.
# Маппинг реализован для пользователей и групп
mapping_attributes:
  group:
    - ad_attr: "mail"
      ds_attr: "description"
  user:
    - ad_attr: "telephonenumber"
      ds_attr: "homePhone"
Пример готового файла config.yaml
source:
  address: "192.168.10.2"
  port: "389"
  login: "admin"
  password: "Avanp0st"
  ad_page_size: "2"

target:
  address: "127.0.0.1"
  port: "389"
  login: "cn=Administrator,ou=users,dc=avanpost,dc=com"
  password: "Avanp0st"
  home_directory: "/home"
  default_group_uid: "eb04ddca-a960-11ed-bedf-ff5041429012"

upload_count: "2"

# Опциональный параметр
# Вы можете указать аттрибуты для маппинга между WindowsAD и ADS.
# Маппинг реализован для пользователей и групп
mapping_attributes:
  group:
    - ad_attr: "mail"
      ds_attr: "description"
  user:
    - ad_attr: "telephonenumber"
      ds_attr: "homePhone"

Шаг 1.2. Запустить утилиту "migrate-tool"

Параметры запуска:

  • --entry-type → Обязательный! Тип объектов для миграции: user, group, ou
  • --source-ou → Обязательный! Адрес источника (OU): ou=branch,dc=winexample,dc=com
  • --target-ou → Обязательный! Адрес назначения (OU): ou=branch,dc=winexample,dc=com
  • --config → Путь до файла конфигурации (по умолчанию: "./config.yaml")
  • --default-password → Указать пароль по умолчанию
  • --save-hierarchy → Перенос с сохранением иерархии

1.2.1. Сначала требуется импортировать подразделения. Для этого в шаблон команды запуска необходимо подставить свои значения вместо [Подразделение], [Домен1ур], [Домен2ур]:

Шаблон команды запуска migrate-tool для OU
./migrate-tool --source-ou="ou=[Подразделение],dc=[Домен2ур],dc=[Домен1ур]" --target-ou="ou=[Подразделение],dc=[Домен2ур],dc=[Домен1ур]" --entry-type="[Тип объектов]" --config="config.yaml" --save-hierarchy
Пример команды запуска migrate-tool для OU
./migrate-tool --source-ou="ou=Department,dc=windomen,dc=adds" --target-ou="ou=Department,dc=avanpost,dc=local" --entry-type="ou" --config="config.yaml" --save-hierarchy

1.2.2. Затем требуется импортировать группы. Для этого в шаблон команды запуска необходимо подставить свои значения вместо [Домен1ур], [Домен2ур]:

Шаблон команды запуска migrate-tool для групп
./migrate-tool --save-hierarchy --source-ou="dc=[Домен2ур],dc=[Домен1ур]" --target-ou="dc=[Домен2ур],dc=[Домен1ур]" --entry-type="group" --config="config.yaml"
Пример команды запуска migrate-tool для групп
./migrate-tool --save-hierarchy --source-ou="dc=windomen,dc=adds" --target-ou="dc=avanpost,dc=local" --entry-type="group" --config="config.yaml"

1.2.3. И затем требуется импортировать пользователей. Для этого в шаблон команды запуска необходимо подставить свои значения вместо [Домен1ур], [Домен2ур]:

Шаблон команды запуска migrate-tool для пользователей
./migrate-tool --save-hierarchy --source-ou="dc=[Домен2ур],dc=[Домен1ур]" --target-ou="dc=[Домен2ур],dc=[Домен1ур]" --entry-type="user" --config="config.yaml"
Пример команды запуска migrate-tool для пользователей
./migrate-tool --save-hierarchy --source-ou="dc=windomen,dc=adds" --target-ou="dc=avanpost,dc=local" --entry-type="user" --config="config.yaml"

2. Дополнительные параметры

В конфигурационном файле "config.yaml" можно переопределить встроенные фильтры для поиска объектов.

По умолчанию фильтры имеют следующий вид:

Organizational units filter: "(&(objectClass=organizationalUnit)(!(isCriticalSystemObject=TRUE)))"
Security groups filter: "(&(objectClass=group)(groupType=-2147483646)(!(isCriticalSystemObject=TRUE)))"
Users filter: "(&(!(objectclass=computer))(!(userAccountControl:1.2.840.113556.1.4.803:=2))(objectClass=person)(objectClass=user)(objectClass=organizationalPerson))"

Для их переопределения необходимо добавить в конфигурационный файл "config.yaml" в раздел "source", следующие поля с необходимыми фильтрами:

  • organizational_units_filter
  • security_groups_filter
  • users_filter

Обсуждение