Установка сервера ADWS (пакет elles-ws)
Сервер ADWS elles-ws устанавливается на контроллере домена «Эллес».
Установка включает шаги:
Для проверки корректности установки используйте чек-лист.
Схема развертывания
elles-ws поддерживает развертывание только на одном хосте с контроллером домена «Эллес»:
Описание элементов схемы:
-
Клиенты Windows c модулем
ActiveDirectoryдля PowerShell в составе Remote Server Administration Tools (RSAT) отправляют TCP-запросы по протоколу net.tcp на порт 9389 контроллера домена. -
Сервер
elles-wsреализует протоколы MC-NMF (.NET Message Framing Protocol), MS-NNS (.NET NegotiateStream Protocol) и WS-Transfer (в спецификации ADWS SOAP). Он аутентифицирует клиентов через SPNEGO/Kerberos, используя keytab-файл для служебной учетной записи. -
Для выполнения операций с каталогом
elles-wsвзаимодействует с «Эллес» по протоколу LDAP и делегирует сложные операции (аутентификация, чтение схемы, репликация, управление паролями) sidecar-процессам на Python, которые имеют прямой доступ к базе данных /app/inno-samba/private/sam.ldb. -
При развертывании на контроллере домена запускается скрипт, который автоматически создает служебную учетную запись и keytab-файл.
Список служебных учетных записей, используемых elles-ws:
| Учетная запись | Назначение |
|---|---|
|
GSSAPI-аутентификация LDAP-соединений с «Эллес» |
Предварительные требования
Перед установкой на контроллере домена «Эллес»:
-
Убедитесь, что «Эллес» работает в режиме контроллера домена:
sudo systemctl status inno-samba.service
Ожидаемый вывод:
● inno-samba.service - Samba AD Daemon Loaded: loaded (/lib/systemd/system/inno-samba.service; enabled; vendor preset: enabled) Active: active (running) since ... -
Доступны следующие данные:
-
полное доменное имя (FQDN) контроллера домена;
-
DNS-имя домена;
-
NetBIOS-имя домена;
-
учетные данные пользователя с правами администратора домена (участник
Domain Admins).
-
Установка пакета
Установите пакет elles-ws:
-
при установке из репозитория выполните:
-
при установке из архива укажите путь к распакованным файлам и имя пакета; например:
При установке пакета будут автоматически созданы:
| Путь | Назначение |
|---|---|
/opt/elles-ws/usr/lib/elles-ws/elles-ws |
Основной бинарный файл сервера ADWS |
/opt/elles-ws/usr/lib/elles-ws/gensec-worker.py |
Sidecar: аутентификация (SPNEGO/Kerberos) |
/opt/elles-ws/usr/lib/elles-ws/schema-worker.py |
Sidecar: чтение схемы LDAP |
/opt/elles-ws/usr/lib/elles-ws/repl-worker.py |
Sidecar: репликация (DS-Replication) |
/opt/elles-ws/usr/lib/elles-ws/password-worker.py |
Sidecar: управление паролями |
/opt/elles-ws/usr/lib/elles-ws/sd-worker.py |
Sidecar: управление |
/opt/elles-ws/usr/lib/elles-ws/ldap-writer-worker.py |
Sidecar: операции записи в LDAP |
/opt/elles-ws/usr/lib/elles-ws/py/elws/ |
Python-библиотеки для sidecar-процессов |
/opt/elles-ws/usr/bin/elles-ws |
Запускающий скрипт |
/opt/elles-ws/etc/default/elles-ws |
Конфигурационный файл |
/lib/systemd/system/elles-ws.service |
Systemd-юнит |
/opt/elles-ws/usr/lib/elles-ws/setup-svc-elws-keytab.sh |
Скрипт создания учетной записи |
/opt/elles-ws/usr/lib/elles-ws/health-check-dc.sh |
Скрипт проверки работоспособности |
Настройка после установки
После установки пакета:
-
запустите скрипт для создания служебной учетной записи и keytab-файла для нее;
-
отредактируйте конфигурацию в файле /opt/elles-ws/etc/default/elles-ws;
-
проверьте работоспособность keytab.
Создание служебной учетной записи и keytab
Выполните скрипт на контроллере домена «Эллес», заменив значения на актуальные для вашей среды:
sudo ELWS_REALM=EXAMPLE.COM \
ELWS_DOMAIN=EXAMPLE \
ELWS_ADMIN_UPN=Administrator@EXAMPLE.COM \
ELWS_ADMIN_PASSWORD='your_admin_password' \
/opt/elles-ws/usr/lib/elles-ws/setup-svc-elws-keytab.sh
Переменные окружения для запуска скрипта:
-
обязательные:
-
ELWS_REALM— DNS-имя домена; -
ELWS_DOMAIN— NetBIOS-имя; -
ELWS_ADMIN_UPN— имя учетной записи с правами администратора домена в формате UPN;
-
-
необязательные:
-
ELWS_SVC_USER— имя служебной учетной записи (по умолчанию:svc-elws); -
ELWS_KEYTAB_PATH— путь к создаваемому keytab-файлу (по умолчанию: /etc/elles-ws/elws.keytab); -
ELWS_DC_FQDN— FQDN контроллера домена (по умолчанию: результат выполнения командыhostname -f); -
ELWS_SAM_LDB— путь к базе данных «Эллес» (по умолчанию: /app/inno-samba/private/sam.ldb); -
ELWS_SVC_PASSWORD— пароль служебной учетной записи (генерируется случайно, если не задан).
-
В результате работы скрипта создаются:
-
учетная запись
svc-elwsс неограниченным сроком действия пароля; -
keytab-файл /etc/elles-ws/elws.keytab, содержащий закрытые ключи для GSSAPI-аутентификации в LDAP.
После генерации keytab:
-
проверьте права на файл:
sudo ls -l /etc/elles-ws/elws.keytab
Ожидаемый вывод —
0400. -
запросите билет Kerberos от имени созданной учетной записи и выполните тестовый поисковый LDAP-запрос (для использования
ldapsearchтребуется установленный пакет ldap-utils):sudo kinit -k -t /etc/elles-ws/elws.keytab svc-elws@EXAMPLE.COM && \ ldapsearch -Y GSSAPI -H ldap://127.0.0.1 -b '' namingContexts
Ожидается, что
kinitвыполняется без ошибок и в выводеldapsearchестьnamingContexts.
Если файл /etc/elles-ws/elws.keytab уже существует, генерация пропускается.
Настройка конфигурации
Процесс установки адаптирует конфигурационный файл /opt/elles-ws/etc/default/elles-ws под конкретную среду:
-
подставляется имя Kerberos realm из вывода
samba-tool domain info 127.0.0.1; -
подставляется полное доменное имя (FQDN) хоста из вывода
hostname -f.
Проверьте и при необходимости отредактируйте конфигурационный файл, заменив значения на актуальные для вашей среды и задав требуемые параметры аутентификации.
По умолчанию в шаблонной конфигурации настроена простая аутентификация по паролю (ELWS_LDAP_AUTH=simple). Для нее требуется указать имя пользователя в формате UPN с достаточными правами в переменной ELWS_LDAP_BIND_DN и пароль пользователя в переменной ELWS_LDAP_BIND_PASSWORD.
Данный вариант аутентификации предназначен исключительно для целей тестирования. В условиях штатной эксплуатации рекомендуется во всех случаях использовать аутентификацию Kerberos (требуется закомментировать или удалить переменную ELWS_LDAP_BIND_PASSWORD).
Пример минимальной конфигурации для аутентификации Kerberos с использованием служебной учетной записи и keytab-файла, созданных скриптом setup-svc-elws-keytab.sh:
ELWS_LISTEN=0.0.0.0:9389
ELWS_HEALTH=127.0.0.1:9089
ELWS_LDAP_URL=ldap://127.0.0.1:389
ELWS_LDAP_AUTH=gssapi
ELWS_LDAP_BIND_DN=svc-elws@EXAMPLE.COM
ELWS_KRB5_PRINCIPAL=svc-elws@EXAMPLE.COM
ELWS_LDAP_KEYTAB=/etc/elles-ws/elws.keytab
ELWS_LDAP_GSSAPI_SERVICE=ldap/dc01.example.com
ELWS_CALLER_ACL=enforce
ELWS_IMPERSONATE=ldap
Описание параметров:
-
ELWS_LISTEN— TCP-адрес и порт, на котором принимает подключения сервер ADWS (обязательно9389для совместимости с RSAT); -
ELWS_HEALTH— конечная точка HTTP для мониторинга (/health,/info); -
ELWS_LDAP_URL— URL LDAP-сервера;При использовании значения
ldap://127.0.0.1:389проверьте, что порт 389 доступен для подключений не только на IP-адресе сервера контроллера домена, но и наlocalhost:ss -tuln | grep ':389'
При необходимости добавьте
127.0.0.1в параметрinterfacesв конфигурации «Эллес» в smb.conf. -
ELWS_LDAP_AUTH— метод аутентификации LDAP (обязательноgssapiдля аутентификации с keytab); -
ELWS_LDAP_BIND_DN— UPN служебной учетной записиsvc-elwsв домене; -
ELWS_KRB5_PRINCIPAL— должен совпадать сELWS_LDAP_BIND_DN; -
ELWS_LDAP_KEYTAB— путь к keytab-файлу, содержащему ключи для GSSAPI-аутентификации (при генерации скриптом: /etc/elles-ws/elws.keytab); -
ELWS_LDAP_GSSAPI_SERVICE— SPN для GSSAPI bind (ldap/<DC_FQDN>, где<DC_FQDN>— FQDN контроллера домена); -
ELWS_CALLER_ACL— политика контроля доступа (обязательноenforceдля полной совместимости с RSAT); -
ELWS_IMPERSONATE— режим делегирования операций записи (обязательноldapдля полной совместимости с RSAT).После установки пакета значение
ELWS_IMPERSONATE=off— безопасный режим по умолчанию. Для полной совместимости с RSAT необходимо установитьELWS_IMPERSONATE=ldapиELWS_CALLER_ACL=enforce.
| См. полное описание доступных переменных в разделе «Настройка сервера ADWS elles-ws с использованием конфигурационного файла». |
Запуск и проверка работоспособности
После завершения настройки разблокируйте и запустите сервис elles-ws:
sudo systemctl daemon-reload sudo systemctl enable elles-ws.service sudo systemctl restart elles-ws.service
Проверьте статус сервиса elles-ws:
sudo systemctl status elles-ws.service --no-pager
Ожидаемый вывод:
● elles-ws.service - Active Directory Web Services for ELLES DC (:9389) Active: active (running)
Проверка с помощью скрипта health-check-dc.sh
Для полной проверки после установки и запуска выполните:
sudo /opt/elles-ws/usr/lib/elles-ws/health-check-dc.sh
Скрипт проверяет:
-
[systemd elles-ws] — статус сервиса (active/inactive).
-
[ELLES DC (inno-samba / :389)] — работает ли «Эллес» и принимает ли подключения на порту 389.
-
[TCP ADWS :9389] — принимает ли
elles-wsподключения на порту 9389. -
[HTTP health :9089] — возвращаются ли данные о сервисе при запросе к конечным точкам
/healthи/info. -
[LDAP bind] — проверяет GSSAPI (если
ELWS_LDAP_AUTH=gssapi) или simple bind (еслиELWS_LDAP_AUTH=simple); -
[DNS SRV _adws._tcp] — есть ли DNS-запись SRV для порта 9389.
-
[Python sidecars] — запущены ли все sidecar-процессы.
При успешном завершении работы скрипта выводится обзорный блок с информацией по каждой проверке.
Возможные ошибки (скрипт возвращает FAIL):
| Ошибка | Причина |
|---|---|
FAIL: not active |
Сервис не запущен |
FAIL: no :9389 |
Порт 9389 не слушается |
FAIL: no health response |
Запрос |
FAIL: GSSAPI ldapsearch failed (check keytab + ELWS_LDAP_GSSAPI_SERVICE) |
GSSAPI-аутентификация не проходит |
FAIL: no sidecars (wait 15s after restart?) |
Sidecar-процессы не запущены |
WARN: no _adws._tcp SRV |
Отсутствует DNS-запись SRV (добавьте по инструкции) |
Первая проверка на Windows-клиенте с RSAT
После успешного прохождения проверок в скрипте health-check-dc.sh выполните на Windows-клиенте с установленным набором компонентов RSAT:
Import-Module ActiveDirectory Get-ADRootDSE -Server <DC_FQDN>:9389 Get-ADDomain -Server <DC_FQDN>:9389 Get-ADUser -Identity Administrator -Server <DC_FQDN>:9389
В командлетах <DC_FQDN> — FQDN контроллера домена «Эллес», на котором развернут сервер elles-ws.
| См. полный список поддерживаемых командлетов в разделе «Работа с elles-ws». |
Ожидаемый результат: все команды возвращают данные без ошибок.
Если возникает ошибка "unable to contact server":
-
убедитесь, что
<DC_FQDN>разрешается в IP-адрес контроллера доменаResolve-DnsName <DC_FQDN> -
проверьте доступность порта 9389:
Test-NetConnection <DC_FQDN> -Port 9389 -
убедитесь, что время на клиенте и сервере синхронизировано (Kerberos требует расхождения <5 минут).
Настройка DNS SRV _adws._tcp (при необходимости)
Для корректной работы RSAT необходимо наличие DNS SRV-записи _adws._tcp.<domain>, указывающей на порт 9389.
Если запись отсутствует (в выводе скрипта health-check-dc.sh в соответствующем блоке содержится предупреждение), добавьте ее командой на контроллере домена «Эллес»:
samba-tool dns add 127.0.0.1 <DNS_DOMAIN> _adws._tcp SRV "<DC_FQDN> 9389 0 100" -U Administrator
В команде:
-
DNS_DOMAIN— DNS-имя домена; -
DC_FQDN— FQDN контроллера домена.
Проверьте запись любым доступным способом. Например:
-
с помощью
samba-tool:samba-tool dns query 127.0.0.1 <DNS_DOMAIN> _adws._tcp SRV -U Administrator
-
с помощью утилиты
dig:dig +short _adws._tcp.<DNS_DOMAIN> SRV
Пример записи:
_adws._tcp.EXAMPLE.COM. IN SRV 0 100 9389 dc01.example.com.
Проверочный чек-лист
-
Пакет elles-ws установлен (
dpkg -l elles-ws). -
svc-elwsи keytab созданы (/etc/elles-ws/elws.keytab, права0400). -
kinit -k -t /etc/elles-ws/elws.keytab svc-elws@<DOMAIN>без ошибок. -
ldapsearch -Y GSSAPI -H ldap://127.0.0.1 -b '' namingContextsвозвращаетnamingContexts. -
/opt/elles-ws/etc/default/elles-ws:
ELWS_LDAP_AUTH=gssapi,ELWS_LDAP_BIND_DN=svc-elws@<DOMAIN>,ELWS_LDAP_KEYTAB=/etc/elles-ws/elws.keytab,ELWS_LDAP_GSSAPI_SERVICE=ldap/<DC_FQDN>,ELWS_CALLER_ACL=enforce,ELWS_IMPERSONATE=ldap. -
systemctl is-active elles-ws→ active. -
ss -ltn | grep ':9389'→ слушает. -
sudo /opt/elles-ws/usr/lib/elles-ws/health-check-dc.sh→ все OK. -
Get-ADRootDSE -Server <DC_FQDN>:9389на Windows-клиенте → OK. -
DNS SRV
_adws._tcp.<DNS_DOMAIN>→ существует и указывает на порт 9389.
Обновлено: