server-monitor-manager/docs/security-model.md
2026-07-15 23:42:29 +07:00

4.4 KiB
Raw Blame History

Модель безопасности

Защищаемые данные

  • учётные записи и сессии пользователей;
  • device, agent, SSH и WireGuard identities;
  • команды, терминальные сессии и аудит;
  • topology серверов, адреса и метрики;
  • права автоматизаций, включая AI-агентов.

Границы доверия

Desktop client, control node и каждый agent считаются отдельными субъектами. Компрометация одного агента не должна выдавать ключи других узлов или право создавать новые Links. Control node координирует публичные параметры и политики, но не хранит приватные WireGuard/SSH-ключи узлов.

В первом SSH-MVP control node отсутствует. Windows-клиент генерирует отдельный Ed25519-ключ, а сервер привязывает его к restrict,command. Этот ключ предназначен только для чтения ограниченного snapshot метрик и не используется для интерактивного терминала или AI-агента.

Регистрация агента

  1. Пользователь создаёт одноразовый enrollment token со сроком жизни не более 10 минут.
  2. Агент генерирует ключевую пару локально.
  3. По TLS агент предъявляет token и публичный ключ.
  4. Control node выдаёт agent certificate и помечает token использованным.
  5. Последующие соединения требуют mTLS. Повторное использование token отклоняется.

Авторизация

  • read-only мониторинг отделён от управления;
  • команды проверяются по типу ресурса и действию;
  • полный терминал требует свежего подтверждения пользователя;
  • создание Link требует точного набора маршрутов/портов, пустой набор не означает allow all;
  • automation identity не наследует интерактивные права владельца;
  • команды имеют срок действия, nonce/idempotency key и защиту от replay.

Аудит

Записываются входы, регистрация устройств, изменение прав, команды, начало и завершение терминала, создание/подключение/отключение Link. Секреты и полный ввод терминала по умолчанию не журналируются. Аудит экспортируется во внешний append-only storage; локальный администратор control node всё равно считается способным изменить локальную БД.

Kill switch

Отключение Link должно:

  1. перевести желаемое состояние в Disabled;
  2. удалить peer и маршруты на доступных узлах;
  3. заблокировать повторное автоматическое включение;
  4. сохранить обязательную команду для временно недоступного узла;
  5. показать пользователю разницу между желаемым и фактическим состоянием.

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

Не входит в первый MVP

  • выполнение произвольных root-команд из веб/API;
  • хранение пользовательских приватных SSH-ключей на control node;
  • автоматическое соединение всех серверов группы в одну flat network;
  • публичный входящий порт агента;
  • собственная криптография вместо TLS, SSH и WireGuard.