← Документация Hope·HopeDChopedc.ru
HopeDC · Документация

Руководство администратора

Начало работы, описание разделов интерфейса и особенности эксплуатации
Документ 2 из 4 · Версия 1.73 · 10.11.2026 · соответствует HopeDC v202
Аудитория: администраторы домена и инфраструктуры
Интерфейс: Admin Center (веб), русский / английский

Содержание

  1. Начало работы
    1. Первый вход и смена пароля
    2. Восстановление доступа к панели
    3. Путеводитель: «Начало работы» и подсказки
  2. Обзор DC (дашборд)
  3. Интеграция с AD
  4. Домены и рабочая область домена
    1. Структура домена
    2. Контроллеры домена (OU Domain Controllers)
    3. Групповые политики (Windows GPO)
    4. Политики Linux
    5. Сайты и службы (site-to-site)
    6. DNS‑сервер зоны
    7. DHCP‑сервер зоны
    8. Центр сертификации
    9. Доверие (Trusts)
    10. Интеграция (AD/LDAP)
    11. Свойства домена
    12. Делегирование
    13. Поддомены и лес
    14. Региональные серверы дочерних доменов
    15. Ключи Kerberos домена (смена krbtgt)
    16. Политика паролей, PSO и вход по компьютерам
  5. Службы: DNS и DHCP (глобально)
  6. Безопасность: Учётные записи, Роли, Сетевой доступ
  7. Настройки: Лицензия, Резервное копирование, Логирование, Кластер
    1. Лицензия и версии
    2. Резервное копирование
    3. Шифрование данных на диске и мастер‑ключ
    4. Логирование
    5. Журнал безопасности (v164)
    6. Кластер (HA) и его вкладки
    7. Контроллеры: установка и обновление по SSH
    8. Описание API (v165)
    9. Обновления
  8. Ключевые особенности продукта
  9. Astra Linux SE: МКЦ, МРД, ЗПС

1. Начало работы

Откройте веб‑интерфейс (Admin Center) в браузере и войдите под учётной записью панели. По умолчанию: admin / Admin123!. Это учётная запись панели администрирования, она отличается от доменной учётки Administrator.

Первый вход и смена пароля

Пока заводской пароль не сменён, на странице входа показывается информационный блок с учётными данными по умолчанию. При первом входе под admin панель сразу требует задать новый пароль (не короче 8 символов) — работать с заводским паролем нельзя. После смены информационный блок на странице входа больше не показывается.

Закрытие панели при простое (v129). Сессия администратора закрывается после 30 минут без действий — следующий запрос получает отказ, и панель возвращается на экран входа. Это как в Hope Mail Server и Hope MSG Gateway. Активность — это действия оператора (мышь, клавиатура); фоновые автообновления страниц и опрос прав сессию не продлевают, поэтому открытая на мониторе панель с автообновлением всё равно «засыпает». Кнопка «Выход» отзывает текущий токен на сервере сразу, не дожидаясь истечения его срока (сутки). Тайм-аут меняется переменной окружения HOPEDC_ADMIN_IDLE_SECS (в секундах, не меньше 60). Отметки активности хранятся на сервере в admin_sessions.json, поэтому перезапуск службы не «оживляет» простаивающие сессии. Токены веб-доступа это не затрагивает — только вход в административную панель.

Восстановление доступа к панели

Ссылка «Забыли пароль?» на странице входа открывает два способа:

Аварийный токен проверяется вшитым ключом вендора, действует только для этого сервера, ограничен по сроку и применяется один раз. Пароль admin становится тем, что указан в токене; если учётную запись admin удалили, она создаётся заново с ролью «Администратор». Сразу после входа смените пароль.

Двухфакторная аутентификация (MFA/TOTP) (v174)

Второй фактор — одноразовый код из приложения-аутентификатора (TOTP, RFC 6238: Google Authenticator, FreeOTP, Яндекс.Ключ и т. п.). Применяется при входе в веб-панель и при LDAP simple bind. Вход в саму ОС по Kerberos/NTLM вторым фактором не затрагивается (протокол не предусматривает ввод кода в окне входа Windows); для входа в ОС вторым фактором служат смарт-карты/PKINIT (v167).

Раздел «Двухфакторная (MFA)» в меню. Самообслуживание (любой вошедший): «Включить второй фактор» → отсканировать QR (или ввести секрет вручную) → подтвердить кодом → сохранить одноразовые резервные коды (показываются один раз). Отключение — с подтверждением текущим кодом.

Где и какПоведение
Вход в панельПосле пароля панель спрашивает код. Неверный код — вход отклонён. Можно ввести резервный код (одноразовый).
LDAP simple bindПароль привязки = пароль + 6-значный код (как у VPN/прокси, что аутентифицируются через LDAP). Без кода или с неверным — «Invalid credentials» (неверный код считается неверной попыткой для блокировки; сквозная проверка через AD при этом не выполняется). v184: при включённом флаге политики «Требовать и при LDAP-входе приложений» учётке из списка или групп политики, у которой второй фактор ещё не настроен, LDAP-вход по одному паролю запрещён (data 52e с пояснением); исключения — сервисные учётки приложений из списка исключений, компьютеры и служебные учётки HopeDC.
Портал /password (v184)Вкладка «Второй фактор (MFA)»: пользователь домена, не входящий в панель, вводит имя и пароль, сканирует QR-код, подтверждает код и сохраняет резервные коды. Ссылка сразу на вкладку: https://<DC>:9443/password?mfa=1. Если второй фактор уже настроен, перепривязать его можно только после сброса администратором. Событие журнала безопасности 9110.
Вход в ОС (Kerberos/NTLM)Не меняется — только пароль (или смарт-карта). MFA на него не влияет.

Политика и управление (администратор). Можно требовать второй фактор: для всех администраторов, для перечисленных учёток или для групп (по DN). Если MFA требуется, но у учётки ещё не настроена, после входа по паролю открывается только страница привязки второго фактора (без меню) — остальные разделы панели и их API недоступны (сервер отвечает 403, код mfa_enroll_required), пока пользователь не подтвердит первый код и не сохранит резервные коды. Заблокировать себя так нельзя: войти и привязать приложение можно всегда, а на странице есть кнопка «Выйти». Политика действует и на уже открытые сеансы — не позже чем через 15 секунд. Обязательную MFA пользователь сам не отключает: при утере телефона её сбрасывает администратор. (v183; раньше обязательность была только подсказкой.)

Для доменных учёток, не входящих в панель (им нужен только LDAP-bind с кодом), администратор назначает MFA: панель генерирует секрет, QR и резервные коды — их передают пользователю. При утере устройства администратор снимает MFA с учётки (кнопка «✕» у учётки или «Снять»), после чего вход снова идёт обычным образом — так пользователь не остаётся заблокированным.

Секреты TOTP и резервные коды хранятся зашифрованными (резервные коды — в виде bcrypt-хэшей). v184 — кластер: политика MFA хранится в каталоге (атрибут hopeMfaPolicy основного домена), привязка доменной учётки — на её объекте (hopeMfa: секрет TOTP и хэши резервных кодов); оба реплицируются на все узлы, поэтому второй фактор, настроенный на одном узле, действует на всех. Атрибут hopeMfa не отдаётся ни по LDAP, ни через API, менять его напрямую нельзя; RODC получает его только для учёток, которым разрешено кэшировать пароль. Встроенные учётки панели (свои на каждом узле) по-прежнему хранят привязку в файле узла mfa.json. При обновлении записи доменных учёток и политика переносятся из mfa.json автоматически (политики разных узлов объединяются). Управление политикой — право «Двухфакторная (MFA): политика и назначение» (mfa.view/mfa.edit; раньше — только полный доступ).
Проверено на стенде: привязка и подтверждение кодом, вход в панель с кодом/без кода/с неверным кодом, LDAP bind «пароль+код», назначение и снятие MFA администратором, требование по политике. Подтверждено, что вход в ОС по Kerberos для учётки с включённой MFA продолжает работать по паролю.

Портал смены пароля для пользователей (v175)

Отдельная страница для пользователей домена: https://<адрес DC>:9443/password. Пользователь меняет свой пароль, зная текущий — когда срок действия истёк, когда администратор отметил «сменить при следующем входе» или просто по желанию. Входить в панель администратора не нужно, сама панель на этой странице не загружается.

Сетевой доступ. Страница доступна адресам из списка панели или из списка клиентов домена (раздел «Сетевой доступ»). Так пользователи из своих подсетей дойдут до неё, даже если панель администратора закрыта для них. Если список клиентов домена выключен (открыт всем), страница тоже открыта всем — как и вход по Kerberos/LDAP.

Ссылку можно дать пользователям напрямую; к ней можно добавить имя: /password?user=ivanov@corp.local. Кнопка «Сменить пароль пользователя домена» на странице входа панели тоже ведёт сюда.

Проверено на стенде: смена пароля через портал — после неё вход по Kerberos проходит с новым паролем, старый отклоняется, вход других пользователей не затронут; неверный текущий пароль; учётка с MFA (без кода — запрос кода, неверный код — отказ, верный — смена); события 4723; поведение со списками сетевого доступа; ограничение частоты.

Путеводитель: «Начало работы» и подсказки (v153)

В панель встроен путеводитель, который ведёт оператора с первого входа. У него две части.

1. Панель «Начало работы» — чек-лист первичной настройки сервера. Кнопка «Начало работы N/M» находится в шапке панели (и в шапке рабочей области домена), N/M — сколько обязательных пунктов выполнено. При первом входе полного администратора панель открывается сама. Каждый пункт объясняет, зачем он нужен и где настраивается; кнопка «Перейти» открывает нужный раздел.

ПунктКогда считается выполненным
Домен организацииСоздан собственный домен (не демо hope.local) или подключён существующий каталог
Копия мастер-ключаМастер-ключ хотя бы раз скачан из панели (Резервное копирование)
Резервное копированиеВключено расписание резервных копий
Время (NTP)Включена служба NTP
DNS-пересылкаЗадан DNS-форвардер (домен → вкладка DNS-сервер)
Центр сертификацииВыпущен корневой сертификат ЦС домена
Учётные записи панелиКроме admin заведена ещё хотя бы одна учётка панели
Сетевой доступВключён белый список адресов панели и в нём есть записи
Клиенты в доменеВ собственном домене есть хотя бы один компьютер (кроме контроллеров)
Лицензия (необязательно)Загружена действующая лицензия
Кластер HA (необязательно)Кластер включён и в нём есть узлы

Состояние пунктов определяется по реальным настройкам сервера при каждом открытии панели — отмечать вручную ничего не нужно. Если пункт сделан иначе, чем проверяет панель (например, время синхронизируется внешним NTP, а резервные копии делает система бэкапа предприятия), полный администратор может нажать «Отметить». Ручные отметки общие для сервера; снимаются кнопкой «Снять отметку». Чек-лист виден только полному администратору панели (роль с полным доступом).

2. Подсказки по страницам — пошаговые экскурсии. При первом открытии каждого раздела (и каждой вкладки рабочей области домена) панель подсвечивает ключевые элементы страницы и в карточке объясняет, что с ними делать. Управление: Далее / Назад (или стрелки ←/→), Пропустить или Esc — закрыть подсказку этой страницы, «Не показывать подсказки» — выключить подсказки для своей учётной записи. Кнопка «?» в шапке в любой момент повторяет подсказку текущей страницы. Повторить все подсказки заново можно в панели «Начало работы» (ссылка внизу) — для этого же предназначено действие tours_reset.

Подсказки показываются всем пользователям панели, но только по тем разделам, которые разрешены их ролью. Прогресс (какие подсказки пройдены, выключены ли они, открывался ли чек-лист) хранится на сервере отдельно для каждой учётной записи — в файле onboarding.json каталога данных (зашифрован, как остальные настройки). Поэтому на другом компьютере или в другом браузере подсказки повторно не показываются, а у нового оператора начинаются сначала.

API. GET /api/onboarding возвращает состояние путеводителя текущей учётки (и чек-лист — для полного администратора). POST /api/onboarding с полем action: tour_done (+id), tours_reset, tours_off, tours_on, checklist_seen, mark (+id, done; только полный администратор).

Первые шаги после установки

Тот же порядок ведёт панель «Начало работы» (см. выше).

  1. Задайте свой пароль панельного admin — панель потребует это при первом входе.
  2. Смените пароль доменного Administrator — Домены → hope.local → Структура домена.
  3. При необходимости настройте Сетевой доступ (белый список IP клиентов домена).
  4. Для работы с существующим доменом Microsoft AD настройте Интеграцию.
  5. Загрузите лицензию (раздел Лицензия), если требуется снять ограничения.
  6. Сохраните копию мастер‑ключа шифрования: Резервное копирование → «Скачать мастер‑ключ (под паролем)» (см. раздел 7). Без него базу и бэкапы не восстановить.
Язык и тема интерфейса (v202). В шапке (в т.ч. в панели домена) — переключатель темы ☀ светлая / ☾ тёмная / 🖥 как в системе и переключатель языка RU / EN. Это личные настройки каждой учётной записи панели: они сохраняются на сервере и восстанавливаются при входе с любого браузера, поэтому у каждого администратора свои тема и язык. Если тему ещё не выбирали — светлая; язык при первом входе запоминается тот, с которым вошли. Настройки хранятся на узле, где их выбрали.
Навигация. Левое меню сворачивается в узкую панель‑иконки (кнопка сворачивания). Меню домена сворачивается аналогично. Многие разделы имеют изменяемую мышью ширину боковых панелей.

2. Обзор DC (дашборд)

Стартовый раздел «Обзор DC» показывает сводное состояние контроллера домена: активные службы, число объектов каталога, состояние интеграции и репликации. Используйте его как точку быстрой проверки «всё ли в норме» перед началом работ. Право доступа: dashboard.view.

3. Интеграция с AD

Глобальный раздел интеграции описывает подключение HopeDC к существующему домену Microsoft Active Directory: параметры контроллера‑источника (PDC), учётную запись и режим синхронизации. После настройки HopeDC зеркалирует объекты домена AD в собственный каталог и может служить дополнительным узлом обслуживания клиентов.

Параметры синхронизации задаются для каждого домена на его вкладке «Интеграция (AD/LDAP)» (см. п.4.9). Глобальный раздел даёт общую точку входа и статус.

4. Домены и рабочая область домена

Раздел Домены — центральный. Здесь перечислены все домены, которыми управляет HopeDC (локальные и интегрированные). Возможности списка:

Несколько доменов на одном сервере. HopeDC отвечает каждому клиенту от имени его домена: имя, NetBIOS-имя, SID и доверия (LSA, NETLOGON, SAMR), а также defaultNamingContext и dnsHostName в RootDSE определяются по учётной записи, которой клиент вошёл (компьютер или пользователь), а для защищённого канала NETLOGON — по учётной записи компьютера. Если домен клиента определить нельзя (анонимный запрос, LDAP-ping без имени домена), используется основной домен сервера: самый старый собственный корневой домен (собственные домены — раньше интегрированных с AD, корни лесов — раньше поддоменов). Создание или удаление другого домена на сервере не меняет поведение для клиентов существующих доменов. Пароли учётных записей компьютеров (смена пароля машины, ввод в домен) записываются в учётную запись именно её домена, ключи Kerberos вычисляются по realm этого домена. Разрешение имён (DsCrackNames — окна выбора пользователей и групп Windows) учитывает домен: имя с доменом (HOPE\user, user@lol.local) ищется только в этом домене, короткое имя — сначала в домене клиента, а в другом домене — только если оно единственное на сервере. Поэтому одноимённые учётные записи в разных доменах (например, Administrator) не путаются.
Изоляция доменов разных лесов. Домены разных лесов, размещённые на одном сервере HopeDC, изолированы друг от друга так же, как отдельные леса AD без доверия. Учётная запись домена видит по LDAP и в Global Catalog (окно выбора объектов Windows, «Весь каталог») только домены своего леса, а имена и SID другого леса для неё не разрешаются (DsCrackNames, LookupSids/LookupNames). Изменять объекты другого леса или добавлять их в свои группы по LDAP нельзя. Если другой домен доверяет домену учётной записи, его объекты доступны при явном выборе этого домена (в окне выбора — кнопка «Размещение»), но в поиск по всему каталогу не попадают. Поддомены одного леса видят друг друга. Веб-панель управления это не ограничивает: в ней действуют права ролей и делегирования. В рабочей области домена в веб-панели показываются только данные этого домена: групповые политики и их связи, политики Linux, DNS-записи (прямые зоны домена и PTR на его узлы), сертификаты и запросы ЦС. Стандартные политики (Default Domain Policy и др.) имеют одинаковый GUID во всех доменах, поэтому политика всегда редактируется с указанием домена. Полный администратор панели по-прежнему видит все домены в общих разделах; делегированные администраторы — только свои.
Общие для сервера настройки. Сервер пересылки DNS, а также включение/выключение служб DNS и DHCP относятся ко всему серверу, а не к одному домену (ключ TSIG и политика динамических обновлений с v123 задаются для каждого домена — см. 4.5). Они хранятся на основном домене сервера (самом старом собственном корневом домене) и не «переезжают» при добавлении новых доменов.
Служебные учётные записи HopeDC. В каждом собственном домене есть две служебные учётные записи. hopedc-ldap-svc хранит имена служб контроллера (SPN ldap/, GC/, cifs/, HOST/) и нужна для входа на сервер по Kerberos: ввод в домен, LDAP, общие папки. kadmin/changepw нужна службе смены пароля Kerberos (kpasswd, порт 464): ввод Linux в домен и смена паролей с Linux. В Active Directory эту роль играют учётная запись компьютера контроллера и krbtgt. Удалять и отключать эти учётные записи нельзя. В окне выбора объектов Windows, в «Пользователях и компьютерах» и в общих выборках пользователей по LDAP они не показываются, но находятся по имени службы, точному имени и прямому чтению. Ключ hopedc-ldap-svc меняется во вкладке Kerberos домена.
Особенность делегирования. Делегированный администратор видит в списке только «свои» домены (маркеры прав вида domain:<fqdn>). Полный администратор (право *) видит все домены.

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

4.1. Структура домена

Аналог «Active Directory Users and Computers». Слева — дерево OU/контейнеров (ширину можно тянуть мышью), справа — таблица объектов выбранного узла.

Перемещение объектов (v126). В собственных доменах HopeDC объект или целую OU можно перенести в другой контейнер: меняются DN всего поддерева, а ссылки на перенесённые объекты (членство в группах member/memberOf, manager, managedBy) обновляются автоматически. Для интегрированного домена перенос выполняется в MS AD; если связи с контроллером AD нет, панель сообщает об ошибке, а не переносит объект только локально. Пароль, заданный при создании пользователя, ставится именно созданной учётке (раньше при совпадении имени с объектом в другом контейнере мог уйти не туда).
Подтверждения и уведомления (v193). Запросы подтверждения (перемещение, удаление, сброс и т.п.) открываются окном панели с понятной кнопкой действия — опасные действия выделены красным; вместо системных окон браузера («Подтвердите действие на <адрес>»). Итог действия и ошибки показываются уведомлением в правом верхнем углу (зелёное — выполнено, красное — ошибка, жёлтое — предупреждение), оно закрывается само или крестиком. Запись контроллера домена и OU Domain Controllers при перетаскивании не перемещаются — панель сразу сообщает об этом, без запроса подтверждения.

Возможности

Право просмотра — dir.view. Удаление/перемещение реплицируется в MS AD для интегрированных доменов (при настроенной синхронизации).

Контроллеры домена: OU «Domain Controllers» (v192)

Как в MS AD, в каждом собственном домене HopeDC есть подразделение Domain Controllers, а в нём — учётная запись компьютера каждого контроллера HopeDC, который держит этот домен (метка «Контроллер домена» и значок сервера). Запись создаётся сама: при создании домена (любого вида — новый лес, поддомен, дерево), при запуске службы и в фоне раз в 2 минуты — так в OU появляются и узлы кластера, и региональные контроллеры. Имя записи — имя узла из «Кластер (HA)» (NetBIOS: латиница, цифры и дефис, до 15 символов); если узел переименован, запись переименовывается. Атрибуты — как у DC Windows: userAccountControl 532480 (учётная запись контроллера, доверенная для делегирования), первичная группа Domain Controllers (516), dNSHostName (hopedc.<домен>), operatingSystem «HopeDC» и версия. К OU привязана Default Domain Controllers Policy, в корне домена — wellKnownObjects на OU (как в AD).

4.2. Групповые политики (Windows GPO)

Управление объектами групповых политик Windows. Три вкладки:

Куда попадают политики. В собственном домене HopeDC клиенты получают политики с HopeDC (LDAP + SYSVOL по SMB) — дополнительных компонентов не нужно. В домене‑зеркале MS AD параметры политик клиенты получают из SYSVOL контроллеров AD; изменения параметров в HopeDC в AD не передаются (панель предупреждает об этом) — настраивайте их в GPMC на контроллере AD. Пошагово, включая перевод домена из AD в HopeDC, — Документ 12 «Групповые политики Windows: HopeDC и MS AD».

4.3. Политики Linux

Пошаговые инструкции: ввод Linux‑машин в домен — Документ 10, настройка и доставка политик — Документ 11.

Каталог шаблонов политик Linux доступен и из главного меню — пункт «Каталог шаблонов» под «Домены» (с выбором домена), см. Документ 11.

Гибридное управление политиками для Linux‑клиентов. Часть читает штатный SSSD, часть применяет агент hopedc-agent. Вкладки:

Общая папка (SMB). Тип политики машины smb публикует сетевую папку доменной группе на Linux‑файловом сервере. В форме задаются: имя шары, путь на сервере, доменная группа доступа, режим (чтение‑запись/только чтение), гостевой доступ и описание. Агент на целевой машине ставит Samba (если её нет), приводит smb.conf к member‑конфигу с ID‑маппингом из SSSD (владельцы файлов совпадают с id/getent), создаёт каталог с setgid и ACL для группы и отдаёт шару по valid users = @«Группа». С Windows папка открывается прозрачно (по билету Kerberos текущего пользователя), доступ — по членству в группе. SPN cifs/<host> для SSO регистрируется в каталоге автоматически при вводе машины в домен (HopeDC добавляет cifs/<host> к каждому host/<host> машинного аккаунта); ключ в host‑keytab кладёт adcli/net ads на самой машине.
Служебная OU. Все объекты политик Linux складываются в служебную OU Linux Policys, которая создаётся автоматически при создании первого правила. В «Структуре домена» эти объекты по умолчанию скрыты как сервисные.

Поля выбора групп/машин/OU реализованы как поиск с фильтрацией — корректно работают даже при тысячах групп и хостов. Списки разделяют группы машин (содержат компьютеры) и группы пользователей; для машинных групп показывается состав по ОС (Linux/Windows).

4.4. Сайты и службы (Sites and Services)

Аналог консоли «Active Directory Sites and Services». Слева — дерево: Sites (сайты и их серверы), Subnets (подсети), Inter‑Site Transports → IP / SMTP (связи сайтов). Справа — обзор топологии и управление выбранным узлом.

Возможности

Локальный домен и интегрированный домен

Для локального домена HopeDC раздел ведёт собственную структуру сайтов (кнопка «Создать структуру сайтов» заводит контейнеры и Default‑First‑Site‑Name).

Для интегрированного домена (заданы параметры синхронизации с MS AD) раздел работает с Configuration NC реального AD: при синхронизации топология сайтов импортируется из `CN=Sites,CN=Configuration,…`, а изменения (создание/изменение/удаление сайтов, подсетей, связей) записываются обратно в AD — двусторонняя синхронизация. Об этом сообщает зелёный баннер в разделе.

Управление AD‑сайтами из веб‑интерфейса с двусторонней синхронизацией Configuration NC — отличительная возможность HopeDC: обычно AD‑сайты правят только через Windows‑RSAT/MMC. Право доступа к разделу — domains.view.

4.5. DNS‑сервер зоны

Управление записями DNS домена: дерево зон (как в консоли MS DNS) или плоская таблица; создание/редактирование записей A/AAAA/CNAME/MX/TXT/SRV/NS/PTR/SOA; форвардеры; TSIG‑ключ и политика динамических обновлений своего домена (см. ниже); кнопка «Структура AD» (засев служебных SRV/A/CNAME записей DC‑locator: _ldap._tcp, _kerberos, _gc, pdc, _msdcs, DomainDnsZones/ForestDnsZones); импорт зон из AD. Системные записи (SOA/NS/_*) защищены от удаления.

Динамические обновления (RFC 2136). TSIG‑ключ и политика задаются отдельно для каждого домена (атрибуты корня домена hopeTsigKeyName/hopeTsigAlgo/hopeTsigSecret, hopeDnsSecureUpdates); ключ одного домена не принимается для зон другого домена (ответ NOTAUTH). Подпись проверяется вместе со свежестью (окно fudge, не более 15 минут), ответ подписывается тем же ключом.

Псевдонимы CNAME (v130). Если у имени есть только CNAME, а спрашивают другой тип (A, AAAA, MX, SRV…), сервер отдаёт всю цепочку сразу — CNAME и конечные записи цели, как MS DNS и BIND (RFC 1034 §4.3.2): www.hope.local → web.hope.local → dc01.hope.local A 10.77.3.218. Цепочка разворачивается по всем зонам контроллера, не длиннее 8 звеньев; петли (a → b → a) обрываются с предупреждением в журнале. Если цель вне наших зон и клиент просил рекурсию, ответ на неё запрашивается у форвардера и добавляется к CNAME. Цель, которой нет в зоне, даёт NXDOMAIN вместе с CNAME (RFC 6604) — так видно, на каком звене обрыв. Запросы типа CNAME и ANY отдают сам CNAME без разворачивания.

Обновление с v1.16. Ранее единственный TSIG‑ключ хранился на основном домене — он остаётся за этим доменом. Остальным доменам, которым нужны безопасные обновления, создайте собственный ключ на их вкладке DNS.

4.6. DHCP‑сервер зоны

Управление пулами адресов (scope), диапазонами, шлюзом, DNS‑серверами, сроком аренды в контексте домена.

4.7. Центр сертификации

Внутренний удостоверяющий центр домена: выпуск и отзыв сертификатов, шаблоны, корневой сертификат и список отзыва (CRL). Используется, в частности, для выпуска клиентских сертификатов агента Linux (mTLS/SASL EXTERNAL). У каждого домена свой ЦС; домены разных лесов друг друга не видят.

Дата отзыва в CRL равна дате выпуска списка (точное время отзыва ранее не сохранялось). Пока в кластере есть узлы старше v123, связь с ними работает по закреплённому отпечатку (TOFU), как раньше.
Удаление сертификатов (v126). Удалить из списка можно только просроченный или отозванный сертификат — действующий сначала отзовите, иначе он продолжал бы работать, исчезнув из CRL. После удаления список отзыва переиздаётся. Удаление и отклонение запроса требуют подтверждения. Клиентский сертификат агента Linux (Политики Linux → Агент) выпускается этим же ЦС домена, сохраняется в списке сертификатов и содержит точки CDP/AIA — его можно отозвать как любой другой; выпуск доступен только для доменов в пределах прав роли.

4.8. Доверие (Trusts)

Управление доверительными отношениями домена с другими доменами/лесами: создание доверия (внешнее по паролю или внутрилесное), направление, SID filtering (карантин), выборочная аутентификация и суффиксы имён (TLN) для forest‑доверия. Пользователи доверенного домена проверяются по Kerberos‑PAC (подпись ключом доверия), а не биндом к чужому контроллеру.

Доверия, импортированные из AD: пароль доверия. Пароль (ключ) доверия AD по LDAP не передаётся — у таких доверий в колонке «DC партнёра» стоит «пароль не задан». Пока роль KDC домена у Windows-DC (домен интегрирован), Kerberos через доверие обслуживает AD, и пароль в HopeDC не нужен. Перед приёмом роли KDC или отключением Windows-DC задайте пароль: кнопка с ключом в строке доверия → «Пароль доверия и DC партнёра» (v154). HopeDC создаёт ключи Kerberos доверия по этому паролю; на стороне партнёра задайте тот же пароль (на DC партнёра: netdom trust <партнёр> /domain:<ваш домен> /resetOneSide /passwordT:<пароль>). Там же указывается адрес DC партнёра — он нужен для «Проверить связь» и входа в панель пользователей партнёра. Перечень доверий без пароля показывает проверка перед отключением Windows-DC (Интеграция → «Отключить от AD»).
Исправлено в v154: ключи от пустого пароля. В версиях до 154 при перезапуске службы для внешних доверий без пароля (импортированных из AD и созданных вручную без пароля) создавались ключи Kerberos от пустого пароля. v154 при первом запуске удаляет такие ключи (в журнале — «Удалены ключи доверий, созданные от пустого пароля») и больше их не создаёт. Ключи доверий с заданным паролем не затрагиваются. Если доверие без пароля должно работать через Kerberos HopeDC — задайте пароль, как описано выше.

Права в лесу: Enterprise Admins и Domain Admins

Модель прав повторяет Windows:

Защита от подмены прав. Атрибуты objectSid и sIDHistory по LDAP/панели не подделываются (первый назначает только контроллер, второй пишут лишь Enterprise Admins). Членство memberOf в группе другого домена учитывается, только если сама группа перечисляет объект в member — то есть его подтвердил администратор того домена.

4.9. Интеграция (AD/LDAP)

Вкладка зависит от состояния домена. Если домен ещё не интегрирован, на ней открывается мастер интеграции (источник каталога, адрес DC, LDAPS, необязательный отпечаток сертификата, учётные данные). Если интегрирован — панель интеграции:

Параметры синхронизации данного домена с внешним контроллером домена:

LDAPS в приоритете. Все подключения к контроллеру AD (интеграция, синхронизация, импорт DNS и доверий, проверка пароля) сначала пробуют LDAPS (636). Если LDAPS заработал, домен переводится на LDAPS навсегда — без отката на открытый LDAP. LDAP 389 используется, только если у DC нет LDAPS; в журнале тогда предупреждение «LDAPS (636) недоступен — используется LDAP 389 без шифрования». Если LDAPS у DC появится позже, синхронизация сама перейдёт на него. Сброс пароля пользователя в AD выполняется только по LDAPS.

Проверка подлинности контроллера AD (сертификат LDAPS)

HopeDC не просто шифрует канал к DC, а проверяет, что на другом конце — именно ваш контроллер. Иначе злоумышленник в сети мог бы подставить свой сертификат и получить пароль учётной записи синхронизации. Порядок проверки:

  1. ЦС AD. Цепочка сертификата DC строится до центра сертификации AD, при этом проверяются имя DC (dnsHostName контроллера или адрес подключения) и назначение «Проверка подлинности сервера». Сертификат другого компьютера домена, выпущенный тем же ЦС, не подходит. Сертификаты ЦС HopeDC сам берёт из конфигурации леса (CN=Public Key Services,CN=Services,CN=Configuration) после первого подтверждённого входа. Поэтому ежегодный перевыпуск сертификата DC проходит без действий администратора: новый отпечаток запоминается автоматически, в журнале — «сертификат DC перевыпущен (подтверждён ЦС AD)».
  2. Закреплённый отпечаток. Если ЦС AD не сохранён или сертификат DC выпущен не им (самоподписанный, сторонний ЦС), сравнивается SHA‑256 сертификата с закреплённым.
  3. Первое подключение. Если ничего не сохранено, сертификат принимается и закрепляется. В мастере интеграции показываются субъект, издатель, срок действия и SHA‑256. Сверьте отпечаток на самом DC, например в PowerShell:
    Get-ChildItem Cert:\LocalMachine\My | % { $_.Subject; [BitConverter]::ToString([Security.Cryptography.SHA256]::Create().ComputeHash($_.RawData)) }

Чтобы исключить даже первое непроверенное подключение, введите ожидаемый отпечаток в поле «Отпечаток сертификата LDAPS (необязательно)» мастера интеграции. Тогда HopeDC подключится только к DC с этим сертификатом.

Если сертификат не прошёл проверку, подключение отклоняется без перехода на LDAP 389 (иначе злоумышленнику было бы достаточно «сломать» порт 636). Синхронизация останавливается с ошибкой «сертификат DC не подтверждён», в журнале — оба отпечатка.

Где смотреть и управлять: «Домены» → домен → вкладка «Интеграция (AD/LDAP)» → блок «Сертификат LDAPS контроллера» (в сводке вверху вкладки — краткое состояние). Там видно:

Если DC предъявил другой сертификат, ниже появляется красный блок с его данными и кнопкой «Доверять этому сертификату». Нажимайте её только после сверки отпечатка на самом DC. В том же блоке можно задать отпечаток вручную или сбросить проверку: тогда следующее подключение закрепит сертификат заново. При смене адреса PDC в настройках проверка сбрасывается автоматически.

Двоичные атрибуты. Атрибуты двоичного синтаксиса из AD — сертификаты (userCertificate, cACertificate), фотографии (thumbnailPhoto, jpegPhoto), ms-DS-ConsistencyGuid и т. п. — переносятся при интеграции и синхронизации без потерь и отдаются LDAP-клиентам теми же байтами. objectGUID, дескрипторы безопасности и секреты не переносятся.
Кластер и доверия. Отпечаток, ЦС AD и имя DC хранятся во внутренних атрибутах реплицируемого корня домена, поэтому проверка одинакова на всех узлах кластера. По LDAP эти атрибуты не отдаются. Для DC доверенного домена (вход пользователей по внешнему доверию, импорт доверий) действует та же проверка; её данные хранятся в объекте доверия.
Несколько доменов. Каждый интегрированный домен синхронизируется в фоне по своему интервалу (hopeSyncInterval), независимо от других; ошибка связи с одним доменом не останавливает остальные.
Крупные домены MS AD (v199). MS AD без постраничной выдачи отдаёт не больше MaxPageSize объектов (по умолчанию 1000), а у многозначного атрибута — не больше MaxValRange значений (1500; у большой группы приходит member;range=0-1499). С v199 HopeDC выгружает объекты, зоны DNS и ответы синхронизации постранично (RFC 2696) и догружает остальные диапазоны значений, а неполный ответ AD считается ошибкой синхронизации, а не пропускается. До v199 домен больше 1000 объектов переносился не полностью, а у групп больше 1500 участников переносились только первые 1500. Проверить свой AD (только чтение): _diag\check_ad_limits199.ps1 -Server <DC>, после синхронизации — с -HopeDC <адрес>: скрипт сравнит число объектов и участников больших групп.
Поддерживаемые источники. Microsoft Active Directory и Samba AD DC — Samba AD DC schema‑совместим с AD (те же sAMAccountName, objectSid, memberOf, gPLink, Kerberos, SYSVOL), поэтому используется тот же путь импорта и входа. FreeIPA (v198) — в мастере подключения выберите источник «FreeIPA»; подробности и ограничения — ниже, в «Подключение FreeIPA». Произвольный LDAP‑каталог (OpenLDAP и совместимые) подключается так же, источником «LDAP».

Подключение FreeIPA (v198)

HopeDC переносит из FreeIPA пользователей, группы и хосты и дальше синхронизирует их по интервалу домена и кнопке «Синхронизировать сейчас». Схема FreeIPA (389‑DS + MIT Kerberos) отличается от AD, поэтому объекты приводятся к модели AD при импорте.

Что в FreeIPAЧто получается в HopeDC
Пользователь uid=…,cn=users,cn=accountsПользователь: sAMAccountName = uid, UPN uid@домен (из krbPrincipalName), ФИО, почта, должность, телефон, POSIX‑атрибуты (uidNumber, gidNumber, домашний каталог, оболочка)
Группа cn=…,cn=groups,cn=accountsГруппа с теми же участниками (member/memberOf) и gidNumber
Хост fqdn=…,cn=computers,cn=accountsКомпьютер ИМЯ$ с dNSHostName = полное имя
ipaNTSecurityIdentifier (есть при включённом ipa‑adtrust)objectSid; SID домена вычисляется по SID учёток
nsAccountLock: TRUE (ipa user-disable)Учётка отключена — вход через HopeDC отклоняется
Учётка или группа удалена в FreeIPAУдаляется и в HopeDC при следующей синхронизации (только объекты, пришедшие из FreeIPA, и только после полностью успешного прохода)

Подключение. Только LDAPS (636) с проверкой сертификата: при первом подключении отпечаток SHA‑256 закрепляется (сверьте его на сервере FreeIPA: openssl s_client -connect <ip>:636 </dev/null | openssl x509 -noout -fingerprint -sha256) или задаётся заранее. Учётная запись — например admin: короткое имя превращается в uid=admin,cn=users,cn=accounts,<база>. Выгрузка постраничная, поэтому ограничение 389‑DS на число записей в ответе (по умолчанию 2000) не мешает.

Пароли. Если учётка синхронизации может читать ipaNTHash (в FreeIPA его по умолчанию читают только служебные учётки доверия ipa‑adtrust — выдайте право на чтение, если нужно), NT‑хэш переносится сразу: работают NTLM и Kerberos RC4. Ключи krbPrincipalKey (формат MIT) не переносятся. Иначе пароль проверяется в FreeIPA при первом входе по LDAP или в панель (bind uid=…,cn=users,cn=accounts,… или имя@REALM) и сохраняется в HopeDC вместе с ключами AES.

Kerberos. Пока роль KDC не принята, билеты для реалма FreeIPA выдаёт сам FreeIPA. После «Принять роль KDC» билеты выдаёт HopeDC: пользователи с перенесённым NT‑хэшем входят по RC4 (ключи AES появятся после первого входа по LDAP или смены пароля), пользователи, проверенные при входе, — по AES.

Не переносятся: правила HBAC и sudo FreeIPA, группы хостов и netgroups, DNS‑зоны, сертификаты (Dogtag), OTP‑токены, ID views и политики паролей FreeIPA. Групповые политики Windows и SYSVOL к FreeIPA неприменимы.

Проверено на стенде (v198): 389 Directory Server 2.4 со схемой каталога FreeIPA из её исходного кода и структурой cn=accounts как у FreeIPA. Перенос пользователей, групп и хоста; SID; NT‑хэш; вход по LDAP с проверкой в источнике; отключённая учётка; изменения, новые и удалённые учётки при синхронизации; 2 100 пользователей при ограничении 389‑DS в 2000 записей; Kerberos после приёма роли KDC (RC4 по NT‑хэшу и AES). Полноценный сервер FreeIPA в стенде не запускался: права доступа (ACI) настоящего FreeIPA к ipaNTHash и вход по имя@REALM через SASL проверяются на живом FreeIPA.

Если домен ещё не подключён, открывается Мастер подключения к домену (целевой сервер → учётные данные → репликация → готово). Когда домен подключён, показывается статус «Подключено (Online)» и кнопка «Синхронизировать сейчас». Блоки «Параметры соединения», «Интервал синхронизации» и «Подключение Linux хостов к домену» — сворачиваемые (по умолчанию свёрнуты).

Вывод Windows‑DC из эксплуатации

Чтобы домен, интегрированный с MS AD, продолжил работать без контроллеров Windows, на панели интеграции есть карточка «Вывод Windows‑DC из эксплуатации» из трёх шагов.

  1. Роль KDC. Кнопка «Принять роль KDC» создаёт собственный ключ krbtgt HopeDC (RC4 и AES) и ключ службы LDAP ldap/hopedc.<домен>. Учётная запись krbtgt, пришедшая синхронизацией из AD, ключа не имеет (AD не отдаёт пароли по LDAP), поэтому ключ создаётся прямо в ней, без дублей. Синхронизация с AD продолжается и ключи HopeDC не затирает. С этого момента домен в переходном периоде: на вкладке «Ключи Kerberos» можно менять ключ krbtgt HopeDC; ключ krbtgt в AD независим и меняется в самой AD.
  2. Проверка готовности показывает, что помешает работе без Windows‑DC:
    • есть ли ключ krbtgt HopeDC;
    • сколько активных пользователей имеют пароль в HopeDC (и список тех, у кого его нет). Пароль попадает в HopeDC, когда пользователь хотя бы раз вошёл через HopeDC (сквозная проверка через AD, пока Windows‑DC работает) или когда пароль сброшен в HopeDC. Остальные после вывода Windows‑DC не войдут до сброса пароля;
    • сколько компьютеров имеют пароль учётной записи в HopeDC. Остальные компьютеры нужно заново ввести в домен (или сбросить их учётную запись);
    • DNS‑записи домена, указывающие на адрес Windows‑DC: после его вывода замените адрес на адрес HopeDC;
    • доверия без пароля в HopeDC: задайте пароль доверия, иначе доверие перестанет работать вместе с Windows‑DC;
    • (v181) файлы групповых политик в HopeDC: у скольких политик они есть, конфликты и расхождения версии GPT.INI. Файлы переносит синхронизация SYSVOL с контроллером AD по SMB (Документ 3, без агента); если она не включалась — вручную (Документ 12, раздел 5). При отключении HopeDC выполняет последнюю синхронизацию SYSVOL и выравнивает версии.
  3. Отключение от AD. Кнопка «Отключить от AD» (для подтверждения нужно ввести имя домена): если роль KDC ещё не принята, она принимается; синхронизация с AD останавливается, адрес PDC, учётные данные AD и данные проверки сертификата LDAPS удаляются; DNS‑записи, импортированные из AD, становятся собственными записями HopeDC. Домен становится собственным доменом HopeDC с отметкой «Мигрирован из AD» и датой. Отменить отключение нельзя: вернуть домен в AD можно только новой интеграцией (мастер интеграции).
После отключения смените krbtgt на вкладке «Ключи Kerberos»: ключ, созданный при приёме роли KDC, существовал, пока работали Windows‑DC. Первая смена после приёма роли выполняется сразу (предыдущего ключа нет, ждать 10 часов не нужно). Подсказка о смене пропадает после неё. Действия записываются в журнал: 🛡 Роль KDC домена … принята, 🏁 Домен … отключён от AD.
Два KDC. Пока Windows‑DC работают, у домена два KDC с разными ключами krbtgt: билет, выданный одним, другой не примет. Принимайте роль KDC, когда клиенты уже обращаются к HopeDC (DNS, настройки KDC), то есть в ходе вывода Windows‑DC.

Перенос паролей из AD при миграции (v166)

Чтобы пользователям не пришлось менять пароли при переходе на HopeDC, парольный материал учёток можно перенести заранее. По умолчанию пароль попадает в HopeDC только когда пользователь впервые входит через него (сквозная проверка через AD) или когда администратор сбрасывает пароль; перенос заполняет готовность сразу для всех. HopeDC по сети у контроллера AD ничего не считывает — он принимает файл, который администратор выгрузил на своём контроллере AD штатными средствами (у него есть на это права), и раскладывает значения по атрибутам тех же учёток, как он и так хранит их для собственных учётных записей.

Кнопка «Перенести пароли из AD» (значок ключа) у интегрированного домена открывает окно: вставьте выгрузку или загрузите файл, при необходимости включите «Заменять пароль и у учёток, у которых он уже есть». Кнопка «Проверить» показывает, что будет сделано, ничего не записывая; «Перенести» применяет. Файл нигде не сохраняется.

Строка файлаЧто переносится
имя:RID:LM:NT::: (формат NTDS)NT-хэш → unicodePwd: вход по NTLM (SMB), по Kerberos с etype RC4 и проверка пароля при входе по LDAP
имя:aes256-cts-hmac-sha1-96:ГЕКС (и aes128-…)Ключи AES → hopeKrbKeys: вход по Kerberos с etype AES. Соль по умолчанию — REALM+sAMAccountName, как в AD
имя:CLEARTEXT:парольЕсли в AD включено обратимое шифрование: HopeDC сам считает NT-хэш и ключи AES с правильной солью
имя,NT-хэш,aes256,aes128 (CSV, v170)Универсальный формат (столбцы через запятую; строка-заголовок пропускается) — для миграции с любого источника, не только Windows-DC
smbpasswd / pdbedit -Lw (v170)Формат Samba: user:uid:LM:NT:[флаги]:LCT-… — берётся NT-хэш
имя_historyN:…:NT::: (v170)История паролей (secretsdump -history) → hopePwdHistory: политика «не повторять последние N паролей» действует сразу после миграции

Имя — sAMAccountName (с префиксом ДОМЕН\ или суффиксом @домен или без них). Пустые строки и строки с # пропускаются. Сопоставление (v170): сначала по имени, затем по RID/SID из выгрузки — так находятся переименованные учётки. Соль Kerberos (v170): для машинных учёток ($) используется host-based соль AD, а не REALM+имя, — вход машин по AES работает без отката на RC4.

Отчёт (v170). Кроме счётчиков (разобрано / совпало / обновлено польз. и комп. / с ключами AES / только RC4 без AES / перенесена история / сопоставлено по SID / пропущено / без пароля / не нашлось / ошибки) показывается таблица пофамильно (учётка — статус — какие ключи) с выгрузкой CSV-отчёта для аудита. Строки «только RC4» подсвечиваются — это подсказка донести ключи AES. Перенос доступен с правом integration.edit и пишется в журнал безопасности (событие 4724).

Зашифрованный файл (v170). Чтобы открытый дамп паролей не покидал вашу машину, зашифруйте его и загрузите зашифрованным, указав парольную фразу в окне переноса: openssl enc -aes-256-cbc -pbkdf2 -salt -base64 -in dump.txt -out dump.enc. HopeDC расшифровывает файл только в памяти по введённой фразе. После переноса поле выгрузки и фраза очищаются; файл HopeDC нигде не сохраняет.
Как выгрузить парольный материал на контроллере AD

Выгрузку делает администратор своего домена своими правами на своём контроллере — HopeDC в этом не участвует. Формат строк, которые понимает окно переноса, совпадает с форматом выгрузки распространённых средств администрирования AD. Ниже — типовые способы; выберите один.

СпособЧем делаетсяЧто получится
Из «снимка» базы каталога (офлайн, рекомендуется)Снять копию ntds.dit и куста SYSTEM штатной ntdsutil (режим ifm — Install From Media), затем разобрать копию офлайн локальным разбором (например impacket-secretsdump -ntds <ntds.dit> -system <SYSTEM> LOCAL).Строки имя:RID:LM:NT::: (NT‑хэши). С ключом Kerberos‑ключей дополнительно строки имя:aes256-cts-hmac-sha1-96:… и aes128-….
С работающего контроллера (онлайн)Средством, выгружающим учётные данные каталога от имени учётки с правом репликации каталога (DS‑Replication‑Get‑Changes[‑All]), например impacket-secretsdump -just-dc ДОМЕН/админ@dc.То же: строки NT‑хэшей и, при наличии, ключи AES.
Открытые пароли (CLEARTEXT)Только если в домене заранее включено обратимое шифрование паролей (политика «Хранить пароли, используя обратимое шифрование») и пользователи после этого сменили пароль. Выгрузка открытых паролей тем же средством (-just-dc покажет блок CLEARTEXT).Строки имя:CLEARTEXT:пароль — HopeDC сам посчитает NT‑хэш и ключи AES с правильной солью.
Это самый чувствительный файл в домене — в нём пароли всех учёток. Выгружайте его на защищённой машине, передавайте в HopeDC по защищённому каналу, а после переноса надёжно удалите и копию, и «снимок» базы. HopeDC файл нигде не сохраняет — только разбирает в памяти и раскладывает значения по атрибутам учёток (как он и так хранит их для собственных записей); наружу по LDAP эти атрибуты не отдаются.
Для входа по Kerberos с etype AES нужны именно ключи AES из выгрузки (путь со «снимком» и онлайн‑путь их дают при соответствующем ключе средства) или вариант CLEARTEXT. Если в файле только NT‑хэши, вход по Kerberos идёт по etype RC4 (ключ RC4 = NT‑хэш) — это работает, но для перехода на AES перенесите ключи AES.
Переносятся только текущие пароли (NT-хэш и ключи AES). Если в выгрузке нет ключей AES, вход по Kerberos идёт по etype RC4 (ключ RC4 = NT-хэш) — это работает; этот путь безопасен в домене, но для полного AES перенесите ключи AES или включите обратимое шифрование на время выгрузки. После переноса пользователь входит своим прежним паролем; при желании его можно принудительно сменить при следующем входе.

Права: шаги 1 и 3 выполняет полный администратор или роль с правом integration.edit; делегированным администраторам домена они недоступны.

Изменения объектов в интегрированном домене (например, gPLink, атрибуты) HopeDC проталкивает в реальный контроллер домена, используя эти параметры. Если они не заданы — операция вернёт ошибку «нет пароля или IP». Атрибуты, начинающиеся на hope*, наружу не выгружаются.
Запись по LDAP в интегрированный домен (v157). Источник истины для интегрированного домена — AD. LDAP add, modify и delete к объектам такого домена HopeDC сначала проверяет своими правами (как прежде), затем выполняет ту же операцию в AD учёткой синхронизации (по LDAPS с проверкой сертификата DC) и только после успеха применяет к своей копии; объект перечитывается из AD (objectSid, objectGUID и вычисляемые атрибуты — как в AD). Ответ AD с ошибкой (права, политика паролей, схема) передаётся клиенту с тем же кодом LDAP и текстом «MS AD: …»; если AD недоступен — код 52 (Unavailable), в HopeDC ничего не меняется. Пароль в userPassword передаётся в AD как unicodePwd (AD по умолчанию хранит userPassword открытым текстом), memberOf AD вычисляет сам. Служебные объекты HopeDC внутри дерева домена, которых нет в AD, по-прежнему меняются только в HopeDC. До v157 такие изменения в AD не попадали и затирались следующей синхронизацией.
Изменения компьютером самого себя (v157, все домены). Как «проверенная запись» в AD: учётка компьютера может задать себе dNSHostName только вида «<имя компьютера>.<DNS-имя домена>», msDS-AdditionalDnsHostName — только в DNS-имени домена, а servicePrincipalName — только на свои имена (dNSHostName, дополнительные DNS-имена, NetBIOS-имя). Так компьютер не может забрать SPN чужой службы. Администраторы домена задают любые значения, как прежде.
Интеграция в кластере (v157). Пароль учётки синхронизации доступен всем узлам кластера (реплицируется как hopeSyncSecret; на диске зашифрован мастер-ключом узла, по LDAP и API не отдаётся), поэтому запись в AD и правки из панели работают на любом узле. Синхронизацию, импорт DNS и доверий из AD ведёт один узел — «ведущий»: сначала тот, где сохранены параметры интеграции. Он продлевает аренду каждой успешной синхронизацией; если ведущий не синхронизирует дольше трёх интервалов + минуты (+ до 2 минут сдвига), его роль забирает другой узел. Ведущий виден в сводке вкладки: «Ведёт узел кластера …». Параметры, сохранённые узлом версии до 157, переносятся в кластер при первой синхронизации этого узла после обновления.

Вход по смарт-картам и сертификатам (PKINIT) (v167)

PKINIT (RFC 4556) — предварительная проверка открытым ключом: пользователь входит по сертификату со смарт-карты или токена (Рутокен, JaCarta) либо из файла, без пароля. KDC проверяет подпись запроса и цепочку сертификата до доверенного ЦС, сопоставляет сертификат с учётной записью и выдаёт TGT. Так работают вход по смарт-карте в Windows, kinit (MIT), SSSD и Astra. Реализован режим обмена ключами Диффи — Хеллмана (DH), который эти клиенты используют по умолчанию; передача ключа шифрованием RSA не поддерживается (на неё KDC отвечает ошибкой, и клиент переходит на DH).

Кнопка «Вход по смарт-картам (PKINIT)» (значок карты) у домена открывает окно управления:

Чтобы карта подошла, сертификат пользователя должен: (1) проверяться до одного из доверенных ЦС; (2) иметь назначение «Проверка подлинности клиента» (clientAuth) или «Вход по смарт-карте» (1.3.6.1.4.1.311.20.2.2); (3) содержать имя учётки — UPN в SAN (otherName 1.3.6.1.4.1.311.20.2.3, как в Windows) или принципал Kerberos в SAN (1.3.6.1.5.2.2). HopeDC сопоставляет сертификат с учёткой по UPN (userPrincipalName или локальная часть = sAMAccountName).

Проверка вручную (Linux-клиент, MIT): kinit -X X509_user_identity=FILE:user.pem,user.key пользователь; в krb5.conf для реалма задаётся pkinit_anchors = FILE:<корневой ЦС домена> (чтобы клиент доверял сертификату KDC). Полученный билет — с etype AES256. Для смарт-карты вместо файла указывается PKCS11:-модуль токена. PKINIT доступен и собственным доменам HopeDC, и интегрированным; требуется право integration.edit, изменения пишутся в журнал безопасности.
Вход по сертификату не отменяет вход по паролю — они работают одновременно, пока для учётки не включён флаг «только смарт-карта» (ниже).

Вход только по смарт-карте (passwordless) (v168)

В карточке учётной записи флажок «Вход только по смарт-карте (PKINIT) — пароль не действует» (атрибут userAccountControl, бит UF_SMARTCARD_REQUIRED, как в AD) делает учётку беспарольной: вход только по сертификату/смарт-карте.

То есть флаг защищает вход в ОС (интерактивный вход на рабочую станцию Windows/Linux идёт по Kerberos → только PKINIT) и сетевую аутентификацию; парольный вход закрыт на всех путях.

Флаг требует, чтобы в домене был включён PKINIT и у учётки был сертификат (или смарт-карта), сопоставимый с ней по UPN. Сняв флаг, задайте учётке пароль, если нужен парольный вход. Проверено на стенде: с флагом kinit паролем отклоняется, kinit -X (PKINIT) выдаёт TGT.

Групповые управляемые учётные записи служб (gMSA) (v168)

gMSA — учётная запись службы, пароль которой ведёт сам контроллер: он генерируется при создании, автоматически меняется по интервалу и выдаётся по защищённому каналу только доверенным серверам. Администратору не нужно придумывать и вручную менять пароли служебных учёток — это снимает типовой риск «вечных» паролей сервисов.

Создание: раздел Структура домена → «Создать» → тип «Управляемая учётка службы (gMSA)». Задаются:

Учётка создаётся в контейнере CN=Managed Service Accounts домена (создаётся автоматически), получает SID, SPN HOST/имя.домен и первый управляемый пароль (256-байтный, как в AD). HopeDC держит ключи Kerberos и NT-хэш учётки синхронными с текущим паролем, поэтому служба проходит проверку подлинности обычным образом.

Как это работаетПодробность
Выдача пароляЧлен-сервер читает атрибут msDS-ManagedPassword по LDAP(S). HopeDC возвращает его (структура MSDS-MANAGEDPASSWORD_BLOB: текущий и предыдущий пароль, интервалы) только принципалу из списка «кому можно получать пароль»; остальным атрибут не отдаётся.
АвтосменаКонтроллер меняет пароль по истечении интервала: текущий становится предыдущим, генерируется новый, обновляются ключи. Предыдущий пароль остаётся в выдаче на переходный период, чтобы служба не теряла доступ, пока не обновит пароль.
ХранениеТекущий и предыдущий пароль лежат в служебных атрибутах (весь каталог зашифрован мастер-ключом at-rest; по LDAP наружу hope* не отдаются).
Проверено на стенде: создание gMSA, выдача msDS-ManagedPassword авторизованному серверу и отказ неавторизованному, корректный формат blob (256-байтный пароль, выровненные интервалы), автосмена пароля по интервалу. Потребление с Windows (Install-ADServiceAccount) опирается на тот же blob и проверяется на стенде с Windows-членом домена отдельно.

Корзина объектов (v173, по доменам — v194)

Аналог «Корзины Active Directory». Удаление пользователя, группы, подразделения (OU) или компьютера не стирает объект сразу, а помещает его в корзину: объект пропадает из каталога (его не видят LDAP, вход по Kerberos, панель), но хранится со всеми атрибутами и может быть восстановлен целиком. Это защищает от случайного удаления — типовой причины аварий в домене.

v194: корзина — у каждого домена своя. Раздел — вкладка «Корзина» в рабочей области домена («Домены» → домен → группа «Система» → «Корзина», над «Свойствами домена»; право recyclebin.view, действия — recyclebin.edit); в главном меню его больше нет. Вкладка показывает только объекты, удалённые из этого домена (без поддоменов и других доменов): администраторы и делегаты одного домена не видят удалённые объекты другого — и не могут их восстановить или удалить, даже зная идентификатор. Для доменов, интегрированных с MS AD, вкладка скрыта (корзину ведёт AD). Колонки: имя, тип, когда удалён и сколько осталось до очистки, исходное место (путь вида домен / подразделение). Действия:

В настройках раздела задаётся срок хранения (по умолчанию 180 дней, как в AD) и признак «корзина включена». По истечении срока объект удаляется окончательно автоматически. Если корзину выключить, удаление снова стирает объект сразу и безвозвратно.

ДетальКак работает
Что попадает в корзинуУчётки, группы, подразделения (OU), компьютеры собственных доменов HopeDC. Прочее (групповые политики, записи DNS и т. п.) удаляется как раньше — без корзины.
Вход удалённой учёткиПока учётка в корзине, войти по ней нельзя (её нет в каталоге). После восстановления вход снова работает. На вход других пользователей корзина не влияет.
Интеграция с MS ADДля доменов, интегрированных с MS AD, корзина не применяется: источник истины — AD, и удаление распространяется на него как прежде.
КластерМягкое удаление, восстановление и очистка реплицируются между узлами как обычные изменения. На RODC удалённый объект тоже скрыт; окончательную очистку по сроку ведёт записываемый узел.
Проверено на стенде (2 узла): удаление учётки помещает её в корзину и скрывает из каталога и входа (Kerberos), вход остальных пользователей не затронут; восстановление возвращает объект и вход; окончательное удаление; репликация удаления и сокрытие на RODC; срок хранения настраивается.

Инвентаризация компьютеров (v179)

v184: инвентаризация — вкладка рабочей области домена: «Домены» → домен → «Инвентаризация» (право inventory.view — «Инвентаризация компьютеров» в матрице ролей; делегат видит только свои домены). На вкладке — компьютеры только этого домена, поиск ПО — тоже по домену. Прежний пункт меню убран, ссылка /inventory ведёт в «Домены».

Вкладка показывает по каждому компьютеру: ОС и сборку, производителя, модель и серийный номер, процессор, память, диски со свободным местом, сетевые адаптеры (IP, MAC), вошедших пользователей, установленные программы и обновления Windows (KB). Компьютеры без сведений агента показаны с данными каталога (ОС из объекта компьютера).

ОСКак поступают сведения
LinuxАгент HopeDC (hopedc-agent.py) версии 179+ отправляет их вместе с отчётом о политиках — тем же LDAPS‑соединением и той же учёткой. Отправка — при изменениях и не реже раза в 12 часов. Обновите агент на машинах (п. «Политики Linux» → скачать агент / команда установки). Проверка на машине: sudo hopedc-agent.py --inventory. ПО — из dpkg или rpm.
WindowsСкрипт HopeDC_Inventory.ps1 (кнопка на вкладке «Подключение»). Работает от SYSTEM и входит в контроллер учёткой компьютера по Kerberos с подписью и шифрованием LDAP — паролей и сервисных учёток не нужно. Подключение: групповая политика компьютеров → Сценарии → Автозагрузка → «Сценарии PowerShell» → HopeDC_Inventory.ps1 с параметром -Install. При загрузке скрипт отправляет сведения и ставит ежедневную задачу «HopeDC Inventory» (от SYSTEM, случайная задержка до 15 мин). Журнал: %ProgramData%\HopeDC\inventory.log; -DryRun — показать, что будет отправлено; -Uninstall — удалить задачу.
Безопасность. Компьютер может прислать сведения только о себе; сервисная учётка агента — о компьютерах своего домена. Сервер принимает только известные поля с ограничением длины. Сведения хранятся на объекте компьютера (реплицируются в кластере), по LDAP не выдаются; список ПО хранится сжатым. Неизменившиеся сведения перезаписываются не чаще раза в сутки, поэтому лишней репликации нет.
Проверено на стенде: агент Linux отправляет сведения (1 096 пакетов), повторная отправка без изменений не пишет каталог; вход учёткой компьютера по Kerberos с подписью и шифрованием (как у Windows) — сведения сохраняются за этим компьютером, в т. ч. запрос 185 КБ (3 000 программ), разрезанный на несколько SASL‑буферов; сведения реплицируются на остальные узлы; поиск ПО и карточка компьютера в панели.

4.10. Свойства домена

Сведения о домене (право domains.view):

Вкладка «Загрузка данных» задаёт, как панель работает с большими списками домена (право на изменение — как у параметров):

4.11. Делегирование

Назначение пользователей и групп пользователей, которым разрешено входить в панель и управлять только этим доменом. Делегат получает доступ к разделу «Домены» только для своего домена; разделы Лицензия, Учётные записи, Роли, глобальный DHCP остаются недоступны.

Изменения делегирования записываются в журнал: кто изменил и каким был список до и после.

4.12. Поддомены, деревья и лес

HopeDC поддерживает лес доменов, как Active Directory. Новый домен можно создать тремя способами (раздел Домены → «Добавить домен» → «Создать локальный домен», переключатель «Где создать домен»):

ВариантПримерЧто получается
Новый лесcorp.localОтдельный лес: своя схема и конфигурация, свои Enterprise Admins. С другими лесами сервера не связан (связь — только доверием, п.4.8).
Дочерний домен в существующем лесуmsk.corp.localИмя внутри существующего домена. DN вложен в DN родителя, в зоне родителя — DNS‑делегирование.
Новое дерево в существующем лесу (v186)corp.ru в лесу corp.localСвоё пространство имён, но тот же лес: общая схема и конфигурация, Enterprise Admins корня леса, глобальный каталог. Как в AD, родитель по доверию — корень леса.

Как создать домен в существующем лесу

  1. Раздел Домены → «Добавить домен» → «Создать локальный домен».
  2. Выберите «Дочерний домен в существующем лесу» или «Новое дерево в существующем лесу».
  3. Для поддомена выберите родительский домен и введите одну метку (например msk); для дерева выберите лес и введите полное имя (например corp.ru). Итоговое имя, DN и NetBIOS‑имя показываются под полем.
  4. Задайте администратора и пароль, язык журналов, нажмите «Создать».

Через API: POST /api/directory/create-child-domain (parent_fqdn, label) и POST /api/directory/create-tree-domain (forest_fqdn — любой домен леса, fqdn); оба — с admin_username, admin_password, log_lang, право domains.edit.

Что настраивается автоматически

Особенности

Проверка имени домена (v126). Имя нового домена проверяется по правилам DNS: метки из латиницы, цифр и дефиса (не в начале и не в конце), до 63 символов в метке и 253 в имени, не менее двух меток для корневого домена. Нельзя создать домен, имя которого совпадает с уже существующим или вкладывается в него (например hope.local рядом с corp.hope.local другого леса) — для этого служит создание поддомена. Удаление домена выполняется только по корню домена и не задевает вложенные домены другого леса.
Кросс‑реалм Kerberos и лес рекомендуется проверять на живом стенде (клиенты Windows/Linux): реализация даёт механизм, а тонкости (флаги билета, соль AES для кросс‑реалма) могут потребовать доводки под конкретную среду.

4.13. Региональные серверы дочерних доменов

HopeDC ставится не только в корневом домене, но и в регионах с дочерними доменами. Региональный сервер держит только свой домен: учётные записи и ключи Kerberos родительского домена к нему не реплицируются, не принимаются и не хранятся. Общими остаются только конфигурация и схема леса. Настройка — в Кластер (HA) → «Разделы (домены) этого сервера» (или переменной DC_HOSTED_DOMAINS); пошаговый порядок пары «центр ↔ регион» и токены сопряжения описаны в Документе 7 «Кластер HA», раздел 10.

Репликация больше не открыта при пустом секрете: без секрета кластера или токена сопряжения узел отвечает HTTP 401. Региональному серверу общий секрет не выдавайте — только личный токен пары и список его доменов. Начиная с v141 центральный сервер не сохраняет узел с токеном без списка доменов обмена (полная реплика по токену — только явным *) и отклоняет репликацию по такому токену.

4.14. Ключи Kerberos домена (смена krbtgt)

Вкладка Домены → домен → «Ключи Kerberos» управляет ключом krbtgt этого домена — им подписываются все билеты Kerberos домена — и ключом служебной учётной записи hopedc-ldap-svc.

У каждого домена свои ключи. При создании домена HopeDC заводит в нём собственную учётную запись krbtgt со случайным ключом. KDC подписывает билеты домена ключом krbtgt именно этого домена, поэтому ключи разных доменов на одном сервере независимы: смена ключа на вкладке одного домена не затрагивает остальные, а утечка ключа одного домена не позволяет подделать билеты другого. У дочернего домена тоже свой krbtgt; для доверия «родитель — потомок» дополнительно заводятся межреалмовые учётные записи krbtgt-<домен>. Для доменов, интегрированных с MS AD, вкладка не показывается: их krbtgt хранится и меняется в самой AD. Исключение — домен, для которого HopeDC принял роль KDC (вывод Windows‑DC, п.4.9): вкладка показывается с пометкой о переходном периоде, а после отключения от AD домен управляется как собственный.

Для каждой учётной записи видны версия ключа (kvno), дата последней смены, возраст ключа в днях и статус:

Как работает смена

Кнопка «Сменить ключ» создаёт новый случайный ключ. Текущий ключ становится «предыдущим» и принимается до следующей смены, поэтому уже выданные билеты продолжают работать, а пользователи ничего не замечают. Новые билеты выдаются на новом ключе.

Повторная смена в течение 10 часов заблокирована: она отозвала бы ключ, которым ещё зашифрованы действующие билеты. Под кнопкой показывается, через сколько повторная смена станет доступна. Ссылка «Принудительно…» выполняет смену сразу — только при подтверждённой компрометации: пользователям и службам придётся заново получить билеты (выход/вход, klist purge), часть служб может временно не пускать пользователей.

Если ключ мог утечь (украдена копия базы, бэкап, мастер‑ключ шифрования, есть подозрение на golden ticket): смените krbtgt дважды — второй раз не раньше чем через 10 часов после первого. После второй смены прежний ключ перестаёт приниматься, и поддельные билеты, выпущенные на украденном ключе, отклоняются. Затем смените пароли администраторов и служебных учётных записей.

Регулярная смена и напоминания

Microsoft рекомендует менять krbtgt регулярно, например раз в полгода. Карточка «Регулярная смена krbtgt» задаётся для каждого домена отдельно: у разных доменов могут быть разные пороги напоминания и периоды плановой смены.

Кластер. Новый ключ уходит на остальные узлы со следующей репликацией (обычно до 15 секунд); до этого билеты, выданные на новом ключе одним узлом, другой узел может не принять. Настройки регулярной смены домена хранятся в корне домена и реплицируются, поэтому они одинаковы на всех узлах кластера и их можно менять на любом центральном узле. Саму плановую смену выполняет ровно один узел — с наименьшим идентификатором среди доступных узлов с полной репликой; на странице видно, какой именно. Если этот узел недоступен, задачу автоматически берёт следующий. Перед сменой узел забирает свежие изменения у пиров, чтобы не сменить ключ повторно. Региональные серверы поддоменов плановую смену не выполняют и политику не меняют. Региональный сервер дочернего домена получает смену krbtgt своего домена от центрального сервера.

Каждая смена ключа и изменение настроек записываются в журнал с именем пользователя и доменом. Через API ключ меняется только в указанном домене (domain в запросе); если собственных доменов несколько, а домен не указан, смена отклоняется.

4.15. Политика паролей, PSO и вход по компьютерам (v159)

Раздел домена «Политика паролей» (право gpo.view — просмотр, gpo.edit — изменение) задаёт требования к паролям пользователей домена, срок их действия и блокировку после неверных попыток. Параметры, общие с AD (длина, сложность, история, минимальный и максимальный срок, блокировка), сохраняются в Default Domain Policy (GptTmpl.inf, раздел [System Access]) и зеркально — в атрибуты корня домена (minPwdLength, pwdProperties, pwdHistoryLength, minPwdAge, maxPwdAge, lockoutThreshold…), поэтому их видят и Windows‑клиенты.

Где проверяется новый пароль: сброс в панели, «Локальный пароль», страница смены пароля, kpasswd (смена и установка; причина отказа для Linux — по‑английски), LDAP (unicodePwd/userPassword: удаление старого + добавление нового — смена, замена — сброс; отказ — constraintViolation с текстом причины), SAMR (STATUS_PASSWORD_RESTRICTION). В интегрированном и не захваченном домене паролями ведает AD — HopeDC его политику не дублирует.

Политики паролей для групп и пользователей (PSO). Как Fine‑Grained Password Policy в AD: объект msDS-PasswordSettings в CN=Password Settings Container,CN=System домена со своими требованиями и блокировкой, назначенный пользователям и группам (с вложенными). Действует вместо политики домена (и при выключенном главном переключателе). Назначенная напрямую главнее назначенной через группу; среди групповых — с меньшим значением «Приоритет». PSO, созданные по LDAP средствами AD (ADAC, New-ADFineGrainedPasswordPolicy), тоже учитываются. В таблице видно, на скольких пользователей действует каждая политика; в карточке пользователя (вкладка «Учётная запись») — какая политика действует, когда пароль менялся и когда истекает.

Смена пароля пользователем. На странице входа — ссылка «Сменить пароль пользователя домена» (имя, текущий и новый пароль); она же открывается сама, если пароль истёк или его требуется сменить. Неверный текущий пароль учитывается счётчиком блокировки.

Вход на компьютеры (атрибут userWorkstations, кнопка «Log On To…» в ADUC). В карточке пользователя — список NetBIOS‑имён компьютеров; пусто — вход с любого. Проверяется при первичном входе: Kerberos (имя из запроса Windows или, для Linux, по IP‑адресу клиента через DNS‑записи A/AAAA/PTR зон HopeDC) — отказ KDC_ERR_POLICY; NTLM — поле Workstation, отказ STATUS_INVALID_WORKSTATION. Если имя компьютера определить нельзя (нет DNS‑записи для адреса), вход отклоняется — заведите A‑записи для Linux‑машин.

Windows LAPS. Компьютер может сам записать пароль своей локальной учётки администратора в свои атрибуты msLAPS-Password, msLAPS-PasswordExpirationTime (и ms-Mcs-AdmPwd для прежнего LAPS) — как после Set-LapsADComputerSelfPermission. Читают пароль только администраторы домена (по LDAP) и роли с правом «Пароли LAPS и ключи BitLocker (просмотр)» (в панели, вкладка LAPS компьютера, кнопка «Сменить сейчас»). Срок действия пароля (…ExpirationTime) читать может и сам компьютер. Зашифрованный вариант (msLAPS-EncryptedPassword) не поддерживается — в политике Windows LAPS выключите шифрование пароля. LAPS для Linux‑машин (через агент) — в следующих версиях.

5. Службы: DNS, DHCP и NTP (глобально)

Поведение на чистом старте. На свежей установке (пустая база) службы DNS и DHCP запускаются в состоянии «Остановлено». База ещё не содержит ни зон, ни пулов, поэтому запущенная служба сразу заняла бы порты :53/:67 и начала бы отвечать на запросы/раздавать адреса в сети, где уже может работать штатный DNS/DHCP — это риск конфликта. Включите службы вручную в этом разделе после того, как настроите зоны и пулы. Флаг хранится в атрибутах домена hopeDnsEnabled/hopeDhcpEnabled и подхватывается службой «на лету» (перезапуск ядра не нужен). На уже существующих установках при обновлении состояние служб не меняется.

DNS Сервер

Глобальный раздел управления встроенной службой DNS (порт 53): запуск/остановка службы, просмотр всех зон (прямого и обратного просмотра) с числом записей и пометкой «AD» (импортированные). Управление конкретными записями выполняется в разделе домена. У каждой зоны есть кнопка «Перейти» — открывает вкладку DNS соответствующего домена (доступна, если зона относится к управляемому домену и у роли есть право domains.view; иначе кнопка заблокирована).

Условная пересылка (v165). Карточка «Условная пересылка»: зона (суффикс, например partner.local) и её серверы (IP или IP:порт через запятую, до 8). Запросы к именам в этой зоне и её поддоменах, не относящиеся к своим зонам HopeDC, уходят на эти серверы по очереди (2 с на сервер), остальные внешние имена — на общий форвардер; при нескольких подходящих зонах побеждает самая длинная. Цели CNAME вне своих зон дорезолвливаются так же. Настройка общая для сервера (реплицируется на все узлы), API — GET/PUT /api/dns/conditional.

Старение и очистка записей (v165). Карточка «Старение и очистка записей» — как в Windows DNS: интервал без обновления и интервал обновления (по умолчанию 168 ч = 7 суток), зоны (пусто — все). Касается только записей, которые клиенты регистрируют сами (DNS UPDATE: Windows, SSSD, NetworkManager); ручные, служебные (DC‑locator), импортированные из AD и созданные DHCP записи не стареют. В течение интервала без обновления повторная регистрация ничего не пишет (нет лишней репликации), после — запись продлевается; запись, не обновлявшаяся дольше обоих интервалов, удаляется очисткой (раз в час на каждом узле, событие 5141 в журнале безопасности). При включении записям, созданным до v165, ставится текущее время — отсчёт начинается с момента включения. «Что будет удалено» — пробный прогон, «Очистить сейчас» — немедленная очистка. Время обновления хранится в идентификаторе записи (UUID v7), формат базы и репликации не меняется — узлы прежних версий в кластере работают с такими записями как обычно.

DHCP Сервер

Глобальное управление службой DHCP и пулами по всем сетям.

Доменные пространства имён DFS (v131)

Контроллер обслуживает доменные пространства DFS (режим Windows Server 2008, [MS-DFSNM]): пользователь открывает \\hope.local\Files\Docs, а контроллер направляет его к серверам пространства. Пространства создаются файловым сервером (HopeDFS «Пространства DFS» → «Доменное», или консолью DFS Management) как объекты каталога CN=<имя>,CN=<имя>,CN=Dfs-Configuration,CN=System,<домен> (класс msDFS-Namespacev2).

Проверка на клиенте Windows: dir \\hope.local\Files, затем dfsutil /pktinfo — в кэше видны корень пространства и сервер, на который он указывает.

Сертификат LDAPS без ЦС (v131). Пока у доменов нет корневого ЦС, LDAPS отдаёт тот же постоянный самоподписанный сертификат узла, что и веб‑панель. Раньше он создавался заново при каждом запуске службы, и клиенты, закрепившие отпечаток (HopeDFS, SSSD), после перезапуска контроллера теряли связь. После обновления до v131 отпечаток меняется последний раз — подтвердите его заново в HopeDFS («Домен» → «Доверенные сертификаты LDAPS» → «Изменить»). Для рабочей установки создайте корневой ЦС домена — тогда клиенты доверяют ЦС, а не отпечатку.
SYSVOL и изоляция доменов (v134). Как на контроллере AD, шара SYSVOL показывает папку только того домена, к которому обращаются по имени: \\hope.local\SYSVOL и \\hopedc.hope.local\SYSVOL — только hope.local. Папка другого домена доступна по его имени (\\lol.lol\SYSVOL) и только если этот домен виден пользователю (свой лес или доверие); иначе и при обращении по IP-адресу или короткому имени показывается папка домена пользователя. Остальные папки корня SYSVOL — в том числе оставшиеся от удалённых доменов — не перечисляются и не открываются (ответ «объект не найден»). До v132 в SYSVOL были видны папки всех доменов сервера, в v132 — всех доменов своего леса и доверяющих доменов.
objectCategory и учётки компьютеров, созданные по LDAP (v132, ТЗ п. 3). Класс нового объекта определяется по самому конкретному значению objectClass, а не по последнему в запросе: учётка компьютера, созданная HopeDFS, adcli или скриптом, сохраняется как компьютер (раньше в зависимости от порядка значений могла стать «пользователем»). При обновлении такие объекты исправляются автоматически (запись «класс объекта исправлен» в журнале). Фильтры по objectCategory работают и в краткой форме, как в AD: (objectCategory=computer), (objectCategory=person) (пользователи и контакты, без компьютеров), user → Person, group, organizationalUnit, а также в форме полного DN категории.

NTP Сервер (точное время)

Встроенный сервер времени домена (v128). Решает две задачи: держит часы самого контроллера точными по внешним источникам и раздаёт время членам домена на UDP 123. Качество реализации — на уровне chrony/ntpd, а не простого SNTP-ответчика: по каждому источнику копится фильтр из 8 последних измерений (берётся замер с наименьшей задержкой), достоверные источники выбираются пересечением интервалов (алгоритм Марзулло, «вруны» отсекаются), а системные часы подстраиваются ядерным контуром (плавный увод частоты; ступенька только при большом сдвиге). По умолчанию служба выключена; включается в этом разделе (право ntp.edit). Точное время критично: Kerberos отклоняет билеты при расхождении более 5 минут.

Linux-клиенты. Скрипт ввода Linux в домен (Политики Linux → Агент) теперь настраивает chrony на синхронизацию с контроллером. Для NTS добавьте в chrony.conf клиента server <dc> nts и доверьте сертификат ЦС домена.
Смена пароля по Kerberos — kpasswd (v135). Служба смены пароля (порт 464, RFC 3244) работает в каждом домене сервера, в том числе в созданных после запуска и перешедших из AD (после «Принять роль KDC» и «Отключить от AD» служба появляется сразу). Пользователь меняет свой пароль командой kpasswd user@REALM (Linux/macOS) или через Ctrl+Alt+Del в Windows — новый пароль сразу действует для Kerberos, LDAP и входа в панель, старый перестаёт. Сменить свой пароль можно только по первичному билету, полученному паролем (как в AD); задать пароль другой учётке может только её администратор. Учётки ищутся строго в своём домене: одноимённые Administrator разных доменов не путаются.
Коды ответа входа в панель (v135). Ответ POST /api/auth/login при ошибке содержит машинное поле code: bad_credentials (неверное имя или пароль, в том числе несуществующая учётка), no_panel_access (пароль верный, но нет роли в панели), disabled (учётка отключена — пароль при этом не проверяется и не подтверждается), locked (учётка заблокирована после неверных попыток — v138), ad_unavailable (AD недоступен при проверке пароля). Поддерживаются форматы имени user@домен, ДОМЕН\user (NetBIOS) и user. Пароль проверяется так же, как при LDAP-входе: по действующему NT-хэшу.
Проверка пароля через AD при LDAP-входе (v136). Если домен учётки интегрирован с AD, а пароль в HopeDC не совпал или его нет (например, пароль сменили в AD), LDAP simple bind проверяет пароль в AD (LDAPS к контроллеру, как при входе в панель). При успехе пароль сохраняется в HopeDC — дальше учётка входит по LDAP, Kerberos и NTLM и без AD. Ошибки возвращаются в формате AD (80090308: LdapErr: … data 52e): 52e — неверный пароль, 533 — учётка отключена, 701/532 — истёк срок учётки или пароля, 775 — учётка заблокирована. Приложения, которые разбирают код data, работают с HopeDC так же, как с AD.
objectGUID из AD (v137). При интеграции и фоновой синхронизации объектам (домен, пользователи, группы, компьютеры, OU) присваивается их настоящий objectGUID из AD. Он сохраняется после «Принять роль KDC», «Отключить от AD» и перезапуска — приложения, которые хранят ссылки на объекты по GUID (синхронизация, почта, системы доступа), не теряют связь после миграции.
Блокировка учётных записей (v138). Работает как политика блокировки AD и по умолчанию выключена (порог 0). Включается в Default Domain Policy домена: «Групповые политики» → политика → «Параметры безопасности» → Пороговое значение блокировки (LockoutBadCount), Продолжительность блокировки (LockoutDuration, минуты; −1 — до разблокировки администратором) и Сбрасывать счётчик блокировки через (ResetLockoutCount, минуты). Если в политике порог не задан, берутся атрибуты корня домена lockoutThreshold, lockoutDuration, lockOutObservationWindow. Изменение в панели применяется сразу, правка с Windows (GPMC) — в течение минуты.
Считаются неверные пароли при LDAP-входе, получении билета Kerberos, входе по NTLM (общие папки) и в панель. На пороге учётке записывается lockoutTime (реплицируется в кластере); счётчик неверных попыток ведёт каждый узел. Заблокированная учётка не входит и с верным паролем: LDAP — data 775, Kerberos — KDC_ERR_CLIENT_REVOKED со статусом STATUS_ACCOUNT_LOCKED_OUT (Windows пишет «учётная запись заблокирована»), SMB — STATUS_ACCOUNT_LOCKED_OUT, панель — code: locked.
Где видно (v142). В свойствах учётки на вкладке Account — блок «Состояние входа»: заблокирована или нет (и до какого времени), политика домена, число неверных попыток и время последней; если контроллеров несколько — таблица по каждому (счётчик у каждого свой, как в AD; аналог LockoutStatus.exe). В списке «Структура домена» у заблокированной учётки — значок замка, а в фильтре типов — пункт «Заблокированные» (по всему домену). По LDAP читаются badPwdCount, badPasswordTime и lockoutTime — их видят Get-ADUser -Properties badPwdCount, редактор атрибутов ADUC и внешние системы.
Блокировка снимается сама по истечении срока, кнопкой «Разблокировать» в блоке «Состояние входа» (снимает lockoutTime и обнуляет счётчики на всех контроллерах; если учётка не заблокирована, но попытки есть — «Сбросить счётчики») или записью lockoutTime=0 по LDAP (как флажок «Разблокировать» в ADUC). Не блокируются: встроенный Administrator (RID 500 — чтобы не потерять доступ к домену), учётные записи компьютеров и служб (…$), krbtgt. В интегрированном с AD домене, пока HopeDC не принял роль KDC, блокировкой управляет AD.
Kerberos по UDP 88 (v139). KDC принимает запросы и по UDP 88 (раньше только TCP; записи _kerberos._udp в DNS публиковались, но порт не слушался — клиенты теряли время на тайм-аут). Ответ больше 1465 байт (как MaxDatagramReplySize у AD; обычно это билеты Windows с PAC) по UDP не отправляется: клиент получает KRB_ERR_RESPONSE_TOO_BIG и сам повторяет запрос по TCP. Предел меняется переменной окружения DC_KRB_UDP_MAX. В брандмауэре сервера нужен порт 88/udp — скрипт развёртывания открывает его.

6. Безопасность

Учётные записи

Доступ к админ‑панели HopeDC. Через «Создать пользователя» доступны три типа записей:

В форме сперва выбирается домен, затем принципал (поиск с фильтрацией; технические учётки, компьютеры, системные почтовые ящики и объекты Exchange из списка исключены). В таблице у каждой записи виден тип (Локальный / Домен · пользователь / Домен · группа), статус и роль. Сопоставления доменных принципалов хранятся отдельно (не в bincode‑учётках) и не мешают локальным. Встроенная учётка admin всегда поддерживается активной (защита от потери доступа).

Условия доступа доменной учётки: домен интегрирован (для проверки пароля через PTA), а объект пользователя присутствует в каталоге HopeDC. Роль задаёт набор прав (например «Только чтение» — просмотр без изменений).

Роли и права (RBAC)

Пароли LAPS и другие конфиденциальные атрибуты (v158). Как атрибуты с флагом «конфиденциальный» в AD, пароли LAPS (ms-Mcs-AdmPwd, msLAPS-*), ключи восстановления BitLocker (msFVE-*), сведения TPM, роуминг учётных данных (msPKI*), пароли доверий, LSA-секреты, пароль gMSA и unixUserPassword по LDAP читают только администраторы домена объекта; для остальных они отсутствуют и в выдаче, и в фильтре поиска, и в сравнении (Compare). В панели их видит и меняет роль с правом «Пароли LAPS и ключи BitLocker (просмотр)» (laps.view) — администратор домена объекта; у полного администратора право есть. До v158 эти значения читал по LDAP любой пользователь домена.

Роли определяют набор прав (например domains.view, gpo.view, dns.view, roles.edit и т.д.). Встроенные роли: Администратор (право * — полный доступ) и Только чтение. Системные роли изменять нельзя — создавайте кастомные. Права вида domain:<fqdn> ограничивают делегата конкретными доменами.

Раздел матрицы «Контроллеры» (v188): controllers.view — список контроллеров и журналы задач, controllers.edit — добавление, изменение и удаление записей, проверка, установка и обновление по SSH. Роли с правами «Кластер (HA)» получили их автоматически при обновлении; администраторы домена (Domain Admins) получают оба права для контроллеров своего домена, делегаты — только просмотр (v195; см. «Контроллеры» в разделе 7).

Новые разделы матрицы (v184): «Корзина» (recyclebin.view — просмотр, recyclebin.edit — восстановление, очистка, срок хранения), «Инвентаризация компьютеров» во вкладках домена (inventory.view), «Журнал безопасности» (seclog.view/seclog.edit) и «Двухфакторная (MFA): политика и назначение» (mfa.view/mfa.edit). Раньше корзину и инвентаризацию открывало любое право на каталог, журнал безопасности — права «Логирование», политику MFA — только полный доступ. При обновлении роли получают новые права по прежним (домены → корзина и инвентаризация на чтение; изменение каталога → корзина на изменение; «Логирование» → журнал безопасности), делегаты доменов — корзину и инвентаризацию своих доменов. Без отдельного права: «Каталог шаблонов» — по праву «Групповые политики», MFA своей учётки и «Описание API» — любому вошедшему, «Обновления» — только полный доступ.

Для вкладки домена «Ключи Kerberos» предусмотрены права kerberos.view (просмотр, входит в роль «Только чтение») и kerberos.edit (смена ключей и настройка регулярной смены).

Матрица прав повторяет меню панели. В разделе «Домены» отдельно настраиваются вкладки домена: структура, группы, групповые политики (Windows и Linux), сайты и службы (sites.view/sites.edit), центр сертификации, доверия, ключи Kerberos и делегирование (delegation.view/delegation.edit). В разделе «Настройки» добавлен пункт «Связи» (topology.view, только просмотр). При обновлении до v120 существующие роли получили эти права автоматически по прежним: «Сайты и службы» — у ролей с просмотром или изменением доменов, «Делегирование» — у ролей с изменением доменов, «Связи» — у ролей с доступом к кластеру. Доступ пользователей при обновлении не меняется.

Проверка прав на сервере (v125). Права ролей проверяются ядром для каждого запроса, а не только интерфейсом: чтение раздела требует права <раздел>.view, изменение — <раздел>.edit. Запись объектов каталога проверяется по самому объекту: группы — «Управление группами», GPO, связи GPO (gPLink) и политики Linux — «Групповые политики», объекты сайтов — «Сайты и службы», корень домена — «Домены», остальное — «Структура домена». Скачивание бэкапа требует права «Резервное копирование: изменение» (в бэкапе хэши паролей и ключи). Неизвестные пути API доступны только полному администратору. При отказе сервер отвечает 403 с названием нужного права, панель показывает его сообщением вверху экрана.

Права сессии пересчитываются по текущим ролям и каталогу (кэш до 20 секунд, сбрасывается при изменении ролей, учёток и каталога): урезанная роль, отключённая учётка, снятый делегат или исключённый из Domain Admins теряют доступ сразу, а не через сутки после входа. Доменная группа, назначенная роли в «Учётных записях», учитывается с вложенностью и строго в своём домене.

Защита от повышения привилегий (v126). Создавать и менять роли и учётные записи можно только в пределах своих прав: роль не может получить право, которого нет у того, кто её редактирует, а учётке нельзя назначить роль шире собственной. Служебные права вида admin:… вручную не назначаются. Нельзя удалить, отключить или понизить последнюю учётку с полным доступом, а роль, назначенную учёткам, нельзя удалить, пока её не сняли с них. Вход в панель доменной учёткой больше не даёт права на центр сертификации по умолчанию — их нужно выдать ролью явно.

Секреты не покидают сервер. API каталога и панель не отдают хэши паролей и ключи Kerberos (unicodePwd, userPassword, ключи AES и т.п.) — даже полному администратору. В карточке объекта виден только признак «пароль задан / ключи Kerberos есть». Секрет кластера в настройках тоже не показывается (см. раздел «Кластер»).

Делегированному администратору домена (роль с ограничением domain:<fqdn>) для работы своих вкладок доступны на чтение статус кластера, лицензия, состояние DNS‑сервера и его пересылка; при отказе в доступе сервер отвечает понятным сообщением (JSON), а не пустой страницей.

Сетевой доступ

Белый список IP‑адресов клиентов домена (файл net_ldap.json). Применяется к подключениям LDAP (389), LDAPS (636) и Kerberos (88): подключения не из списка отклоняются. Используйте для ограничения круга машин, которым разрешено обращаться к контроллеру.

7. Настройки

Лицензия и версии

Загрузка лицензионного ключа и просмотр текущего использования (домены, объекты, доверия). Для получения ключа скопируйте запрос из раздела и передайте на сервер лицензирования. Ключ проверяется вшитым ключом вендора и привязан к оборудованию сервера.

v197: ключ проверки лицензий нельзя заменить. Подпись лицензии проверяется только открытым ключом сервера лицензий, вшитым в сборку (его отпечаток показан в карточке «Ключ лицензии»). Прежняя возможность задать свой ключ проверки (POST /api/license/pubkey, поле «Доверенный ключ сервера лицензий») удалена: при сборке без вшитого ключа ею можно было бы подписать лицензию самостоятельно. Оставшийся от прежних версий файл license.pub удаляется при запуске. Сборка без настоящего вшитого ключа не компилируется. Установленные лицензии продолжают действовать.

Кнопка «Сравнить версии» открывает таблицу сравнения версий Free / Standard / Enterprise:

ВозможностьFreeStandardEnterprise
Интегрированные домены (леса)110без лимита
Пользователи + компьютеры2005000без лимита
Доверия (ДДО)010без лимита
Каталог AD/LDAP, DNS, DHCP, PKI, GPOдадада
Доверия между лесами, межузловая репликация, раздел «Связи»—дада
Отказоустойчивый кластер (HA)——да
Приоритетная поддержка—дада

Лимиты Standard/Enterprise — типовые; фактические значения задаёт выданный ключ.

Разделы, требующие более старшей версии. Если текущей лицензии недостаточно, раздел открывается только для просмотра, с плашкой о нужной версии: Кластер (HA) требует Enterprise; Доверие (Trusts) и Связи — Standard или выше. На странице кластера при этом недоступны любые изменения: настройки узла, пиры, вкладки, включение/выключение. Уже настроенный функционал продолжает работать — например, если лицензия истекла, кластер продолжает реплицировать, просто его нельзя изменить. Ограничение проверяется и на сервере, а не только в интерфейсе.

Лицензионное соглашение (v148). Условия использования HopeDC — Документ 8. При первом входе после установки (и после выхода новой редакции соглашения) панель вместо разделов показывает текст соглашения: полный администратор панели отмечает согласие и нажимает «Принимаю»; «Не принимаю» — выход. Пока соглашение не принято, остальные пользователи панели видят сообщение «Соглашение должен принять полный администратор панели», а API панели отвечает 428 eula_required. Службы контроллера домена (вход в домен, LDAP, Kerberos, DNS, DHCP, NTP, SMB, репликация) от принятия не зависят и работают всегда. Факт принятия (учётная запись, адрес, время, редакция и SHA‑256 текста) хранится зашифрованным на каждом сервере (eula_acceptance.json в каталоге данных); в кластере соглашение принимается на каждом узле. В разделе «Лицензия» — карточка «Лицензионное соглашение»: кто и когда принял, просмотр текста. Текст доступен и без входа: ссылка на странице входа и hopedc-core --eula. Перечень компонентов третьих лиц (Документ 9) в продукт не входит и предоставляется по запросу.

Резервное копирование

Настройка и запуск резервных копий каталога. Автобэкапы выполняет фоновый воркер ядра. Рекомендуется хранить копии вне сервера DC. Права: backup.view / backup.edit.

Данные базы и настроек в архиве зашифрованы мастер‑ключом сервера, сам ключ в архив не входит (в MANIFEST.txt записан только его отпечаток). Восстановить архив можно на этом же сервере или на другом — при наличии файла ключа исходного сервера (см. ниже).

Шифрование данных на диске и мастер‑ключ

Начиная с версии v106 база HopeDC хранится на диске в зашифрованном виде (AES‑256‑GCM). Кража каталога данных или архива бэкапа без мастер‑ключа не даёт ни хэшей паролей, ни ключей Kerberos (в т.ч. krbtgt), ни ключа центра сертификации.

Что зашифрованоФайлы в каталоге данных
Каталог, учётные записи, DNS, DHCP, PKI, доверияactive.ewal
Журнал аудитаaudit.ewal
SYSVOL (групповые политики, скрипты)sysvol.ewal
Репликация и кластерrepl_journal.bin, repl_conflicts.json, repl_reconnects.json, cluster_config.json
Служебные ключи и настройкиключ подписи сессий панели, ключ паролей интеграций, ключ DPAPI (BKRP), состояние Netlogon, прочие настройки

Старые открытые файлы (active.wal, audit.wal, sysvol.wal) и старые архивы бэкапов шифруются автоматически при первом запуске новой версии.

Откат на версию ниже v106 не поддерживается: старая версия не увидит зашифрованную базу.

Где лежит мастер‑ключ

Ключ — 32 случайных байта (64 hex‑символа) в отдельном файле вне каталога данных. Ядро ищет его в таком порядке:

  1. переменная окружения DC_MASTER_KEY (сам ключ, hex);
  2. файл из переменной DC_MASTER_KEY_FILE (если задана — используется только он);
  3. /etc/hopedc/master.key — расположение по умолчанию (каталог 0700, файл 0600, владелец — пользователь службы);
  4. <каталог данных>.keys/master.key — запасной вариант, если в /etc/hopedc нет прав на запись;
  5. <каталог данных>/.master-key/master.key — аварийный вариант.

Если ключа нет нигде, он создаётся при первом запуске. Путь и отпечаток ключа (16 hex‑символов; сам ключ по отпечатку восстановить нельзя) показываются в зелёной плашке раздела Резервное копирование и пишутся в журнал при старте. Если ключ оказался внутри каталога данных, в плашке появляется жёлтое предупреждение: копия каталога в этом случае содержит и ключ — перенесите его в /etc/hopedc/master.key.

Потеря ключа = потеря базы и всех бэкапов. Обязательно сохраните копию ключа вне сервера сразу после установки и после каждой замены ключа.
Ключ вместе с копией базы = полный доступ к домену (хэши паролей, ключи Kerberos, krbtgt). Никогда не храните копию ключа рядом с базой или бэкапами.

Экспорт мастер‑ключа под паролем

Копия ключа сохраняется в файл .hdckey, зашифрованный паролем: ключ шифрования выводится из пароля через Argon2id (64 МиБ, 3 прохода — подбор пароля дорог даже на видеокартах), сам мастер‑ключ шифруется AES‑256‑GCM. Без пароля файл бесполезен.

  1. Откройте Настройки → Резервное копирование и нажмите в зелёной плашке «Скачать мастер‑ключ (под паролем)». Кнопка видна только полному администратору панели (право *).
  2. Введите пароль своей учётной записи (повторная проверка) и пароль для файла ключа — не короче 12 символов и не совпадающий с паролем учётной записи. При желании добавьте заметку (например, где будет храниться копия).
  3. Нажмите «Скачать файл ключа». Скачается файл hopedc-master-<сервер>-<отпечаток>-<дата>.hdckey.

Каждый экспорт и каждая неудачная попытка (неверный пароль, нет прав) записываются в журнал с именем пользователя: 🔑 Мастер‑ключ экспортирован (под паролем) пользователем «…».

Рекомендации по хранению. Файл и пароль храните раздельно: например, файл — на носителе в сейфе или в защищённом хранилище, пароль — в менеджере паролей. Для пароля используйте фразу из нескольких слов. Если пароль забыт — файл расшифровать нельзя, сделайте новый экспорт. Открытые (незашифрованные) копии ключа, если они делались ранее, после экспорта .hdckey удалите.

Восстановление бэкапа другого сервера

Архив, сделанный на другом сервере, зашифрован его мастер‑ключом. Чтобы восстановить его (например, на новом сервере взамен вышедшего из строя):

  1. Резервное копирование → Восстановление данных → «Выбрать ZIP‑архив».
  2. Панель сообщит, что архив зашифрован ключом другого сервера, и покажет отпечаток нужного ключа.
  3. Выберите файл .hdckey исходного сервера — под кнопкой отобразится его отпечаток, сервер и дата создания. Если отпечаток не совпадает с нужным, панель сразу предупредит «Этот ключ не подходит к архиву».
  4. Введите пароль файла ключа и нажмите «Восстановить с этим ключом».
  5. Данные перешифровываются на ключ текущего сервера и записываются. Если хоть одна запись не расшифровалась, ничего не записывается. Перезапустите службу.

Ключ исходного сервера при этом на текущий сервер не устанавливается — он нужен только на время восстановления.

Командная строка на сервере

Для случаев, когда панель недоступна (новый сервер, восстановление после сбоя). Запускать от root; путь к бинарнику — как в вашей установке (например /opt/hopedc/hopedc-core). Если каталог данных отличается от /var/lib/hopedc и переменная DC_DATA_DIR не задана, укажите --data-dir.

КомандаЧто делает
hopedc-core key infoГде лежит мастер‑ключ, его отпечаток и каким ключом зашифрована база в каталоге данных.
hopedc-core key export --out /root/dc.hdckey [--note ТЕКСТ]Сохранить ключ в файл .hdckey под паролем (пароль спрашивается дважды, без отображения). Файл создаётся с правами 0600.
hopedc-core key import dc.hdckey [--to ПУТЬ] [--force]Установить ключ из файла (по умолчанию в /etc/hopedc/master.key; владелец — как у каталога данных, права 0600). После установки — systemctl restart hopedc.

Защита от ошибок при импорте:

Для сценариев автоматизации пароль можно передать переменной HOPEDC_KEY_PASSWORD (учитывайте, что переменные окружения процесса видны root).

От чего шифрование не защищает

Связи

Граф контроллеров, доменов и лесов: подчинённость доменов, доверия, какие домены обслуживает каждый контроллер и реплики между контроллерами. Раздел доступен на контроллере корневого домена (редакция Standard и выше, право topology.view).

Связи конкретного домена. В рабочей области домена есть вкладка «Связи» (группа «Сеть и безопасность»). Она показывает только данные этого домена: сам домен и его поддомены, его доверия (партнёр — серым узлом), контроллеры, которые его обслуживают, и реплики с ним. Другие домены, которые обслуживают те же контроллеры, не показываются: сервер отфильтровывает их сам. Вкладка работает на любом контроллере этого домена (не только на корневом) и доступна делегированным администраторам домена с правом «Связи».

Логирование

Просмотр и скачивание файловых журналов сервера (hopedc.log.*): выбор файла (или «новейший»), фильтр по уровню (ERROR/WARN/INFO/DEBUG/TRACE), серверный фильтр по подстроке и быстрый поиск по экрану, автообновление, подсветка строк по уровню. Внизу — список файлов со скачиванием каждого. Кнопка «Настроить» задаёт политику хранения журналов (пресеты «Неделя / Месяц / 3 месяца / Год», а также ограничение по возрасту и по количеству файлов); очистка применяется автоматически и по кнопке «Очистить сейчас» (с предупреждением о том, какие файлы удалятся). Новейший активный журнал всегда сохраняется. В рабочей области конкретного домена есть такой же раздел, но с фильтрацией строк по FQDN этого домена. Право доступа: logs.view.

Журнал безопасности (v164)

Раздел «Безопасность → Журнал безопасности» (право «Журнал безопасности: просмотр», изменение настроек, SIEM и мониторинга — «Журнал безопасности: изменение»; v184 — своё право, раньше — права раздела «Логирование»; роли с правами «Логирование» получили его автоматически). События: входы по Kerberos, LDAP, NTLM и в панель (успешные и неудачные, с причиной), блокировки и разблокировки, смена и сброс паролей, изменения каталога и групп по LDAP, изменения и отказы в панели, изменения настроек аудита — с кодами как в журнале безопасности Windows (4624, 4625, 4740, 4768, 4771, 4776, 5136 …); фильтры, поиск, выгрузка CSV и JSON. Настройки и SIEM: состав событий, срок хранения, отправка в SIEM по syslog (UDP, TCP или TLS; CEF или JSON) с проверкой связи. Мониторинг: метрики Prometheus (/metrics с токеном) и шаблон Zabbix.

Отдельный документ. Список событий, формат CEF/JSON, настройка SIEM, метрики и шаблон Zabbix — Документ 16 «Журнал безопасности, SIEM и мониторинг».

Кластер (HA)

Раздел настраивает высокую доступность: мульти‑мастер репликацию каталога, DNS, доверительных отношений, доменной политики безопасности и конфигурации DHCP‑пулов между контроллерами домена. Узлы обмениваются изменениями методом «pull» через API (порт 9444, HTTPS) с проверкой общего секрета; новый узел выполняет первичный бутстрап снимком (snapshot). Конфликты (правка одного объекта на разных узлах) разрешаются по правилу «последняя запись побеждает». Права: cluster.view / cluster.edit.

Раздел разбит на четыре вкладки:

Общий секрет (v126). Секрет кластера в форме не показывается (поле пароля с подсказкой «задан»). Чтобы оставить прежний, оставьте поле пустым и сохраните; новый вводится только при смене.

Пересинхронизация (v126). Кнопка «Пересинхронизировать» запрашивает у пиров полный снимок и сводит его с локальными данными по правилу «последняя запись побеждает»: недостающее добавляется, устаревшее обновляется, удалённое на пирах — удаляется, более новые локальные правки сохраняются. Узел делает это и сам, если обнаружил разрыв в журнале пира (был недоступен дольше, чем журнал хранит события — 8000 изменений) — после возврата узла раньше требовалась пересборка с нуля. Пересинхронизация 200 тыс. объектов занимает 5–10 секунд и не порождает ответных событий репликации.

Отдельный документ. Пошаговое создание кластера, требования (в т.ч. синхронизация времени NTP), модель разрешения конфликтов, что реплицируется, обслуживание и диагностика — в Документе 7 «Кластер HA: создание и обслуживание». Сетевой обмен — в Документе 4.
Новый узел — из панели (v188). Вместо ручной установки и настройки пары узлов сервер можно добавить в разделе «Контроллеры»: HopeDC сам установит себя на сервер по SSH и настроит сопряжение в обе стороны (см. следующий раздел).

Контроллеры: установка и обновление по SSH (v188)

Раздел «Контроллеры» главного меню (сразу под «Доменами», v195) и вкладка «Контроллеры» в рабочей области домена (группа «Система», над «Свойствами домена», v195) хранит доступ по SSH к серверам, на которые ставится HopeDC, и выполняет с ними установку и обновление прямо из панели.

Как добавить контроллер

  1. Подготовьте сервер: Linux x86_64 с systemd, доступ по SSH (root или пользователь с sudo), сетевой доступ от этого сервера к нему по SSH (22) и от него к этому серверу по порту API (9444), открытые порты домена (Документ 1, п.9). Время — синхронизировано.
  2. Контроллеры → «Добавить контроллер» (или «Домены» → домен → «Контроллеры»). Укажите имя, адрес и порт SSH, роль и домены (в главном разделе — флажками из списка доменов сервера), пользователя и способ входа: пароль или закрытый ключ; для пользователя не root — пароль sudo, если он отличается от пароля SSH. Сохраните.
  3. Нажмите «Проверить подключение» (значок вилки). В колонке «Состояние» появятся ОС, архитектура, работает ли sudo и установлен ли HopeDC; ключ сервера запоминается.
  4. Нажмите «Установить» и подтвердите. Откроется журнал задачи с выводом установщика; по завершении контроллер показывает версию и состояние службы «active», а в «Кластер (HA)» этого узла появляется его пир. Данные домена приходят со следующей репликацией (обычно до минуты).
  5. Сохраните пароль панели нового контроллера (v195). Вместо заводского Admin123! установка задаёт учётке панели admin нового сервера случайный пароль (16 символов). По окончании установки он показывается один раз внизу журнала задачи — только тому, кто запустил установку (кнопки «Показать» и «Копировать»). На сервер передаётся только его bcrypt‑хэш; в открытом виде пароль нигде не хранится, и после закрытия окна журнала увидеть его снова нельзя. Если пароль утерян — сбросьте его на сервере консольной командой восстановления доступа (Документ 1).
  6. Войдите в панель нового контроллера (https://<адрес>:9443) с этим паролем, смените его (требуется при первом входе) и примите Лицензионное соглашение.

Колонки списка

Кто может. Права «Контроллеры» в матрице ролей (просмотр / изменение; роли с правами «Кластер (HA)» получают их автоматически). Администраторы домена (группа Domain Admins, а также Enterprise Admins леса) видят в рабочей области домена контроллеры своего домена и могут добавлять, проверять, устанавливать и обновлять региональные контроллеры этого домена. Делегатам домена (v195) раздел доступен только для просмотра — без кнопок изменения; сервер также отклоняет такие запросы от делегата. Требования к серверу: Linux x86_64 с systemd (Ubuntu/Debian, RHEL‑совместимые, Astra Linux SE), вход по SSH с правами root или sudo; установку выполняет узел, который держит домен (центральный сервер).

Безопасность. Контроллер домена хранит все ключи своего домена (в том числе krbtgt), поэтому с v195 изменять контроллеры домена могут только его администраторы (Domain Admins) и администраторы панели — делегатам это право не выдаётся. Учётка панели admin нового контроллера получает случайный пароль, показанный один раз в журнале установки.

Описание API (v165)

Пункт меню «Описание API» (любой вошедший): все методы API панели — раздел, метод, путь, назначение и права, которые проверяет сервер (достаточно любого из перечисленных; «*» — полный администратор), пометка «админ домена» — метод доступен доменно‑ограниченному администратору. Поиск, фильтр по разделу, пример входа через curl. Кнопка «openapi.json» — файл OpenAPI 3.0 для Postman, Swagger UI и генераторов клиентов (он же — GET /api/openapi.json). Вход: POST /api/auth/login → токен → заголовок Authorization: Bearer; ошибки бизнес‑логики приходят с HTTP 200 и {"status":"error","message":…}.

Обновления (v147)

Раздел Настройки → Обновления проверяет и устанавливает новые версии HopeDC прямо из панели — как в Hope Mail Server и Hope MSG Gateway. Доступен только полному администратору панели (роль с полным доступом); делегированные и доменные администраторы его не видят, API отвечает 403.

Версии. Вверху — текущая версия (номер выпуска, например v147; подробности сборки — во всплывающей подсказке), доступная версия из онлайн‑источника и статус. Версию бинарника на сервере показывает hopedc-core --version.

Источник пакета.

Установка. Кнопка «Установить vNNN» (с подтверждением) передаёт пакет системной службе hopedc-update, которая работает от root отдельно от HopeDC: сверяет SHA‑256, ещё раз пробно запускает новую сборку от имени пользователя службы, сохраняет текущий бинарник (/opt/hopedc/hopedc-core.prev и три последних .bak.*), ставит новый, перезапускает HopeDC и ждёт, пока ответит API и служба 10 секунд проработает без перезапусков. Если новая версия не поднялась — автоматический откат на прежнюю. Ход установки (проверка → замена бинарника → перезапуск → готово / откат) виден в разделе; во время перезапуска панель несколько секунд недоступна и затем сама показывает итог. Каталог, ключи и настройки не затрагиваются, но новая версия может обновить формат данных — перед установкой сделайте резервную копию (ссылка есть в окне подтверждения). Можно поставить и более старую версию (v147+) — раздел предупредит об откате.

Кластер. В списке узлов видны версии всех контроллеров кластера (запрос по токену пары / секрету кластера). Обновляйте узлы по очереди из панели каждого: пока один перезапускается, клиентов обслуживают остальные, изменения догоняются репликацией. Разные версии на узлах подсвечиваются — это допустимо на время поэтапного обновления.

Контроллеры (v188). Пакет, подготовленный здесь, используется и разделом «Контроллеры»: оттуда по SSH обновляются серверы, добавленные в него, в том числе региональные и RODC, которые кнопка «Обновить весь кластер» пропускает. Сам этот (корневой) сервер обновляется только здесь и только полным администратором.

Astra Linux. Новый бинарник получает метку МКЦ прежнего (высокая целостность 63), каталоги пакетов — высокую метку. В строгом режиме ЗПС пакет должен быть подписан ключом, заверенным ГК «Астра», иначе пробный запуск не пройдёт и установка будет отклонена без замены бинарника.

Однократная подготовка. Службу hopedc-update (path‑юнит hopedc-update.path и скрипт /usr/local/bin/hopedc-update-apply) ставит скрипт развёртывания v147 и новее (Документ 1, п.11). Пока её нет, раздел предупреждает об этом, а кнопка «Установить» неактивна. Журнал установщика: journalctl -t hopedc-update.

8. Ключевые особенности продукта

ОсобенностьСуть
Автономная аутентификация («Локальный пароль»)Пароль хранится в HopeDC как NT‑хэш + AES‑ключи Kerberos + bcrypt. Позволяет входить даже после отключения Windows‑DC.
Мультиреалм KDCОдин KDC обслуживает несколько доменов, реалм берётся из запроса; поддержка RC4‑HMAC и AES128/256 (etype 17/18).
«Принять роль KDC» (seize) и отключение от ADHopeDC становится авторитетным KDC интегрированного домена (собственный krbtgt), проверка готовности показывает пользователей и компьютеры без пароля, DNS‑записи и доверия, зависящие от Windows‑DC; затем домен отключается от AD и становится собственным доменом HopeDC.
AD‑сайты из веб‑UI (Sites & Services)Раздел «Сайты и службы»: сайты, подсети, серверы, связи (site‑to‑site). Для интегрированного домена — импорт из Configuration NC MS AD и двусторонняя синхронизация изменений обратно в AD. Обычно AD‑сайты правят только через Windows‑RSAT.
Поддомены, деревья и лесСоздание дочерних доменов и новых деревьев в существующем лесу (v186) из UI с авто‑настройкой: DNS‑делегирование, двустороннее транзитивное доверие родитель↔потомок, меж‑реалмовые ключи Kerberos (кросс‑реалм referral в KDC), общий Configuration/Schema NC (RootDSE отдаёт NC корня леса).
Глобальный каталог (GC)Форест‑wide LDAP на портах 3268 (plain) и 3269 (TLS): поиск по объектам всех доменов леса из единого хранилища. На обычных портах 389/636 действуют границы разделов, как в AD: поиск по поддереву родительского домена не возвращает объекты дочерних доменов (для них — свой base DN или GC).
Интеграция LinuxВвод через SSSD ad‑provider (скрипт join-hopedc.sh), UID/GID из UNIX‑атрибутов, sudo через SSSD, политики через агент; аутентификация агента паролем или mTLS/SASL EXTERNAL.
Локальные доменыСоздание собственных доменов без Windows‑DC; такие домены сразу поддерживают Linux‑клиентов.
Гибкий каталог без схемыОбъекты хранят произвольные атрибуты; секреты (unicodePwd, hopeKrbKeys, ключи ЦС и т.п.) скрыты denylist‑ом при выдаче по LDAP.
Двоичные атрибуты без потерьЗначения двоичного синтаксиса, записанные по LDAP или полученные из AD (сертификаты, фото, ms-DS-ConsistencyGuid, CRL ЦС и т. п.), хранятся побайтно и отдаются клиентам без изменений. Поиск по двоичному значению (например, (objectSid=\01\05…), (userCertificate=…)) работает. Опция ;binary в имени атрибута поддерживается.
Встроенное хранилище WALНикаких внешних СУБД; журнал с автоматической компактизацией.
Смена ключа krbtgt из интерфейсаТаблица ключей по доменам (kvno, возраст), безопасная смена с приёмом предыдущего ключа, защита от преждевременной повторной смены, напоминания и плановая смена; изменения расходятся по кластеру.
Восстановление доступа администратораПринудительная смена заводского пароля при первом входе; сброс через одноразовую ссылку или — в закрытом контуре — офлайн‑токеном вендора, привязанным к оборудованию.
Шифрование данных на дискеБаза, SYSVOL, журналы репликации, служебные ключи и бэкапы зашифрованы AES‑256‑GCM мастер‑ключом, который хранится вне каталога данных. Экспорт ключа под паролем (Argon2id) и восстановление бэкапа другого сервера с перешифровкой на ключ текущего.
Миграция с MS AD без потери привычного поведенияСмена пароля по Kerberos (kpasswd, Ctrl+Alt+Del в Windows) во всех доменах; проверка пароля через AD при LDAP‑входе с кодами ошибок AD (data 52e/533/701/775); настоящие objectGUID из AD сохраняются после отключения от AD; блокировка учёток по политике домена; KDC по TCP и UDP 88.
Astra Linux SE (Смоленск)Работает при включённых МКЦ и МРД; служба сама держит свои файлы с высокой меткой целостности, и процесс с низким уровнем не может их изменить (проверено). Для строгого режима ЗПС нужна сборка, подписанная ключом, заверенным ГК «Астра» (см. раздел 9).

9. Astra Linux SE: МКЦ, МРД, ЗПС

Проверено на Astra Linux SE 1.8.1 в режиме «Смоленск» (максимальная защищённость) при включённых мандатном контроле целостности (МКЦ), мандатном разграничении доступа (МРД) и замкнутой программной среде (ЗПС). Требуемая glibc — 2.31 и новее (в Astra 1.8 — 2.36), отдельная сборка не нужна.

Установка

Скрипт deploy_astra140.ps1 (из Windows, по SSH) или те же шаги вручную под учёткой администратора в сессии с высоким уровнем целостности (63):

ЧтоГдеМетка МКЦ
Бинарник/opt/hopedc/hopedc-coreвысокая (63)
База и настройки/var/lib/hopedc (DC_DATA_DIR)высокая
Журналы/var/lib/hopedc/logs (DC_LOG_DIR)высокая
Мастер‑ключ/etc/hopedc/master.key (DC_MASTER_KEY_FILE)высокая

Метки задаются командой pdpl-file 0:63:0:0 <файл> (для каталогов — 0:63:0:iinh), а каталоги HopeDC прописываются в /etc/parsec/fs-ilev.conf строками max /var/lib/hopedc, max /etc/hopedc, max /opt/hopedc — тогда set-fs-ilev сохраняет им высокую метку. Журналы не размещаются в /var/log: в Astra этот каталог имеет низкую целостность, а файл не может быть выше своего каталога. Служба systemd запускается от root и получает высокий уровень целостности (метка процесса 0:63).

МКЦ (v140)

В Astra 1.8 новый файл получает низкую метку целостности независимо от уровня процесса и каталога, а HopeDC переписывает базу и настройки через временный файл и переименование. Поэтому начиная с v140 служба при запуске и сразу при появлении любого нового файла в каталогах базы, журналов и ключа копирует на него метку целостности своего исполняемого файла (атрибут security.PDPL), новым подкаталогам — метку корневого каталога. Уже помеченные файлы не меняются, метки не понижаются. В журнале службы: «МКЦ: каталог … — файлам HopeDC задаётся метка целостности исполняемого файла». Каталоги без метки (низкой целостности) служба не трогает и пишет об этом предупреждение. На других Linux атрибута нет, и механизм не действует.

Проверка защиты: процесс с целостностью 0 (служба systemd с PDPLabel=0:0:0:0) не может изменить файлы базы и журналов, создать файл в каталогах HopeDC, изменить master.key или подложить файл к бинарнику — «Отказано в доступе». Чтение МКЦ не ограничивает: от посторонних данные закрыты правами доступа (0600/0700, владелец root) и шифрованием на диске.

МРД

При включённом МРД служба работает на уровне конфиденциальности 0 и обслуживает обычных (немаркированных) сетевых клиентов: Windows, Linux и Astra на уровне 0. Пока не поддерживаются: подключения клиентов с ненулевым мандатным уровнем (потребуются права службы CapabilitiesParsec=PARSEC_CAP_MAC_SOCK …, как у штатных служб Astra) и выдача мандатных атрибутов доменных пользователей клиентам Astra (аналог ALD Pro). Это в плане развития.

ЗПС

Строгий режим ЗПС (DIGSIG_ELF_MODE=1) запускает только исполняемые файлы со встроенной подписью ключом, заверенным ГК «Астра». Проверено: ключ собственной организации ядро в /etc/digsig/keys не загружает («Key signature verification failed»); подпись в расширенных атрибутах собственным ключом ГОСТ (/etc/digsig/xattr_keys) ядро принимает, но для ELF‑файлов её недостаточно («NOT SIGNED»). Ключ RSA не подходит — нужен ГОСТ Р 34.10‑2012. Подписанная сборка HopeDC появится после получения ключа подписи у ГК «Астра».

До этого используйте мягкий режим: DIGSIG_ELF_MODE=2 в /etc/digsig/digsig_initramfs.conf, затем sudo update-initramfs -u -k all и перезагрузка. Запуск разрешён, нарушение пишется в журнал ядра (NOT ELF SIGNED: path=/opt/hopedc/hopedc-core). Возврат в строгий режим — то же с DIGSIG_ELF_MODE=1. При строгом режиме проверка подписи 40‑мегабайтного бинарника занимает несколько секунд при каждом запуске — учтено в TimeoutStartSec=180.