From d7bbcc533734fe938c6ff97d693deb6087c7128a Mon Sep 17 00:00:00 2001 From: PTah Date: Sat, 20 Jun 2026 20:03:57 +1000 Subject: [PATCH] docs: WinRM RDP update flow and SAC 0.20.18 deployment notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Обновлены README и руководства по fallback WinRM (git→zip→клиент), SAC_PUBLIC_URL и краткому 502 при деплое. --- README.md | 4 ++-- README_en.md | 4 ++-- docs/agent-control-plane.md | 18 ++++++++++++------ docs/deployment.md | 4 ++++ 4 files changed, 20 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8d57ff0..8f6b7be 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ | **security-alert-center** | Сервер SAC (Ubuntu 24.04) | | [seaca](https://git.kalinamall.ru/PapaTramp/seaca) | Android-клиент | -**Версия:** `0.20.6` · **Деплой:** `sudo /opt/sac-deploy.sh` +**Версия:** `0.20.18` · **Деплой:** `sudo /opt/sac-deploy.sh` ## Возможности @@ -22,7 +22,7 @@ - **Оповещения** — Telegram, email, webhook, FCM (Seaca); severity + cooldown - **UI** — события, хосты, problems, отчёты, обзор (SSE live), настройки (admin) - **RDG flap** — бейдж на событиях 302/303, **qwinsta/logoff** по WinRM на клиентский ПК (нужен domain admin в настройках) -- **Хосты** — статус агента, inventory, обновление ssh-monitor/RDP (SSH/WinRM), тест Git/SSH/WinRM +- **Хосты** — статус агента, inventory, обновление ssh-monitor/RDP (SSH/WinRM), тест Git/SSH/WinRM; WinRM RDP: SAC тянет пакет с git, клиент скачивает zip с SAC, локальный `Deploy-LoginMonitor.ps1` (git на ПК не нужен) - **Мобильные** — enrollment, устройства, push; Seaca: ack/resolve, qwinsta/logoff через API SAC - **Роли** — `admin` / `monitor`; JWT, rate limit входа diff --git a/README_en.md b/README_en.md index 2dc5a42..007bbab 100644 --- a/README_en.md +++ b/README_en.md @@ -13,7 +13,7 @@ Self-hosted hub for security events from Linux and Windows agents: ingest, corre | **security-alert-center** | SAC server (Ubuntu 24.04) | | [seaca](https://git.kalinamall.ru/PapaTramp/seaca) | Android client | -**Version:** `0.20.6` · **Deploy:** `sudo /opt/sac-deploy.sh` +**Version:** `0.20.18` · **Deploy:** `sudo /opt/sac-deploy.sh` ## Features @@ -22,7 +22,7 @@ Self-hosted hub for security events from Linux and Windows agents: ingest, corre - **Notifications** — Telegram, email, webhook, FCM (Seaca) - **Web UI** — events, hosts, problems, reports, dashboard (SSE), settings (admin) - **RDG flap** — badge on 302/303 events, **qwinsta/logoff** via WinRM to client PC (domain admin required) -- **Hosts** — agent status, inventory, agent updates (SSH/WinRM), connectivity tests +- **Hosts** — agent status, inventory, agent updates (SSH/WinRM); WinRM RDP: SAC fetches from git, client downloads zip from SAC, runs local `Deploy-LoginMonitor.ps1` (no git on PC) - **Mobile** — enrollment, devices, push; Seaca: ack/resolve, qwinsta/logoff via SAC API - **Roles** — `admin` / `monitor` diff --git a/docs/agent-control-plane.md b/docs/agent-control-plane.md index f286897..ae0be58 100644 --- a/docs/agent-control-plane.md +++ b/docs/agent-control-plane.md @@ -166,12 +166,18 @@ sequenceDiagram ### 4.3. B2 — Fallback (SSH / WinRM) -Если за **N минут** нет `agent.update.*` или статус `failed`: +Кнопка на карточке хоста: **«Обновить через WinRM»** / **«Fallback SSH»** (`POST .../actions/agent-update-fallback`). Лог операции — модалка сразу при старте (не ждёт конца). -| OS | Метод | Credentials | -|----|--------|-------------| -| Linux | SSH из SAC | ключ после bootstrap (§5) | -| Windows | WinRM | encrypted login/password в БД | +Если за **N минут** нет `agent.update.*` или статус `failed` — тот же fallback может сработать автоматически (если включён в настройках). + +| OS | Метод | Credentials | Как работает (SAC 0.20.18+) | +|----|--------|-------------|------------------------------| +| Linux | SSH | ключ после bootstrap (§5) | SAC передаёт `REPO_URL` / `GIT_BRANCH` из **Настройки → Обновления агентов** в `update_ssh_monitor.sh` (не дефолт GitHub на хосте) | +| Windows | WinRM | encrypted login/password в БД | 1) SAC `git fetch` RDP-login-monitor на сервере → zip с UTF-8 BOM для `.ps1`
2) Клиент по WinRM: `Invoke-WebRequest` → `https:///api/v1/agent/rdp-bundle/`
3) Распаковка в `C:\ProgramData\RDP-login-monitor\_sac_staging`
4) `Deploy-LoginMonitor.ps1 -SourceShareRoot` (файлы в `ProgramData\RDP-login-monitor\`) | + +**Windows — требования:** domain admin в **Настройки → Управление хостами → Windows**; `rdp_git_repo_url` в **Обновления агентов**; ПК должен открывать `SAC_PUBLIC_URL` (HTTPS). **Git на клиенте не нужен.** GPO/NETLOGON по-прежнему основной путь в режиме GPO. + +**nginx:** для `agent-update-fallback` и SSH/WinRM-тестов — `proxy_read_timeout 960s` (см. `deploy/nginx/sac.conf.tls.example`). --- @@ -285,7 +291,7 @@ Authorization: Bearer sac_xxx | **4** | WinRM qwinsta с сервера SAC | ✅ | | **5** | Settings «Обновления агентов», SSH bootstrap | частично ✅ | | **6** | Self-update B1 | ⏳ | -| **7** | SSH bootstrap + WinRM fallback | ⏳ | +| **7** | SSH bootstrap + WinRM fallback | частично ✅ (SSH/WinRM update из UI, git URL из настроек) | | **8** | Desired config per host | ⏳ | **Миграция:** `016_agent_commands`. Env: `SAC_RDG_FLAP_*`, `SAC_WIN_ADMIN_USER`, `SAC_WIN_ADMIN_PASSWORD`. diff --git a/docs/deployment.md b/docs/deployment.md index e3a744c..2a82022 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -113,6 +113,10 @@ curl -sS https://sac.kalinamall.ru/health sudo /opt/sac-deploy.sh ``` +Краткий **502 Bad Gateway** в UI (~10 с) возможен при перезапуске `sac-api` — список хостов автоматически повторяет запрос; после деплоя обновите страницу. + +**Важно в `sac-api.env`:** `SAC_PUBLIC_URL=https://sac.kalinamall.ru` — нужен для WinRM-обновления RDP (клиент скачивает zip с SAC). API: **2 worker** uvicorn (`deploy/systemd/sac-api.service`). + Установка скрипта (один раз): `sudo cp /opt/security-alert-center/deploy/sac-deploy.sh /opt/sac-deploy.sh && sudo chmod 755 /opt/sac-deploy.sh` После **force-push** на upstream remote обычный `git pull` на сервере падает с «diverging branches». Скрипт `sac-deploy.sh` (актуальная версия) делает `fetch` и при необходимости `reset --hard` к upstream. **Один раз вручную**, если на сервере ещё старый скрипт: