Top.Mail.Ru
Перейти к основному содержимому

Установка и настройка MultiDirectory

Общая информация

В статье описывается установка и первоначальная настройка WEB-интерфейса службы каталогов MultiDirectory.

Архитектура работы решения

Описание
1Пользователи и сервисы, которые используют Kerberos для аутентификации. Подключаются к порту 88 для работы с Kerberos.
2Пользователи взаимодействуют с системой через клиентов LDAP. Эти клиенты могут быть различными приложениями или устройствами, которые используют протокол LDAP для доступа к данным и сервисам в системе.
3Администраторы системы используют web-приложение для управления и конфигурирования системы в web-интерфейсе.
4Контейнеризация всех компонентов службы каталогов происходит при помощи Docker'a.
5Traefik является обратным прокси-сервером, который маршрутизирует запросы от пользователей, администраторов и автоматизированных систем к соответствующим внутренним сервисам. Он обеспечивает балансировку нагрузки, безопасность и управление маршрутизацией.
6Центр распределения ключей, который управляет аутентификацией по протоколу Kerberos.
7MultiDirectory Admin API выполняет роль серверного компонента, который отвечает за обработку запросов от административного интерфейса и запросов от систем автоматизации. Этот компонент обеспечивает все необходимые функции для безопасного и эффективного управления данными LDAP через административный интерфейс.
8Представляет компонент для загрузки веб интерфейса, который позволяет управлять службой каталогов, создавать пользователей, настраивать политики доступа и управлять учетными записями клиентов.
9Административный сервис управления Kerberos сервером.
10LDAP-сервер реализует протокол Lightweight Directory Access Protocol (LDAP), хранит и обрабатывает поступающие от пользователей запросы в каталоге данных. Он отвечает за идентификацию, аутентификацию и авторизацию пользователей, определяя права доступа на основе атрибутов и членства в группах.*
* LDAP - сервер представляет собой 4 сервиса в виде отдельных контейнеров, обеспечивая большую производительность и отказоустойчивость - на схеме представлен в виде одного блока.
11DNS-сервер для разрешения доменных имен.
12PostgreSQL является системой управления базами данных. База данных MultiDirectory хранит настройки конфигурации системы, данные службы каталогов, такие как информация о пользователях, группах, организационных единицах и т.д., а также другие важные данные.

Требования для установки каталога

  • Компонент устанавливается на Linux-сервер, протестирован на Ubuntu, Debian.
  • Минимальные требования для сервера: 2 CPU, 8 GB RAM, 100 GB HDD.
  • Необходимо зарегистрировать домен и сопоставить его с IP вашего сервера.
Важно

Необходим статический IP-адрес. Пример: ваш_домен.ru -> 255.255.255.255.

Для работы MultiDirectory необходимо произвести установку Docker и Docker-Compose.

MultiDirectory используют следующие репозитории:

Обратите внимание

Все сервисы работают при помощи Traefik, используя Postgres в качестве базы данных. Другие СУБД несовместимы.

Работа с паролями для учетных записей

С MultiDirectory работают два вида второго фактора:

  • Push-уведомления.
  • OTP-токен.

Когда срабатывают Push и OTP

Push-уведомление

Срабатывает в том случае, если:

  • в конце пароля отсутствуют цифры.
  • последним символом пароля является буква или спецсимвол.
  • в конце пароля есть цифры, но их количество меньше 6.

OTP-токен

Срабатывает в том случае, если:

  • в пароле для учетной записи последние 6 или более символов – цифры (в случае если в конце пароля стоит более 6 цифр – в OTP будут использоваться последние шесть).

Видеоинструкция по установке и настройке MultiDirectory

Создайте папку, в которой будет храниться MultiDirectory.

mkdir MultiDirectory; cd MultiDirectory;

Скачайте и сгенерируйте конфигурационный .env-файл при помощи:

bash <(curl https://raw.githubusercontent.com/MultiDirectoryLab/MultiDirectory/main/.package/setup.sh);
wget https://github.com/MultiDirectoryLab/MultiDirectory/releases/download/v2.0.1/docker-compose.yml;
curl https://raw.githubusercontent.com/MultiDirectoryLab/MultiDirectory/main/LICENSE

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


Расшифровка значения полей в файле setup.sh
  • Enter postgres user – введите пользователя Postgres, под которым будет осуществлятся подключение к вашей базе (если она есть). Если оставить незаполненным, будет установлен «user» (пользователь по умолчанию).
  • Enter postgres database name – введите имя базы данных, к которой будет осуществляться подключение (если она есть). Если оставить незаполненным, будет установлена база «postgres» (по умолчанию).
  • Enter postgres host – введите хост postgres. Если оставить не заполненным, будет использоваться хост «postgres» (по умолчанию).
  • Enter postgres password – введите пароль postgres, при помощи которого будет осуществляться подключение к вашей базе. Если оставить незаполненным, пароль будет сгенерирован автоматически.
  • Enter interface domain – введите домен интерфейса. Обращаем ваше внимание, что должен быть указан именно домен, в случае указания IP-адреса, web-интерфейс не запустится.

Запустите сервисы при помощи команды:

 docker compose pull; docker compose up -d

Настройка Web-интерфейса MultiDirectory

После успешной настройки и запуска сервисов Docker – перейдите в браузер. В поисковую строку внесите домен, который ранее был указан при генерации .env-файла

Вы попадете в настройку WEB-интерфейса вашей MultiDirectory.


Проверьте правильность написания домена, выберите необходимые вам настройки:

  • Настроить DNS. Если стоит галочка, то настройка DNS будет произведена сразу же (настройку DNS можно произвести и позже в WEB-интерфейсе администратора).
  • Настроить Kerberos. Если стоит галочка, то настройка керберос произойдет сразу же (настройку керберос можно произвести и позже из интерфейса администратор MultiDirectory).
  • Сгенерировать пароли для Kerberos. Если стоит галочка, то произойдет автоматическая генерация паролей для Kerberos. После настройки WEB-интерфейса сгенерированные пароли будут выгруженны в файл.

Нажмите кнопку «Далее». 

Примечание!

Домен в данном поле заполняется автоматически из файла .env.


Настройка DNS

Если был выбран пункт «Настроить DNS» откроется мастер настройки DNS, все поля будут заполнены:


Обозначение полей
  • Имя зоны - по умолчанию заполняется автоматически именем используемого домена. Можно переименовать. Данное именя нельзя будет сменить в дальнейшем.
  • Домен - по умолчанию заполняется автоматически из файла .env.
  • TTL по умолчанию - продолжительность кэширования записи серверами и клиентами до её истечения. Значение измеряется в секундах.
Если был выбран пункт «Привязать к внешнему DNS серверу»
  • IP - адрес Вашего внешнего DNS сервера, который будет использоваться.
  • TSIG Ключ - содержимое файла, которое было сгенерировано на внешнем DNS сервере.

После заполнения всех полей нажмите кнопку «Далее».


Настройка Kerberos

Если НЕ была выбрана автоматическая генерация паролей для Kerberos

Если вы сняли галочку с пункта «Сгенерировать пароли для Kerberos автоматически», появится окно, в которое необходимо будет внести пароли для krbadmin и стэша.

  • Krbadmin - это служебная учетная запись сервера Kerberos. Она используется для взаимодействия с сервером LDAP. Данная учетная запись ограничена полномочиями и может управлять только своей выделенной областью в дереве LDAP.
  • Пароль stash, используется для защиты мастер ключа шифрования базы данных Kerberos. Вы можете выгрузить внесенные вами пароли в файл.

Требование к паролям:

  • Пароли должны быть более 7 символов;
  • Пароли не должны быть одинаковыми у krbadmin и стэша (они должны отличаться друг от друга);
  • Пароли должны содержать заглавные и строчные буквы (A-Z и a-z) и цифры (0-9).

После внесния паролей нажмите кнопку «Далее».

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


Требование к паролям:

  • Пароли должны быть более 7 символов;
  • Пароли должны содержать заглавные и строчные буквы (A-Z и a-z) и цифры (0-9).

Для продолжения нажмите кнопку «Далее». 


В появившемся окне проверьте правильность созданной учетной записи администратора:

  • UPN. 
  • Отображаемое имя. 
  • Email. 

Нажмите кнопку «Далее». 


Создание учетной записи администратора завершено. Вход в WEB-интерфейс MultiDirectory будет осуществлен автоматичекси.


Перезагрузка сервиса Bind9

В случае, если вы выбрали настройку DNS и не использовали привязку к внешнему DNS-серверу, после завершения настройки MultiDirectory и входа в web-интерфейс - необходимо перезапустить службу bind9, выполнив:

docker restart bind9

Обновление MultiDirectory

Чтобы обновить вашу MultiDirectory, ипользуйте следующие шаги:

Для Linux

Скачайте файл docker-compose.yml

wget https://github.com/MultiDirectoryLab/MultiDirectory/releases/download/v2.0.1/docker-compose.yml

Перезапустите контейнеры:

docker compose down; docker compose pull; docker compose up -d

Для Windows

Скачайте файл docker-compose.yml

wget https://github.com/MultiDirectoryLab/MultiDirectory/releases/download/v2.0.1/docker-compose.yml

Перезапустите контейнеры:

docker compose down; docker compose pull; docker compose up -d

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

Расширенное логирование

Если вы хотите,чтобы логи передавались в расширеном формате, то в файле .env укажите формат логирования:

DEBUG=1

После добавления расширенного логирования перезагрузите сервисы командой:

docker compose down; docker compose up -d

Проверка логирования контейнеров

Просматривать логи контейнеров вы можете обращаясь к контейнеру по его имени, или же по ID. Для просмотра имен и ID контейнеров воспользуйтесь командой:

docker ps

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

docker logs -f CONTAINER NAME # вместо CONTAINER NAME укажите имя контейнера, указанного в соответсвующим столбце.

Для просмотра логов по ID контейнера в реальном времени используйте команду:

docker logs -f CONTAINER ID # вместо CONTAINER NAME укажите имя контейнера, указанного в соответсвующим столбце.

Просмотр файлов логирования MultiDirectory

Файлы логирования MultiDirectory располагаются в каталоге /MultiDirectory/logs. Записываются 4 вида файлов логирования в следующем формате:

  • admin_dd-mm-yyyy.log - в данный файл ведется логирование действий в WEB-интерфейсе администратора.
  • kadmin_dd-mm-yyyy.log - в данный файл ведется логирование Kerberos (если он ранее был настроен).
  • ldap_dd-mm-yyyy.log - в данный файл ведется логирование действий по протоколам ldap и ldaps.
  • mfa_dd-mm-yyyy.log - в данный файл ведется логирование двухфакторной аутентификации (если ранее она была настроена).

Для просмотра файла логирования вы можете использовать команду:

tail -f admin_dd-mm-yyyy.log # файл admin используется как пример

Проверка версии MultiDirectory

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

Для проверки версии в web-интерфейсе нажмите на значек шестеренки и выберите пункт «Настройка MultiDirectory».


В открывшемся окне выберите пункт «О программе».

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

Для проверки версии MultiDirectory в контейнере Docker используйте команду:

docker image inspect ghcr.io/multidirectorylab/multidirectory | grep VERSION

Проверка версии при помощи API

Для проверки версии MultiDirectory через API перейдите по ссылке https://your-domain.ru/api/docs

примечание

Замените «your-domain.ru» на имя вашего домена.

Вопросы и ответы

В: Как обновить сертификаты Kerberos?

О: 1. Удалите старые сертификаты krbcert.pem и krbkey.pem в папке ../MultiDirectory/certs/.
2. Перезагрузите Вашу Multidirectory коммандой:

docker compose down; docker compose up -d

В: Контейнеры multidirectory-ldap-server-* не запускаются. В статусе висит «Error». Если вывожу лог с данного контейнера, то вижу следующую ошибку:

File "/app/ldap_protocol/server.py", line 176, in _read_acme_cert
raise acme_exc from err
SystemError: Let's Encrypt certificate not found. The `acme.json` file might not have been generated or lacks certificate details.
This can also occur if the certificate failed to generate for localhost, as Let's Encrypt only issues certificates for public domains.
Try deleting and recreating the `acme.json` file, or consider using a self-signed certificate for local environments or closed networks.

О: У Вас возникла проблема с генерацией сертификата. Для ее устранения выполните следущие шаги:

  • Перейдите в папку ../MultiDirectorty/
  • Выполните скрипт по генерации сертификата (замените поле «your-domain.ru» на имя вашего домена):
openssl req -nodes -new -x509 -keyout ./certs/privkey.pem -out ./certs/cert.pem -subj '/C=RU/ST=Moscow/L=Moscow/O=Global Security/OU=Multifactor/CN=your-domain.ru'