Skip to content

Latest commit

 

History

History
123 lines (102 loc) · 18.5 KB

File metadata and controls

123 lines (102 loc) · 18.5 KB

Роадмап RoutineOps

Актуально на 2026-08-05 (продукт 2.8.0, агент 2.6.0 — версионируются раздельно).

Этот файл — единственный источник правды по тому, что уже есть и что планируется. Матрица «Free vs Enterprise» в README.md — её краткая выжимка.

Принцип границы

  • Free — весь операционный MDM для одного администратора или небольшой команды: инвентарь, группы, скрипты и расписания, софт-политики, блокировка экрана, карантин, временные админ-права, алерты, аудит, self-update агентов. Free должен быть мощным: это то, ради чего продукт ставят.
  • Enterprise — то, что нужно организации: корпоративная идентичность, изоляция между подразделениями, деструктивные операции с ключами восстановления, compliance- отчётность, масштаб и HA.
  • Базовая безопасность не продаётся. mTLS, аудит, шифрование секретов, подпись релизов — во Free. «Paywall security» мы не делаем.

Enterprise-код физически отсутствует в Free-сборке (сборочный тег), а не «выключен флагом»: выключенную проверку в открытом коде просто удаляют форком.


Готово (Free)

Возможность Статус
Энроллмент по mTLS (CSR + одноразовый токен, пин CA)
Инвентарь железа и установленного ПО, версия агента на устройстве
Агенты Windows / macOS / Linux
Установщики: MSI (Windows), .pkg (macOS), shell-скрипт (Linux/macOS)
Self-update агентов (semver, подпись ed25519, защита от отката)
Группы устройств, цвет группы, фан-аут скриптов и политик
Библиотека скриптов, разовый запуск
Скрипт-политики: расписание (cron), триггер по событию, при подключении
Pass / Fail по политикам (соответствие парка)
Софт-политики: запрещённое ПО + алерт, фильтр по платформе
Блокировка экрана (overlay) и карантин устройства ✅ (Linux — только X11, см. lock-linux.md)
Временные права локального администратора (JIT)
Аудит выданных админ-прав (улики сессии)
Алерты с группировкой по типу, подтверждение, уведомления в Telegram
Журнал аудита с фильтрами, отдельная политика хранения
Роли (администратор / наблюдатель), инвайты для доступа В панель, сброс пароля по почте
Автонакат миграций (fail-closed), установка и обновление одной командой
Подписной ключ релизов у каждого деплойера (свой корень доверия)
Вывод из эксплуатации из карточки устройства (полное самоудаление агента)
Удаление из инвентаря с отзывом сертификата (устройство не «воскресает»)
Выпуск и отзыв API-токенов из панели
Пагинация списков устройств и журнала аудита, фильтры аудита на сервере
«Пользователь за консолью» в карточке устройства
Владелец устройства — карточка человека (ФИО + почта), без аккаунта и приглашения
Удалённая перезагрузка устройства и группы (отсрочка отсчитывается ОС)
Расширенный инвентарь ПО: издатель, путь, архитектура, ключ снятия, машина/профиль
Событие ИБ при попытке снять блокировку в обход службы
Конфигурация-как-код: YAML-экспорт/применение скриптов, политик и групп (CLI routineops)
Массовые токены энроллмента: список, отзыв, секция «не подключились»
Признак «агент ослеп» (очередь отчётов мертва при живом heartbeat)
Миграция устройств из другого MDM (генератор скриптов Intune / Jamf)
Английский язык интерфейса (i18n) ✅ (интерфейс закрыт целиком; язык страницы и гейт полноты словарей)
Каналы обновления агента (stable / beta) + канареечная выкатка по группам

Планируется (Free)

Возможность Приоритет Комментарий
Сборки под arm64 для Windows Низкий Цель сборки в Makefile есть; на живом arm64-железе не прогонялось, MSI/публикация в releases не делались
Lock на Wayland Отказ, а не задача: клиент не может ни снять экран, ни внедрить ввод — это привилегия компоновщика. То же ограничение и у удалённого стола, см. lock-linux.md

Готово (Enterprise)

Возможность Комментарий
Лицензионное ядро Подписанный офлайн-файл лицензии (ed25519) + пароль активации, срок и grace
FileVault: эскроу ключей восстановления и принудительная блокировка (macOS) Серверная и агентская части готовы
Уровни критичности алертов и маршрутизация Четыре уровня, фиксируются при создании алерта; порог доставки в Telegram у каждого администратора свой; эскалация непринятых. См. миграцию 041
Tamper-evident аудит Хеш-цепочка над журналом + якоря, переживающие чистку по сроку хранения; проверка целостности через GET /audit-log/verify. Ловит правку записи, удаление из середины и перестановку; голова цепочки ежесуточно публикуется в лог сервера — сверка с ней и отличает «журнал согласован» от «журнал не переписывали»
Каталог пользователей (LDAP / Active Directory) АВТОМАТИКА поверх общего справочника владельцев: синхронизация персон и авто-привязка владельца по SID консольного пользователя (fallback по логину). Сами карточки владельцев есть и во Free — заводятся вручную
Вход в панель по паролю каталога Phase 2 каталога: StartTLS и кастомный CA (боевой AD отклоняет simple bind по открытому ldap://), плюс сам вход доменным паролем. Отдельный флаг login_enabled, шифрованный канал обязателен. Входят только уже существующие пользователи панели: каталог подтверждает пароль, но учётки не создаёт и роль из групп AD не берёт — роль локальная, доступ отзывается удалением пользователя. Локальный пароль работает всегда, поэтому недоступный контроллер домена не запирает панель
Удаление ПО с устройства из интерфейса Действие в карточке устройства; селектор цели собирает сервер из инвентаря; агент выбирает метод снятия; self-protect агента; приёмка на Windows пройдена
Мультитенантность Отдельные тенанты со своими устройствами, группами, скриптами и политиками; изоляция FORCE RLS + BindTenant (ADR-6); API/UI тенантов для provider_admin; GET /devices/across-tenants + UI-экран «Все тенанты»; удаление тенанта и перенос устройства между тенантами
SSO по OIDC Authorization Code + PKCE, проверка id_token, https обязателен и у issuer, и у эндпоинтов из discovery; client_secret в конверте AES-GCM
SSO по SAML Свой Service Provider с постоянной ключевой парой, CRUD и мастер настройки в панели, проверка метаданных IdP до включения
MFA / TOTP Второй фактор для личности, коды восстановления хешами, политика тенанта «требовать MFA»
SCIM-провижининг /scim/v2/Users; берётся ТОЛЬКО сервисным токеном области scim — без области провизионинг брался любым it_admin-токеном
Экспорт журнала в SIEM syslog/CEF и webhook, фильтр событий, тестовая отправка и видимый статус доставки; архив журнала в JSONL.gz перед чисткой по сроку
Дашборд соответствия Экран и выгрузка отчёта (report.csv) на языке оператора
Сканирование ПО на уязвимости (CVE) Справочник + матчинг по инвентарю; версии сравниваются по-настоящему, «не смогли сопоставить» — отдельный статус, а не «чисто»
Бэкапы по расписанию с проверкой восстановления scripts/backup.sh: дамп + роли кластера + секреты, ротация, встроенный прогон восстановления. Дампа базы для восстановления не хватало: ролей в нём нет

Планируется (Enterprise)

Этап 1 — закрыт

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

Этап 2 — текущий

Возможность Статус Комментарий
Удалённое подключение к рабочему столу 🔄 Ф1 и управление (Ф3) закрыты по коду, полевой прогон не сделан ни на одной платформе Просмотр экрана из панели с обязательным поводом, записью сеанса и fail-closed аудитом. Ретрансляция через сервер, без P2P. Режим доступа (с согласием сотрудника или без) и право смотреть записи настраиваются из панели, объём записей на тенанта ограничен квотой. Управления (клавиатура, мышь, передача файлов) в Ф1 нет — оно тянет UIAccess на Windows и второй TCC-грант на macOS. Windows secure desktop, Wayland и «нет залогиненного пользователя» — отказы по потолку ОС, а не задачи, и каждый виден оператору отдельным кодом причины. Ревизия 04.08 нашла пять дефектов, при которых фича не работала или обманывала (сеанс не мог стартовать ни на одном устройстве, enterprise-агент не собирался под Windows) — закрыты. 05.08 закрыт весь остаток из конца §9 контракта, включая право на просмотр записей, которое до этого нельзя было выдать никому. 05.08 (позже) закрыт полевой блокер — стрим сеанса жил на контексте исполнителя задач и умирал через миллисекунды после старта, то есть сеанс не начинался НИ РАЗУ, — и добавлено управление: клавиатура и мышь на трёх ОС, журнал ввода без печатных символов, выгрузка «окон неатрибутируемости», управление невозможно без активной записи. Управление объявляется при старте сеанса и не берётся на лету: расширить область идущего сеанса нельзя по построению. Осталась полевая приёмка
HA / несколько узлов 📐 дизайн готов, реализации нет Блокер конкретный: реестр подключённых агентов — map в памяти процесса, вторая нода физически не может послать команду устройству, подключённому к первой. Варианты: маршрутизация через шину (Redis уже стоит под очередь) либо липкая привязка устройства к ноде на балансировщике
GitOps поверх конфигурации-как-кода Базовый export/apply уже во Free (см. «Готово»); здесь — автоприменение из git и детект дрейфа
Автоматическое устранение запрещённого ПО Сейчас детект и алерт; ручное удаление — в «Готово» (Enterprise)
Аналитика, отчёты, экспорт CSV есть у отчёта соответствия; остальное — PDF и произвольные срезы
Аудит действий под временными админ-правами ⬜ заведено 05.08.2026 Сегодня выдача прав видна, а что сотрудник под ними делал — нет. Нужен durable-журнал системных событий на окно grant → revoke: старт процессов (Windows Security 4688 с флагом повышения, на Linux — auditd exec), установка служб (7045), установка MSI (Application 1033), запись в защищённые ветки реестра и файлы под HKLM (SACL). Политика аудита включается на время сессии и снимается по её концу — постоянно включённая захлебнётся. Хранение: отдельная таблица admin_session_events, строка на событие, привязка к admin_request.id, поля source/pid/image/user/time. Показ — вкладкой на карточке заявки, рядом с самими правами; на выдаче администратор видит потом СВОДКУ, а не только «выдано в 14:12, возвращено в 14:47». Уже существующая admin_session_changes (дельта ПО и служб) — не замена: она диффит СОСТОЯНИЕ до и после, а здесь нужен поток событий

Как это устроено технически

  • Обновление сервераgit pull + пересборка контейнеров; миграции накатывает отдельный сервис до старта сервера (fail-closed). См. self-hosted-deploy.md.
  • Обновление агентов — парк тянет подписанный бинарь с сервера своего деплойера. Мы не пушим ничего в чужую инфраструктуру.
  • Enterprise-доставка — готовый образ сервера из приватного реестра по токену подписки; исходники Enterprise не отдаются. Агент у Enterprise-клиента — тот же публичный Free-агент, кроме FileVault-сценария.

Вопросы по Enterprise и предложения по роадмапу — через Issues репозитория.