Откройте веб‑интерфейс (Admin Center) в браузере и войдите под учётной записью панели. По умолчанию: admin / Admin123!. Это учётная запись панели администрирования, она отличается от доменной учётки Administrator.
Пока заводской пароль не сменён, на странице входа показывается информационный блок с учётными данными по умолчанию. При первом входе под admin панель сразу требует задать новый пароль (не короче 8 символов) — работать с заводским паролем нельзя. После смены информационный блок на странице входа больше не показывается.
HOPEDC_ADMIN_IDLE_SECS (в секундах, не меньше 60). Отметки активности хранятся на сервере в admin_sessions.json, поэтому перезапуск службы не «оживляет» простаивающие сессии. Токены веб-доступа это не затрагивает — только вход в административную панель.Ссылка «Забыли пароль?» на странице входа открывает два способа:
password_reset_link.txt в каталоге данных (доступен только root/пользователю службы).admin. Токен вставляется на этой же вкладке: перед применением панель показывает, для какого сервера он выпущен, и предупреждает, если отпечаток не совпадает.Аварийный токен проверяется вшитым ключом вендора, действует только для этого сервера, ограничен по сроку и применяется один раз. Пароль admin становится тем, что указан в токене; если учётную запись admin удалили, она создаётся заново с ролью «Администратор». Сразу после входа смените пароль.
Второй фактор — одноразовый код из приложения-аутентификатора (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 с учётки (кнопка «✕» у учётки или «Снять»), после чего вход снова идёт обычным образом — так пользователь не остаётся заблокированным.
hopeMfaPolicy основного домена), привязка доменной учётки — на её объекте (hopeMfa: секрет TOTP и хэши резервных кодов); оба реплицируются на все узлы, поэтому второй фактор, настроенный на одном узле, действует на всех. Атрибут hopeMfa не отдаётся ни по LDAP, ни через API, менять его напрямую нельзя; RODC получает его только для учёток, которым разрешено кэшировать пароль. Встроенные учётки панели (свои на каждом узле) по-прежнему хранят привязку в файле узла mfa.json. При обновлении записи доменных учёток и политика переносятся из mfa.json автоматически (политики разных узлов объединяются). Управление политикой — право «Двухфакторная (MFA): политика и назначение» (mfa.view/mfa.edit; раньше — только полный доступ).Отдельная страница для пользователей домена: https://<адрес DC>:9443/password. Пользователь меняет свой пароль, зная текущий — когда срок действия истёк, когда администратор отметил «сменить при следующем входе» или просто по желанию. Входить в панель администратора не нужно, сама панель на этой странице не загружается.
пользователь@домен): длина, сложность, разнообразие символов, история, словарь, сроки. Выполненные условия отмечаются по мере набора. Окончательную проверку делает сервер — по действующей для учётки политике, включая PSO.Сетевой доступ. Страница доступна адресам из списка панели или из списка клиентов домена (раздел «Сетевой доступ»). Так пользователи из своих подсетей дойдут до неё, даже если панель администратора закрыта для них. Если список клиентов домена выключен (открыт всем), страница тоже открыта всем — как и вход по Kerberos/LDAP.
Ссылку можно дать пользователям напрямую; к ней можно добавить имя: /password?user=ivanov@corp.local. Кнопка «Сменить пароль пользователя домена» на странице входа панели тоже ведёт сюда.
В панель встроен путеводитель, который ведёт оператора с первого входа. У него две части.
1. Панель «Начало работы» — чек-лист первичной настройки сервера. Кнопка «Начало работы N/M» находится в шапке панели (и в шапке рабочей области домена), N/M — сколько обязательных пунктов выполнено. При первом входе полного администратора панель открывается сама. Каждый пункт объясняет, зачем он нужен и где настраивается; кнопка «Перейти» открывает нужный раздел.
| Пункт | Когда считается выполненным |
|---|---|
| Домен организации | Создан собственный домен (не демо hope.local) или подключён существующий каталог |
| Копия мастер-ключа | Мастер-ключ хотя бы раз скачан из панели (Резервное копирование) |
| Резервное копирование | Включено расписание резервных копий |
| Время (NTP) | Включена служба NTP |
| DNS-пересылка | Задан DNS-форвардер (домен → вкладка DNS-сервер) |
| Центр сертификации | Выпущен корневой сертификат ЦС домена |
| Учётные записи панели | Кроме admin заведена ещё хотя бы одна учётка панели |
| Сетевой доступ | Включён белый список адресов панели и в нём есть записи |
| Клиенты в домене | В собственном домене есть хотя бы один компьютер (кроме контроллеров) |
| Лицензия (необязательно) | Загружена действующая лицензия |
| Кластер HA (необязательно) | Кластер включён и в нём есть узлы |
Состояние пунктов определяется по реальным настройкам сервера при каждом открытии панели — отмечать вручную ничего не нужно. Если пункт сделан иначе, чем проверяет панель (например, время синхронизируется внешним NTP, а резервные копии делает система бэкапа предприятия), полный администратор может нажать «Отметить». Ручные отметки общие для сервера; снимаются кнопкой «Снять отметку». Чек-лист виден только полному администратору панели (роль с полным доступом).
2. Подсказки по страницам — пошаговые экскурсии. При первом открытии каждого раздела (и каждой вкладки рабочей области домена) панель подсвечивает ключевые элементы страницы и в карточке объясняет, что с ними делать. Управление: Далее / Назад (или стрелки ←/→), Пропустить или Esc — закрыть подсказку этой страницы, «Не показывать подсказки» — выключить подсказки для своей учётной записи. Кнопка «?» в шапке в любой момент повторяет подсказку текущей страницы. Повторить все подсказки заново можно в панели «Начало работы» (ссылка внизу) — для этого же предназначено действие tours_reset.
Подсказки показываются всем пользователям панели, но только по тем разделам, которые разрешены их ролью. Прогресс (какие подсказки пройдены, выключены ли они, открывался ли чек-лист) хранится на сервере отдельно для каждой учётной записи — в файле onboarding.json каталога данных (зашифрован, как остальные настройки). Поэтому на другом компьютере или в другом браузере подсказки повторно не показываются, а у нового оператора начинаются сначала.
GET /api/onboarding возвращает состояние путеводителя текущей учётки (и чек-лист — для полного администратора). POST /api/onboarding с полем action: tour_done (+id), tours_reset, tours_off, tours_on, checklist_seen, mark (+id, done; только полный администратор).Тот же порядок ведёт панель «Начало работы» (см. выше).
admin — панель потребует это при первом входе.Administrator — Домены → hope.local → Структура домена.Стартовый раздел «Обзор DC» показывает сводное состояние контроллера домена: активные службы, число объектов каталога, состояние интеграции и репликации. Используйте его как точку быстрой проверки «всё ли в норме» перед началом работ. Право доступа: dashboard.view.
Глобальный раздел интеграции описывает подключение HopeDC к существующему домену Microsoft Active Directory: параметры контроллера‑источника (PDC), учётную запись и режим синхронизации. После настройки HopeDC зеркалирует объекты домена AD в собственный каталог и может служить дополнительным узлом обслуживания клиентов.
Раздел Домены — центральный. Здесь перечислены все домены, которыми управляет HopeDC (локальные и интегрированные). Возможности списка:
hope.local). В модалке переключатель «Где создать домен»: новый лес, дочерний домен в существующем лесу (напр. corp.lol.local) или новое дерево в существующем лесу (напр. lol.ru в лесу lol.local), см. п.4.12. Пароль администратора скрыт, с переключателем показа.krbtgt/administrator), DNS‑делегирование (зона потомка + NS в родительской зоне), двустороннее доверие родитель↔потомок и меж‑реалмовые ключи для кросс‑реалм Kerberos. Раздел «Сайты» у потомка показывает общие сайты корня леса. В списке доменов у потомка бейдж «↳ поддомен · родитель: …»._msdcs), делегирование в родительской зоне, PTR‑записи на его имена, записи доверий и межреалмовые учётки krbtgt/… в оставшихся доменах. Зоны доменов, удалённых предыдущими версиями, убираются при запуске ядра. Пулы DHCP не удаляются. Защищённый от удаления домен (см. 4.10) удалить нельзя; делегат удалить домен не может.krbtgt (RC4 и AES) и начинает обслуживать Kerberos этого домена (сценарий вывода Windows‑DC из эксплуатации, см. п.4.9 «Вывод Windows‑DC»). Рядом — индикатор готовности: сколько активных пользователей уже имеют кэшированные ключи. У домена, отключённого от AD, в столбце типа — «Мигрирован из AD».defaultNamingContext и dnsHostName в RootDSE определяются по учётной записи, которой клиент вошёл (компьютер или пользователь), а для защищённого канала NETLOGON — по учётной записи компьютера. Если домен клиента определить нельзя (анонимный запрос, LDAP-ping без имени домена), используется основной домен сервера: самый старый собственный корневой домен (собственные домены — раньше интегрированных с AD, корни лесов — раньше поддоменов). Создание или удаление другого домена на сервере не меняет поведение для клиентов существующих доменов. Пароли учётных записей компьютеров (смена пароля машины, ввод в домен) записываются в учётную запись именно её домена, ключи Kerberos вычисляются по realm этого домена. Разрешение имён (DsCrackNames — окна выбора пользователей и групп Windows) учитывает домен: имя с доменом (HOPE\user, user@lol.local) ищется только в этом домене, короткое имя — сначала в домене клиента, а в другом домене — только если оно единственное на сервере. Поэтому одноимённые учётные записи в разных доменах (например, Administrator) не путаются.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>). Полный администратор (право *) видит все домены.Рабочая область домена разбита на группы вкладок: Структура и политики, Сеть и безопасность, Система. Доступ к каждой вкладке ограничивается правами роли.
Аналог «Active Directory Users and Computers». Слева — дерево OU/контейнеров (ширину можно тянуть мышью), справа — таблица объектов выбранного узла.
member/memberOf, manager, managedBy) обновляются автоматически. Для интегрированного домена перенос выполняется в MS AD; если связи с контроллером AD нет, панель сообщает об ошибке, а не переносит объект только локально. Пароль, заданный при создании пользователя, ставится именно созданной учётке (раньше при совпадении имени с объектом в другом контейнере мог уйти не туда).operatingSystem, который заполняют realm/adcli при вводе).dir.view. Удаление/перемещение реплицируется в MS AD для интегрированных доменов (при настроенной синхронизации).Как в 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).
description, info, location, managedBy); у OU — описание и привязка групповых политик. Пароль записи задать нельзя.hopedc-ldap-svc, и войти под записью контроллера нельзя. SPN, добавленные к ней вручную, снимаются автоматически.Управление объектами групповых политик Windows. Три вкладки:
gPLink). Кнопка «Привязать GPO к OU» открывает мультивыбор: несколько GPO × несколько целей (корень домена и настоящие OU), флаг «Принудительно (Enforced)». Вложенные OU отображаются путём вида «Linux / Ubuntu».Пошаговые инструкции: ввод Linux‑машин в домен — Документ 10, настройка и доставка политик — Документ 11.
Каталог шаблонов политик Linux доступен и из главного меню — пункт «Каталог шаблонов» под «Домены» (с выбором домена), см. Документ 11.
Гибридное управление политиками для Linux‑клиентов. Часть читает штатный SSSD, часть применяет агент hopedc-agent. Вкладки:
sudoRole, которые читает SSSD (sudo_provider=ad). Поля sudoUser, sudoCommand, sudoOption. Имя правила = имя объекта в каталоге; допускается только латиница/цифры/. _ - (без кириллицы).hopeLinuxPolicy (тип file/package/cron/sysctl/smb), применяются агентом к машинам — членам целевой группы. Есть встроенные и пользовательские шаблоны.%USERGROUP%).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 на самой машине.Linux Policys, которая создаётся автоматически при создании первого правила. В «Структуре домена» эти объекты по умолчанию скрыты как сервисные.Поля выбора групп/машин/OU реализованы как поиск с фильтрацией — корректно работают даже при тысячах групп и хостов. Списки разделяют группы машин (содержат компьютеры) и группы пользователей; для машинных групп показывается состав по ОС (Linux/Windows).
Аналог консоли «Active Directory Sites and Services». Слева — дерево: Sites (сайты и их серверы), Subnets (подсети), Inter‑Site Transports → IP / SMTP (связи сайтов). Справа — обзор топологии и управление выбранным узлом.
dNSHostName).Для локального домена HopeDC раздел ведёт собственную структуру сайтов (кнопка «Создать структуру сайтов» заводит контейнеры и Default‑First‑Site‑Name).
Для интегрированного домена (заданы параметры синхронизации с MS AD) раздел работает с Configuration NC реального AD: при синхронизации топология сайтов импортируется из `CN=Sites,CN=Configuration,…`, а изменения (создание/изменение/удаление сайтов, подсетей, связей) записываются обратно в AD — двусторонняя синхронизация. Об этом сообщает зелёный баннер в разделе.
domains.view.Управление записями 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 минут), ответ подписывается тем же ключом.
hopedc, pdc, записи DC‑locator). SRV/NS/SOA/CNAME/TXT без подписи пропускаются.Псевдонимы 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 без разворачивания.
Управление пулами адресов (scope), диапазонами, шлюзом, DNS‑серверами, сроком аренды в контексте домена.
Внутренний удостоверяющий центр домена: выпуск и отзыв сертификатов, шаблоны, корневой сертификат и список отзыва (CRL). Используется, в частности, для выпуска клиентских сертификатов агента Linux (mTLS/SASL EXTERNAL). У каждого домена свой ЦС; домены разных лесов друг друга не видят.
.crt и .crl; списки точек CDP и AIA.http://hopedc.<домен>/pki/<домен>.crl и .crt (порт 80, меняется переменной DC_PKI_HTTP_PORT; доступ ограничен тем же списком сетей, что и LDAP);CN=Public Key Services,CN=Services,CN=Configuration,… — контейнеры CDP, AIA и Certification Authorities, как у MS Enterprise CA. Члены домена Windows автоматически получают корневой сертификат в доверенные.Управление доверительными отношениями домена с другими доменами/лесами: создание доверия (внешнее по паролю или внутрилесное), направление, SID filtering (карантин), выборочная аутентификация и суффиксы имён (TLN) для forest‑доверия. Пользователи доверенного домена проверяются по Kerberos‑PAC (подпись ключом доверия), а не биндом к чужому контроллеру.
S-1-5-21-…. Второе доверие для той же пары доменов не создаётся — измените или удалите существующее.trustedDomain, в т.ч. с другими доменами и лесами) импортируются автоматически: сразу при интеграции и затем каждые 10 минут. Новые доверия добавляются, изменённые в AD (направление, тип, атрибуты, SID) — обновляются, удалённые в AD — удаляются. Адрес DC партнёра и пароль доверия, заданные в HopeDC вручную, при обновлении сохраняются; созданные вручную доверия не затрагиваются. Кнопка «Импорт из AD» запускает то же самое немедленно. Переносятся: партнёр, NetBIOS-имя, направление, тип, атрибуты (лесное, карантин/SID-фильтрация, выборочная аутентификация), SID партнёра; транзитивность определяется как в AD (лесное и внутрилесное — транзитивные, внешнее — нетранзитивное). Записи помечены значком AD.trustedDomain в CN=System домена (LDAP) и отдаётся по RPC: NETLOGON DsrEnumerateDomainTrusts / NetrEnumerateTrustedDomains[Ex] (их используют nltest /domain_trusts и выбор объектов) и LSA LsarEnumerateTrustedDomains[Ex] (перечисление доверий через политику LSA, его используют средства администрирования доверий). Флаги домена в ответе соответствуют направлению доверия (исходящее/входящее) и принадлежности лесу.netdom trust <партнёр> /domain:<ваш домен> /resetOneSide /passwordT:<пароль>). Там же указывается адрес DC партнёра — он нужен для «Проверить связь» и входа в панель пользователей партнёра. Перечень доверий без пароля показывает проверка перед отключением Windows-DC (Интеграция → «Отключить от AD»).Модель прав повторяет Windows:
<SID корня леса>-519, а не по имени группы или любому SID с окончанием -519 — одноимённую группу в поддомене подделать нельзя.objectSid и sIDHistory по LDAP/панели не подделываются (первый назначает только контроллер, второй пишут лишь Enterprise Admins). Членство memberOf в группе другого домена учитывается, только если сама группа перечисляет объект в member — то есть его подтвердил администратор того домена.Вкладка зависит от состояния домена. Если домен ещё не интегрирован, на ней открывается мастер интеграции (источник каталога, адрес DC, LDAPS, необязательный отпечаток сертификата, учётные данные). Если интегрирован — панель интеграции:
Параметры синхронизации данного домена с внешним контроллером домена:
hopePdcIp;hopeSyncUser и пароль hopeSyncPass (хранится в зашифрованном виде);hopeUseLdaps) — синхронизация по 636 с TLS.HopeDC не просто шифрует канал к DC, а проверяет, что на другом конце — именно ваш контроллер. Иначе злоумышленник в сети мог бы подставить свой сертификат и получить пароль учётной записи синхронизации. Порядок проверки:
dnsHostName контроллера или адрес подключения) и назначение «Проверка подлинности сервера». Сертификат другого компьютера домена, выпущенный тем же ЦС, не подходит. Сертификаты ЦС HopeDC сам берёт из конфигурации леса (CN=Public Key Services,CN=Services,CN=Configuration) после первого подтверждённого входа. Поэтому ежегодный перевыпуск сертификата DC проходит без действий администратора: новый отпечаток запоминается автоматически, в журнале — «сертификат DC перевыпущен (подтверждён ЦС AD)».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 в настройках проверка сбрасывается автоматически.
userCertificate, cACertificate), фотографии (thumbnailPhoto, jpegPhoto), ms-DS-ConsistencyGuid и т. п. — переносятся при интеграции и синхронизации без потерь и отдаются LDAP-клиентам теми же байтами. objectGUID, дескрипторы безопасности и секреты не переносятся.hopeSyncInterval), независимо от других; ошибка связи с одним доменом не останавливает остальные.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 <адрес>: скрипт сравнит число объектов и участников больших групп.sAMAccountName, objectSid, memberOf, gPLink, Kerberos, SYSVOL), поэтому используется тот же путь импорта и входа. FreeIPA (v198) — в мастере подключения выберите источник «FreeIPA»; подробности и ограничения — ниже, в «Подключение FreeIPA». Произвольный LDAP‑каталог (OpenLDAP и совместимые) подключается так же, источником «LDAP».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 неприменимы.
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 хостов к домену» — сворачиваемые (по умолчанию свёрнуты).
Чтобы домен, интегрированный с MS AD, продолжил работать без контроллеров Windows, на панели интеграции есть карточка «Вывод Windows‑DC из эксплуатации» из трёх шагов.
krbtgt HopeDC (RC4 и AES) и ключ службы LDAP ldap/hopedc.<домен>. Учётная запись krbtgt, пришедшая синхронизацией из AD, ключа не имеет (AD не отдаёт пароли по LDAP), поэтому ключ создаётся прямо в ней, без дублей. Синхронизация с AD продолжается и ключи HopeDC не затирает. С этого момента домен в переходном периоде: на вкладке «Ключи Kerberos» можно менять ключ krbtgt HopeDC; ключ krbtgt в AD независим и меняется в самой AD.krbtgt HopeDC;GPT.INI. Файлы переносит синхронизация SYSVOL с контроллером AD по SMB (Документ 3, без агента); если она не включалась — вручную (Документ 12, раздел 5). При отключении HopeDC выполняет последнюю синхронизацию SYSVOL и выравнивает версии.krbtgt на вкладке «Ключи Kerberos»: ключ, созданный при приёме роли KDC, существовал, пока работали Windows‑DC. Первая смена после приёма роли выполняется сразу (предыдущего ключа нет, ждать 10 часов не нужно). Подсказка о смене пропадает после неё. Действия записываются в журнал: 🛡 Роль KDC домена … принята, 🏁 Домен … отключён от AD.krbtgt: билет, выданный одним, другой не примет. Принимайте роль KDC, когда клиенты уже обращаются к HopeDC (DNS, настройки KDC), то есть в ходе вывода Windows‑DC.Чтобы пользователям не пришлось менять пароли при переходе на 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).
openssl enc -aes-256-cbc -pbkdf2 -salt -base64 -in dump.txt -out dump.enc. HopeDC расшифровывает файл только в памяти по введённой фразе. После переноса поле выгрузки и фраза очищаются; файл HopeDC нигде не сохраняет.Выгрузку делает администратор своего домена своими правами на своём контроллере — 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 с правильной солью. |
Права: шаги 1 и 3 выполняет полный администратор или роль с правом integration.edit; делегированным администраторам домена они недоступны.
gPLink, атрибуты) HopeDC проталкивает в реальный контроллер домена, используя эти параметры. Если они не заданы — операция вернёт ошибку «нет пароля или IP». Атрибуты, начинающиеся на hope*, наружу не выгружаются.userPassword передаётся в AD как unicodePwd (AD по умолчанию хранит userPassword открытым текстом), memberOf AD вычисляет сам. Служебные объекты HopeDC внутри дерева домена, которых нет в AD, по-прежнему меняются только в HopeDC. До v157 такие изменения в AD не попадали и затирались следующей синхронизацией.dNSHostName только вида «<имя компьютера>.<DNS-имя домена>», msDS-AdditionalDnsHostName — только в DNS-имени домена, а servicePrincipalName — только на свои имена (dNSHostName, дополнительные DNS-имена, NetBIOS-имя). Так компьютер не может забрать SPN чужой службы. Администраторы домена задают любые значения, как прежде.hopeSyncSecret; на диске зашифрован мастер-ключом узла, по LDAP и API не отдаётся), поэтому запись в AD и правки из панели работают на любом узле. Синхронизацию, импорт DNS и доверий из AD ведёт один узел — «ведущий»: сначала тот, где сохранены параметры интеграции. Он продлевает аренду каждой успешной синхронизацией; если ведущий не синхронизирует дольше трёх интервалов + минуты (+ до 2 минут сдвига), его роль забирает другой узел. Ведущий виден в сводке вкладки: «Ведёт узел кластера …». Параметры, сохранённые узлом версии до 157, переносятся в кластер при первой синхронизации этого узла после обновления.PKINIT (RFC 4556) — предварительная проверка открытым ключом: пользователь входит по сертификату со смарт-карты или токена (Рутокен, JaCarta) либо из файла, без пароля. KDC проверяет подпись запроса и цепочку сертификата до доверенного ЦС, сопоставляет сертификат с учётной записью и выдаёт TGT. Так работают вход по смарт-карте в Windows, kinit (MIT), SSSD и Astra. Реализован режим обмена ключами Диффи — Хеллмана (DH), который эти клиенты используют по умолчанию; передача ключа шифрованием RSA не поддерживается (на неё KDC отвечает ошибкой, и клиент переходит на DH).
Кнопка «Вход по смарт-картам (PKINIT)» (значок карты) у домена открывает окно управления:
id-pkinit-KPKdc и SAN krbtgt/REALM@REALM — по нему клиент доверяет подписи ответа. Отключение сохраняет сертификат KDC и список ЦС.Чтобы карта подошла, сертификат пользователя должен: (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).
kinit -X X509_user_identity=FILE:user.pem,user.key пользователь; в krb5.conf для реалма задаётся pkinit_anchors = FILE:<корневой ЦС домена> (чтобы клиент доверял сертификату KDC). Полученный билет — с etype AES256. Для смарт-карты вместо файла указывается PKCS11:-модуль токена. PKINIT доступен и собственным доменам HopeDC, и интегрированным; требуется право integration.edit, изменения пишутся в журнал безопасности.В карточке учётной записи флажок «Вход только по смарт-карте (PKINIT) — пароль не действует» (атрибут userAccountControl, бит UF_SMARTCARD_REQUIRED, как в AD) делает учётку беспарольной: вход только по сертификату/смарт-карте.
KDC_ERR_PREAUTH_REQUIRED предлагает клиенту только PKINIT — клиент сразу просит смарт-карту, пароль не запрашивается.STATUS_SMARTCARD_LOGON_REQUIRED.То есть флаг защищает вход в ОС (интерактивный вход на рабочую станцию Windows/Linux идёт по Kerberos → только PKINIT) и сетевую аутентификацию; парольный вход закрыт на всех путях.
kinit паролем отклоняется, kinit -X (PKINIT) выдаёт TGT.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* не отдаются). |
msDS-ManagedPassword авторизованному серверу и отказ неавторизованному, корректный формат blob (256-байтный пароль, выровненные интервалы), автосмена пароля по интервалу. Потребление с Windows (Install-ADServiceAccount) опирается на тот же blob и проверяется на стенде с Windows-членом домена отдельно.Аналог «Корзины Active Directory». Удаление пользователя, группы, подразделения (OU) или компьютера не стирает объект сразу, а помещает его в корзину: объект пропадает из каталога (его не видят LDAP, вход по Kerberos, панель), но хранится со всеми атрибутами и может быть восстановлен целиком. Это защищает от случайного удаления — типовой причины аварий в домене.
v194: корзина — у каждого домена своя. Раздел — вкладка «Корзина» в рабочей области домена («Домены» → домен → группа «Система» → «Корзина», над «Свойствами домена»; право recyclebin.view, действия — recyclebin.edit); в главном меню его больше нет. Вкладка показывает только объекты, удалённые из этого домена (без поддоменов и других доменов): администраторы и делегаты одного домена не видят удалённые объекты другого — и не могут их восстановить или удалить, даже зная идентификатор. Для доменов, интегрированных с MS AD, вкладка скрыта (корзину ведёт AD). Колонки: имя, тип, когда удалён и сколько осталось до очистки, исходное место (путь вида домен / подразделение). Действия:
В настройках раздела задаётся срок хранения (по умолчанию 180 дней, как в AD) и признак «корзина включена». По истечении срока объект удаляется окончательно автоматически. Если корзину выключить, удаление снова стирает объект сразу и безвозвратно.
| Деталь | Как работает |
|---|---|
| Что попадает в корзину | Учётки, группы, подразделения (OU), компьютеры собственных доменов HopeDC. Прочее (групповые политики, записи DNS и т. п.) удаляется как раньше — без корзины. |
| Вход удалённой учётки | Пока учётка в корзине, войти по ней нельзя (её нет в каталоге). После восстановления вход снова работает. На вход других пользователей корзина не влияет. |
| Интеграция с MS AD | Для доменов, интегрированных с MS AD, корзина не применяется: источник истины — AD, и удаление распространяется на него как прежде. |
| Кластер | Мягкое удаление, восстановление и очистка реплицируются между узлами как обычные изменения. На RODC удалённый объект тоже скрыт; окончательную очистку по сроку ведёт записываемый узел. |
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 — удалить задачу. |
Сведения о домене (право domains.view):
domains.edit; делегат видит вкладку только для чтения.Вкладка «Загрузка данных» задаёт, как панель работает с большими списками домена (право на изменение — как у параметров):
Назначение пользователей и групп пользователей, которым разрешено входить в панель и управлять только этим доменом. Делегат получает доступ к разделу «Домены» только для своего домена; разделы Лицензия, Учётные записи, Роли, глобальный DHCP остаются недоступны.
delegation.edit. Остальные видят список только для чтения.HopeDC поддерживает лес доменов, как Active Directory. Новый домен можно создать тремя способами (раздел Домены → «Добавить домен» → «Создать локальный домен», переключатель «Где создать домен»):
| Вариант | Пример | Что получается |
|---|---|---|
| Новый лес | corp.local | Отдельный лес: своя схема и конфигурация, свои Enterprise Admins. С другими лесами сервера не связан (связь — только доверием, п.4.8). |
| Дочерний домен в существующем лесу | msk.corp.local | Имя внутри существующего домена. DN вложен в DN родителя, в зоне родителя — DNS‑делегирование. |
| Новое дерево в существующем лесу (v186) | corp.ru в лесу corp.local | Своё пространство имён, но тот же лес: общая схема и конфигурация, Enterprise Admins корня леса, глобальный каталог. Как в AD, родитель по доверию — корень леса. |
msk); для дерева выберите лес и введите полное имя (например corp.ru). Итоговое имя, DN и NetBIOS‑имя показываются под полем.Через 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.
krbtgt и administrator, группы Domain Admins/Users/Computers/Guests, SPN — домен работает как отдельный реалм (мультиреалм‑KDC)._ldap, _kerberos, _msdcs). У поддомена дополнительно NS‑делегирование + glue‑A в зоне родителя; у дерева делегирование не нужно. С v186 записи DC‑locator и crossRef (NetBIOS‑имя) появляются сразу, без перезапуска службы, — для всех способов создания домена.corp.ru → corp.local → msk.corp.local).rootDomainNamingContext, конфигурацию и схему корня леса; раздел «Сайты» показывает общие сайты корня.corp.ru → CORP). С v186 нельзя создать домен, чьё NetBIOS‑имя уже занято другим доменом сервера (corp.ru рядом с corp.local): вход CORP\user стал бы неоднозначным.3268 (LDAP) и 3269 (LDAPS) — поиск по всем доменам леса, включая деревья; домены других лесов сервера в нём не видны.hope.local рядом с corp.hope.local другого леса) — для этого служит создание поддомена. Удаление домена выполняется только по корню домена и не задевает вложенные домены другого леса.HopeDC ставится не только в корневом домене, но и в регионах с дочерними доменами. Региональный сервер держит только свой домен: учётные записи и ключи Kerberos родительского домена к нему не реплицируются, не принимаются и не хранятся. Общими остаются только конфигурация и схема леса. Настройка — в Кластер (HA) → «Разделы (домены) этого сервера» (или переменной DC_HOSTED_DOMAINS); пошаговый порядок пары «центр ↔ регион» и токены сопряжения описаны в Документе 7 «Кластер HA», раздел 10.
sIDHistory, материал 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), дата последней смены, возраст ключа в днях и статус:
krbtgt больше порога напоминания.Кнопка «Сменить ключ» создаёт новый случайный ключ. Текущий ключ становится «предыдущим» и принимается до следующей смены, поэтому уже выданные билеты продолжают работать, а пользователи ничего не замечают. Новые билеты выдаются на новом ключе.
Повторная смена в течение 10 часов заблокирована: она отозвала бы ключ, которым ещё зашифрованы действующие билеты. Под кнопкой показывается, через сколько повторная смена станет доступна. Ссылка «Принудительно…» выполняет смену сразу — только при подтверждённой компрометации: пользователям и службам придётся заново получить билеты (выход/вход, klist purge), часть служб может временно не пускать пользователей.
krbtgt дважды — второй раз не раньше чем через 10 часов после первого. После второй смены прежний ключ перестаёт приниматься, и поддельные билеты, выпущенные на украденном ключе, отклоняются. Затем смените пароли администраторов и служебных учётных записей.Microsoft рекомендует менять krbtgt регулярно, например раз в полгода. Карточка «Регулярная смена krbtgt» задаётся для каждого домена отдельно: у разных доменов могут быть разные пороги напоминания и периоды плановой смены.
⏰ Ключ krbtgt домена … не меняли … дн. (порог … дн.).🔐 Плановая смена ключа krbtgt … выполнена.krbtgt своего домена от центрального сервера.Каждая смена ключа и изменение настроек записываются в журнал с именем пользователя и доменом. Через API ключ меняется только в указанном домене (domain в запросе); если собственных доменов несколько, а домен не указан, смена отклоняется.
Раздел домена «Политика паролей» (право gpo.view — просмотр, gpo.edit — изменение) задаёт требования к паролям пользователей домена, срок их действия и блокировку после неверных попыток. Параметры, общие с AD (длина, сложность, история, минимальный и максимальный срок, блокировка), сохраняются в Default Domain Policy (GptTmpl.inf, раздел [System Access]) и зеркально — в атрибуты корня домена (minPwdLength, pwdProperties, pwdHistoryLength, minPwdAge, maxPwdAge, lockoutThreshold…), поэтому их видят и Windows‑клиенты.
pwdLastSet=0) не дают войти, пока пароль не сменят: Windows и kinit получают KDC_ERR_KEY_EXPIRED и сами предлагают смену (через kpasswd), LDAP‑вход отклоняется с кодом AD data 532/773, NTLM — STATUS_PASSWORD_EXPIRED, панель показывает форму смены пароля. Не истекают: встроенный Administrator, учётки с флагом «Срок действия пароля не ограничен», учётки компьютеров и служб, а также учётки без даты смены пароля (до первой смены). Перед включением раздел показывает, у скольких пользователей пароль уже истёк.Где проверяется новый пароль: сброс в панели, «Локальный пароль», страница смены пароля, 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‑машин.
msLAPS-Password, msLAPS-PasswordExpirationTime (и ms-Mcs-AdmPwd для прежнего LAPS) — как после Set-LapsADComputerSelfPermission. Читают пароль только администраторы домена (по LDAP) и роли с правом «Пароли LAPS и ключи BitLocker (просмотр)» (в панели, вкладка LAPS компьютера, кнопка «Сменить сейчас»). Срок действия пароля (…ExpirationTime) читать может и сам компьютер. Зашифрованный вариант (msLAPS-EncryptedPassword) не поддерживается — в политике Windows LAPS выключите шифрование пароля. LAPS для Linux‑машин (через агент) — в следующих версиях.:53/:67 и начала бы отвечать на запросы/раздавать адреса в сети, где уже может работать штатный DNS/DHCP — это риск конфликта. Включите службы вручную в этом разделе после того, как настроите зоны и пулы. Флаг хранится в атрибутах домена hopeDnsEnabled/hopeDhcpEnabled и подхватывается службой «на лету» (перезапуск ядра не нужен). На уже существующих установках при обновлении состояние служб не меняется.Глобальный раздел управления встроенной службой 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 и пулами по всем сетям.
Контроллер обслуживает доменные пространства DFS (режим Windows Server 2008, [MS-DFSNM]): пользователь открывает \\hope.local\Files\Docs, а контроллер направляет его к серверам пространства. Пространства создаются файловым сервером (HopeDFS «Пространства DFS» → «Доменное», или консолью DFS Management) как объекты каталога CN=<имя>,CN=<имя>,CN=Dfs-Configuration,CN=System,<домен> (класс msDFS-Namespacev2).
\\домен\имя, в DNS- или NetBIOS-форме) контроллер отвечает списком серверов пространства из msDFS-TargetListv2 с TTL из msDFS-Ttlv2 (по умолчанию 300 с). Цели в состоянии «offline» не выдаются.\\домен\имя\Папка) выдаёт уже сервер пространства — контроллер в это не вмешивается.Проверка на клиенте Windows: dir \\hope.local\Files, затем dfsutil /pktinfo — в кэше видны корень пространства и сервер, на который он указывает.
\\hope.local\SYSVOL и \\hopedc.hope.local\SYSVOL — только hope.local. Папка другого домена доступна по его имени (\\lol.lol\SYSVOL) и только если этот домен виден пользователю (свой лес или доверие); иначе и при обращении по IP-адресу или короткому имени показывается папка домена пользователя. Остальные папки корня SYSVOL — в том числе оставшиеся от удалённых доменов — не перечисляются и не открываются (ответ «объект не найден»). До v132 в SYSVOL были видны папки всех доменов сервера, в v132 — всех доменов своего леса и доверяющих доменов.objectClass, а не по последнему в запросе: учётка компьютера, созданная HopeDFS, adcli или скриптом, сохраняется как компьютер (раньше в зависимости от порядка значений могла стать «пользователем»). При обновлении такие объекты исправляются автоматически (запись «класс объекта исправлен» в журнале). Фильтры по objectCategory работают и в краткой форме, как в AD: (objectCategory=computer), (objectCategory=person) (пользователи и контакты, без компьютеров), user → Person, group, organizationalUnit, а также в форме полного DN категории.Встроенный сервер времени домена (v128). Решает две задачи: держит часы самого контроллера точными по внешним источникам и раздаёт время членам домена на UDP 123. Качество реализации — на уровне chrony/ntpd, а не простого SNTP-ответчика: по каждому источнику копится фильтр из 8 последних измерений (берётся замер с наименьшей задержкой), достоверные источники выбираются пересечением интервалов (алгоритм Марзулло, «вруны» отсекаются), а системные часы подстраиваются ядерным контуром (плавный увод частоты; ступенька только при большом сдвиге). По умолчанию служба выключена; включается в этом разделе (право ntp.edit). Точное время критично: Kerberos отклоняет билеты при расхождении более 5 минут.
chronyc sources), и статистика раздачи (обслужено, подписано MS-SNTP, защищено NTS, отклонено).CAP_SYS_TIME (её выдаёт скрипт развёртывания); без неё панель показывает предупреждение, а служба продолжает раздавать время.LOCL) — как «Local CMOS Clock» у PDC-эмулятора AD или local stratum 10 у chrony. Так все члены домена остаются согласованными между собой и Kerberos работает. Часы самого контроллера в этом режиме не правятся. Как только источник станет доступен, сервер вернётся к нему. 0 в поле — режим выключен: без источников клиенты получат «не синхронизировано» (страт 16). Остальные узлы кластера в свободный ход не переходят — они берут время у мастера.chrony.conf клиента server <dc> nts и доверьте сертификат ЦС домена.kpasswd user@REALM (Linux/macOS) или через Ctrl+Alt+Del в Windows — новый пароль сразу действует для Kerberos, LDAP и входа в панель, старый перестаёт. Сменить свой пароль можно только по первичному билету, полученному паролем (как в AD); задать пароль другой учётке может только её администратор. Учётки ищутся строго в своём домене: одноимённые Administrator разных доменов не путаются.POST /api/auth/login при ошибке содержит машинное поле code: bad_credentials (неверное имя или пароль, в том числе несуществующая учётка), no_panel_access (пароль верный, но нет роли в панели), disabled (учётка отключена — пароль при этом не проверяется и не подтверждается), locked (учётка заблокирована после неверных попыток — v138), ad_unavailable (AD недоступен при проверке пароля). Поддерживаются форматы имени user@домен, ДОМЕН\user (NetBIOS) и user. Пароль проверяется так же, как при LDAP-входе: по действующему NT-хэшу.80090308: LdapErr: … data 52e): 52e — неверный пароль, 533 — учётка отключена, 701/532 — истёк срок учётки или пароля, 775 — учётка заблокирована. Приложения, которые разбирают код data, работают с HopeDC так же, как с AD.objectGUID из AD. Он сохраняется после «Принять роль KDC», «Отключить от AD» и перезапуска — приложения, которые хранят ссылки на объекты по GUID (синхронизация, почта, системы доступа), не теряют связь после миграции.LockoutBadCount), Продолжительность блокировки (LockoutDuration, минуты; −1 — до разблокировки администратором) и Сбрасывать счётчик блокировки через (ResetLockoutCount, минуты). Если в политике порог не задан, берутся атрибуты корня домена lockoutThreshold, lockoutDuration, lockOutObservationWindow. Изменение в панели применяется сразу, правка с Windows (GPMC) — в течение минуты.
lockoutTime (реплицируется в кластере); счётчик неверных попыток ведёт каждый узел. Заблокированная учётка не входит и с верным паролем: LDAP — data 775, Kerberos — KDC_ERR_CLIENT_REVOKED со статусом STATUS_ACCOUNT_LOCKED_OUT (Windows пишет «учётная запись заблокирована»), SMB — STATUS_ACCOUNT_LOCKED_OUT, панель — code: locked.
badPwdCount, badPasswordTime и lockoutTime — их видят Get-ADUser -Properties badPwdCount, редактор атрибутов ADUC и внешние системы.
lockoutTime и обнуляет счётчики на всех контроллерах; если учётка не заблокирована, но попытки есть — «Сбросить счётчики») или записью lockoutTime=0 по LDAP (как флажок «Разблокировать» в ADUC). Не блокируются: встроенный Administrator (RID 500 — чтобы не потерять доступ к домену), учётные записи компьютеров и служб (…$), krbtgt. В интегрированном с AD домене, пока HopeDC не принял роль KDC, блокировкой управляет AD._kerberos._udp в DNS публиковались, но порт не слушался — клиенты теряли время на тайм-аут). Ответ больше 1465 байт (как MaxDatagramReplySize у AD; обычно это билеты Windows с PAC) по UDP не отправляется: клиент получает KRB_ERR_RESPONSE_TOO_BIG и сам повторяет запрос по TCP. Предел меняется переменной окружения DC_KRB_UDP_MAX. В брандмауэре сервера нужен порт 88/udp — скрипт развёртывания открывает его.Доступ к админ‑панели HopeDC. Через «Создать пользователя» доступны три типа записей:
memberOf, а также по первичной группе (primaryGroupID + objectSid), поэтому работает и «Domain Users», которой в memberOf нет.В форме сперва выбирается домен, затем принципал (поиск с фильтрацией; технические учётки, компьютеры, системные почтовые ящики и объекты Exchange из списка исключены). В таблице у каждой записи виден тип (Локальный / Домен · пользователь / Домен · группа), статус и роль. Сопоставления доменных принципалов хранятся отдельно (не в bincode‑учётках) и не мешают локальным. Встроенная учётка admin всегда поддерживается активной (защита от потери доступа).
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): подключения не из списка отклоняются. Используйте для ограничения круга машин, которым разрешено обращаться к контроллеру.
Загрузка лицензионного ключа и просмотр текущего использования (домены, объекты, доверия). Для получения ключа скопируйте запрос из раздела и передайте на сервер лицензирования. Ключ проверяется вшитым ключом вендора и привязан к оборудованию сервера.
v197: ключ проверки лицензий нельзя заменить. Подпись лицензии проверяется только открытым ключом сервера лицензий, вшитым в сборку (его отпечаток показан в карточке «Ключ лицензии»). Прежняя возможность задать свой ключ проверки (POST /api/license/pubkey, поле «Доверенный ключ сервера лицензий») удалена: при сборке без вшитого ключа ею можно было бы подписать лицензию самостоятельно. Оставшийся от прежних версий файл license.pub удаляется при запуске. Сборка без настоящего вшитого ключа не компилируется. Установленные лицензии продолжают действовать.
Кнопка «Сравнить версии» открывает таблицу сравнения версий Free / Standard / Enterprise:
| Возможность | Free | Standard | Enterprise |
|---|---|---|---|
| Интегрированные домены (леса) | 1 | 10 | без лимита |
| Пользователи + компьютеры | 200 | 5000 | без лимита |
| Доверия (ДДО) | 0 | 10 | без лимита |
| Каталог 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) и старые архивы бэкапов шифруются автоматически при первом запуске новой версии.
Ключ — 32 случайных байта (64 hex‑символа) в отдельном файле вне каталога данных. Ядро ищет его в таком порядке:
DC_MASTER_KEY (сам ключ, hex);DC_MASTER_KEY_FILE (если задана — используется только он);/etc/hopedc/master.key — расположение по умолчанию (каталог 0700, файл 0600, владелец — пользователь службы);<каталог данных>.keys/master.key — запасной вариант, если в /etc/hopedc нет прав на запись;<каталог данных>/.master-key/master.key — аварийный вариант.Если ключа нет нигде, он создаётся при первом запуске. Путь и отпечаток ключа (16 hex‑символов; сам ключ по отпечатку восстановить нельзя) показываются в зелёной плашке раздела Резервное копирование и пишутся в журнал при старте. Если ключ оказался внутри каталога данных, в плашке появляется жёлтое предупреждение: копия каталога в этом случае содержит и ключ — перенесите его в /etc/hopedc/master.key.
krbtgt). Никогда не храните копию ключа рядом с базой или бэкапами.Копия ключа сохраняется в файл .hdckey, зашифрованный паролем: ключ шифрования выводится из пароля через Argon2id (64 МиБ, 3 прохода — подбор пароля дорог даже на видеокартах), сам мастер‑ключ шифруется AES‑256‑GCM. Без пароля файл бесполезен.
*).hopedc-master-<сервер>-<отпечаток>-<дата>.hdckey.Каждый экспорт и каждая неудачная попытка (неверный пароль, нет прав) записываются в журнал с именем пользователя: 🔑 Мастер‑ключ экспортирован (под паролем) пользователем «…».
.hdckey удалите.Архив, сделанный на другом сервере, зашифрован его мастер‑ключом. Чтобы восстановить его (например, на новом сервере взамен вышедшего из строя):
.hdckey исходного сервера — под кнопкой отобразится его отпечаток, сервер и дата создания. Если отпечаток не совпадает с нужным, панель сразу предупредит «Этот ключ не подходит к архиву».Ключ исходного сервера при этом на текущий сервер не устанавливается — он нужен только на время восстановления.
Для случаев, когда панель недоступна (новый сервер, восстановление после сбоя). Запускать от 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. |
Защита от ошибок при импорте:
--force старый файл сохраняется рядом как master.key.bak-<дата>;Для сценариев автоматизации пароль можно передать переменной HOPEDC_KEY_PASSWORD (учитывайте, что переменные окружения процесса видны root).
/etc/hopedc на том же диске, что и база, копия всего диска (или всей ВМ) содержит и то, и другое. Для защиты от этого сценария используйте шифрование диска (LUKS) или привязку ключа к TPM.krbtgt, смените пароли администраторов и служебных учёток, перевыпустите сертификаты ЦС; старые бэкапы считайте скомпрометированными.Граф контроллеров, доменов и лесов: подчинённость доменов, доверия, какие домены обслуживает каждый контроллер и реплики между контроллерами. Раздел доступен на контроллере корневого домена (редакция Standard и выше, право topology.view).
Связи конкретного домена. В рабочей области домена есть вкладка «Связи» (группа «Сеть и безопасность»). Она показывает только данные этого домена: сам домен и его поддомены, его доверия (партнёр — серым узлом), контроллеры, которые его обслуживают, и реплики с ним. Другие домены, которые обслуживают те же контроллеры, не показываются: сервер отфильтровывает их сам. Вкладка работает на любом контроллере этого домена (не только на корневом) и доступна делегированным администраторам домена с правом «Связи».
Просмотр и скачивание файловых журналов сервера (hopedc.log.*): выбор файла (или «новейший»), фильтр по уровню (ERROR/WARN/INFO/DEBUG/TRACE), серверный фильтр по подстроке и быстрый поиск по экрану, автообновление, подсветка строк по уровню. Внизу — список файлов со скачиванием каждого. Кнопка «Настроить» задаёт политику хранения журналов (пресеты «Неделя / Месяц / 3 месяца / Год», а также ограничение по возрасту и по количеству файлов); очистка применяется автоматически и по кнопке «Очистить сейчас» (с предупреждением о том, какие файлы удалятся). Новейший активный журнал всегда сохраняется. В рабочей области конкретного домена есть такой же раздел, но с фильтрацией строк по FQDN этого домена. Право доступа: logs.view.
Раздел «Безопасность → Журнал безопасности» (право «Журнал безопасности: просмотр», изменение настроек, 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.
Раздел настраивает высокую доступность: мульти‑мастер репликацию каталога, DNS, доверительных отношений, доменной политики безопасности и конфигурации DHCP‑пулов между контроллерами домена. Узлы обмениваются изменениями методом «pull» через API (порт 9444, HTTPS) с проверкой общего секрета; новый узел выполняет первичный бутстрап снимком (snapshot). Конфликты (правка одного объекта на разных узлах) разрешаются по правилу «последняя запись побеждает». Права: cluster.view / cluster.edit.
Раздел разбит на четыре вкладки:
Общий секрет (v126). Секрет кластера в форме не показывается (поле пароля с подсказкой «задан»). Чтобы оставить прежний, оставьте поле пустым и сохраните; новый вводится только при смене.
Пересинхронизация (v126). Кнопка «Пересинхронизировать» запрашивает у пиров полный снимок и сводит его с локальными данными по правилу «последняя запись побеждает»: недостающее добавляется, устаревшее обновляется, удалённое на пирах — удаляется, более новые локальные правки сохраняются. Узел делает это и сам, если обнаружил разрыв в журнале пира (был недоступен дольше, чем журнал хранит события — 8000 изменений) — после возврата узла раньше требовалась пересборка с нуля. Пересинхронизация 200 тыс. объектов занимает 5–10 секунд и не порождает ответных событий репликации.
Раздел «Контроллеры» главного меню (сразу под «Доменами», v195) и вкладка «Контроллеры» в рабочей области домена (группа «Система», над «Свойствами домена», v195) хранит доступ по SSH к серверам, на которые ставится HopeDC, и выполняет с ними установку и обновление прямо из панели.
install_hopedc.sh во временный каталог сервера, сверяет SHA‑256, запускает установщик с параметрами присоединения (JOIN_CLUSTER=1, домены, токен пары или общий секрет), затем добавляет пир в «Кластер (HA)» этого узла. Новый контроллер получает данные домена со следующей репликацией. Временный каталог удаляется, параметры присоединения служба шифрует и сразу стирает с диска. Ход установки — в журнале задачи (кнопка с журналом у контроллера).Admin123! установка задаёт учётке панели admin нового сервера случайный пароль (16 символов). По окончании установки он показывается один раз внизу журнала задачи — только тому, кто запустил установку (кнопки «Показать» и «Копировать»). На сервер передаётся только его bcrypt‑хэш; в открытом виде пароль нигде не хранится, и после закрытия окна журнала увидеть его снова нельзя. Если пароль утерян — сбросьте его на сервере консольной командой восстановления доступа (Документ 1).https://<адрес>:9443) с этим паролем, смените его (требуется при первом входе) и примите Лицензионное соглашение.Кто может. Права «Контроллеры» в матрице ролей (просмотр / изменение; роли с правами «Кластер (HA)» получают их автоматически). Администраторы домена (группа Domain Admins, а также Enterprise Admins леса) видят в рабочей области домена контроллеры своего домена и могут добавлять, проверять, устанавливать и обновлять региональные контроллеры этого домена. Делегатам домена (v195) раздел доступен только для просмотра — без кнопок изменения; сервер также отклоняет такие запросы от делегата. Требования к серверу: Linux x86_64 с systemd (Ubuntu/Debian, RHEL‑совместимые, Astra Linux SE), вход по SSH с правами root или sudo; установку выполняет узел, который держит домен (центральный сервер).
admin нового контроллера получает случайный пароль, показанный один раз в журнале установки.Пункт меню «Описание 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":…}.
Раздел Настройки → Обновления проверяет и устанавливает новые версии HopeDC прямо из панели — как в Hope Mail Server и Hope MSG Gateway. Доступен только полному администратору панели (роль с полным доступом); делегированные и доменные администраторы его не видят, API отвечает 403.
Версии. Вверху — текущая версия (номер выпуска, например v147; подробности сборки — во всплывающей подсказке), доступная версия из онлайн‑источника и статус. Версию бинарника на сервере показывает hopedc-core --version.
Источник пакета.
hopedc-core_vNNN.gz (или распакованный hopedc-core). Пакет распаковывается и проверяется: исполняемый файл Linux нужной архитектуры, сборка HopeDC v147 или новее, пробный запуск --version с чистым окружением. Показываются версия, размер и SHA‑256 исходного файла — сверьте её с контрольной суммой поставщика. Поле «Версия» необязательно; если указать, она должна совпасть с версией пакета.{"version","url","sha256","notes"}, по каналам — {"stable":{…},"beta":{…}}; относительная ссылка считается от адреса манифеста. Пакет без sha256 не ставится, при несовпадении суммы или версии — отклоняется. Используйте HTTPS: по http пакет можно подменить в пути.Установка. Кнопка «Установить 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.| Особенность | Суть |
|---|---|
| Автономная аутентификация («Локальный пароль») | Пароль хранится в HopeDC как NT‑хэш + AES‑ключи Kerberos + bcrypt. Позволяет входить даже после отключения Windows‑DC. |
| Мультиреалм KDC | Один KDC обслуживает несколько доменов, реалм берётся из запроса; поддержка RC4‑HMAC и AES128/256 (etype 17/18). |
| «Принять роль KDC» (seize) и отключение от AD | HopeDC становится авторитетным 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). |
Проверено на 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).
В 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.