server-monitor-manager/docs/installer-contract.md
2026-07-16 21:59:20 +07:00

5.6 KiB
Raw Blame History

Контракт Linux-установщика

Единственный исходный файл ochenstarik-server-monitor-manager.sh хранится в ochenstarik-ui/lightweight-server. В репозитории desktop client не должна находиться устаревающая копия.

Поддерживаемые роли

Monitor only

Режим install устанавливает SSH monitoring endpoint без WireGuard:

  • Ubuntu/Debian с systemd;
  • публичный ключ ssh-ed25519 из Windows-клиента;
  • отдельный системный пользователь ochenstarik-monitor без пароля;
  • root-owned forced-command;
  • сохранение существующего SSH-порта;
  • отсутствие нового публичного API.

Hub

Режим hub дополнительно:

  • устанавливает WireGuard и nftables;
  • запрашивает публичный IPv4/домен и UDP-порт;
  • создаёт smm0 с адресом 10.77.0.1/24;
  • включает IPv4 forwarding;
  • устанавливает минимальный root helper и systemd restore unit;
  • хранит публичные identities Node и политики Links;
  • разрешает транзит только по явной политике.

Node

Режим node:

  • локально генерирует WireGuard keypair;
  • принимает одноразовый enrollment token;
  • отправляет Hub только публичный ключ;
  • получает внутренний адрес и аутентифицированное подтверждение конфигурации;
  • создаёт только исходящее WireGuard-соединение;
  • не требует белого IP или входящего публичного порта.

Постоянный control layer (alpha)

После установки существующих ролей отдельные действия добавляют постоянные сервисы:

  • install-control-hub скачивает release-архив под amd64/arm64, проверяет SHA-256, создаёт локальный CA, HTTPS-сертификат Hub, SQLite-каталог и изолированный systemd service;
  • control-code NAME создаёт десятиминутный token и код SMMCTL1, содержащий URL Hub и только публичный CA;
  • control-device-code DEVICE создаёт отдельный код SMMDEV1 для operator identity Windows-клиента;
  • install-control-agent проверяет CA, локально создаёт ключ и CSR, регистрирует сертификат и запускает исходящий mTLS Agent через systemd.

Приватный ключ Control CA не включается в SMMCTL1, а приватный ключ Agent не покидает Node. По умолчанию Control Hub слушает TCP 7443.

Control service не получает общий доступ к root helper. Отдельный root-owned wrapper принимает только проверенные link-connect и link-disconnect; команды регистрации, удаления Node и произвольные аргументы ему недоступны.

Команды жизненного цикла

Целевой интерфейс:

install-monitor
install-hub
install-node
install-control-hub
install-control-agent
control-code NAME
control-device-code DEVICE
status
update
rollback
uninstall-monitor
uninstall-node
uninstall-hub

Каждая установка и обновление должны быть идемпотентными. Перед изменением рабочей конфигурации создаётся root-only backup. Ошибка проверки или запуска автоматически восстанавливает последнюю рабочую версию.

Удаление роли должно убрать только принадлежащие ей файлы, units, интерфейсы и правила. Удаление Hub требует отдельного подтверждения и не должно молча оставлять включённый forwarding или nftables ACL.

Forced-command

Ключ мониторинга допускает только:

  • metrics;
  • read-only mesh nodes, mesh links, mesh status на Hub;
  • строго типизированные изменения Link с проверкой параметров.

Он не должен позволять shell, PTY, agent forwarding, TCP forwarding или произвольную команду. Полный SSH-терминал использует отдельную identity.

Минимальный metrics snapshot

PROTOCOL=1
HOSTNAME=server-name
UPTIME_SECONDS=12345
LOAD1=0.42
CPU_COUNT=4
MEM_TOTAL_KB=...
MEM_AVAILABLE_KB=...
SWAP_TOTAL_KB=...
SWAP_FREE_KB=...
DISK_TOTAL_KB=...
DISK_AVAILABLE_KB=...
DISK_INODES_TOTAL=...
DISK_INODES_FREE=...
NETWORK_RX_BYTES=...
NETWORK_TX_BYTES=...
KERNEL=...

Проверки перед применением

  • bash -n и ShellCheck;
  • проверка SSH-ключа через ssh-keygen;
  • sshd -t перед reload;
  • wg-quick strip и пробный запуск конфигурации;
  • nft --check перед заменой таблицы;
  • проверка systemd unit;
  • сохранение активной SSH-сессии до подтверждения нового доступа.