Установка сервера ADWS (пакет elles-ws)

Сервер ADWS elles-ws устанавливается на контроллере домена «Эллес».

Установка включает шаги:

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

Схема развертывания

elles-ws поддерживает развертывание только на одном хосте с контроллером домена «Эллес»:

elles ws deployment
Рис. 1. Схема развертывания elles-ws

Описание элементов схемы:

  1. Клиенты Windows c модулем ActiveDirectory для PowerShell в составе Remote Server Administration Tools (RSAT) отправляют TCP-запросы по протоколу net.tcp на порт 9389 контроллера домена.

  2. Сервер elles-ws реализует протоколы MC-NMF (.NET Message Framing Protocol), MS-NNS (.NET NegotiateStream Protocol) и WS-Transfer (в спецификации ADWS SOAP). Он аутентифицирует клиентов через SPNEGO/Kerberos, используя keytab-файл для служебной учетной записи.

  3. Для выполнения операций с каталогом elles-ws взаимодействует с «Эллес» по протоколу LDAP и делегирует сложные операции (аутентификация, чтение схемы, репликация, управление паролями) sidecar-процессам на Python, которые имеют прямой доступ к базе данных /app/inno-samba/private/sam.ldb.

  4. При развертывании на контроллере домена запускается скрипт, который автоматически создает служебную учетную запись и keytab-файл.

Список служебных учетных записей, используемых elles-ws:

Учетная запись Назначение

svc-elws

GSSAPI-аутентификация LDAP-соединений с «Эллес»

Предварительные требования

Перед установкой на контроллере домена «Эллес»:

  1. Убедитесь, что «Эллес» работает в режиме контроллера домена:

    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 ...
  2. Доступны следующие данные:

    • полное доменное имя (FQDN) контроллера домена;

    • DNS-имя домена;

    • NetBIOS-имя домена;

    • учетные данные пользователя с правами администратора домена (участник Domain Admins).

Установка пакета

Установите пакет elles-ws:

  • при установке из репозитория выполните:

    • Astra Linux

    • РЕД ОС

    sudo apt install elles-ws -y
    sudo dnf install elles-ws -y
  • при установке из архива укажите путь к распакованным файлам и имя пакета; например:

    • Astra Linux

    • РЕД ОС

    cd /path/to/package
    sudo apt install ./elles-ws_1.22.0-1_amd64.deb -y
    cd /path/to/package
    sudo dnf install ./elles-ws-1.22.0-1.x86_64.rpm -y

При установке пакета будут автоматически созданы:

Путь Назначение

/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: управление nTSecurityDescriptor

/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

Скрипт создания учетной записи svc-elws и keytab

/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)

Просмотр логов

Проверьте логи сервиса:

sudo journalctl -u elles-ws -f

Проверка с помощью скрипта health-check-dc.sh

Для полной проверки после установки и запуска выполните:

sudo /opt/elles-ws/usr/lib/elles-ws/health-check-dc.sh

Скрипт проверяет:

  1. [systemd elles-ws] — статус сервиса (active/inactive).

  2. [ELLES DC (inno-samba / :389)] — работает ли «Эллес» и принимает ли подключения на порту 389.

  3. [TCP ADWS :9389] — принимает ли elles-ws подключения на порту 9389.

  4. [HTTP health :9089] — возвращаются ли данные о сервисе при запросе к конечным точкам /health и /info.

  5. [LDAP bind] — проверяет GSSAPI (если ELWS_LDAP_AUTH=gssapi) или simple bind (если ELWS_LDAP_AUTH=simple);

  6. [DNS SRV _adws._tcp] — есть ли DNS-запись SRV для порта 9389.

  7. [Python sidecars] — запущены ли все sidecar-процессы.

При успешном завершении работы скрипта выводится обзорный блок с информацией по каждой проверке.

Возможные ошибки (скрипт возвращает FAIL):

Ошибка Причина

FAIL: not active

Сервис не запущен

FAIL: no :9389

Порт 9389 не слушается

FAIL: no health response

Запрос /health не возвращает {"ok":true}

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.

Проверочный чек-лист

  1. Пакет elles-ws установлен (dpkg -l elles-ws).

  2. svc-elws и keytab созданы (/etc/elles-ws/elws.keytab, права 0400).

  3. kinit -k -t /etc/elles-ws/elws.keytab svc-elws@<DOMAIN> без ошибок.

  4. ldapsearch -Y GSSAPI -H ldap://127.0.0.1 -b '' namingContexts возвращает namingContexts.

  5. /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.

  6. systemctl is-active elles-ws → active.

  7. ss -ltn | grep ':9389' → слушает.

  8. sudo /opt/elles-ws/usr/lib/elles-ws/health-check-dc.sh → все OK.

  9. Get-ADRootDSE -Server <DC_FQDN>:9389 на Windows-клиенте → OK.

  10. DNS SRV _adws._tcp.<DNS_DOMAIN> → существует и указывает на порт 9389.

Обновлено: