Files
AWatch-rus/docs/DETMIR_SUPPORT_SCRIPTS_RU.md
T

128 lines
6.1 KiB
Markdown

# Скрипты выполнения TЗ поддержки DetMir
В репозитории добавлены скрипты для регламентных проверок по
`docs/DETMIR_SUPPORT_TASKS_RU.md`:
- `scripts/detmir-support-run.sh --scope {daily|weekly|monthly}`
- `scripts/detmir-support-daily.sh`
- `scripts/detmir-support-weekly.sh`
- `scripts/detmir-support-monthly.sh`
## Быстрый старт
1. Создать приватный файл окружения вне репозитория:
```bash
mkdir -p "$HOME/.config/awatch-rus"
cp scripts/detmir-support.env.example "$HOME/.config/awatch-rus/detmir-support.env"
chmod 600 "$HOME/.config/awatch-rus/detmir-support.env"
```
2. Внести фактические IP/имена хостов, сервисы, пути бэкапов, VM IDs и SSH-данные.
Реальные пароли и приватные ключи не должны храниться в репозитории.
3. Запустить нужный режим:
```bash
./scripts/detmir-support-daily.sh
./scripts/detmir-support-weekly.sh
./scripts/detmir-support-monthly.sh
```
Также можно указать отдельный каталог отчётов:
```bash
./scripts/detmir-support-run.sh --scope daily --output-dir /var/log/detmir-support
```
## Файл окружения
Скрипт загружает параметры в таком порядке:
1. файл из переменной `DETMIR_SUPPORT_ENV_FILE`, если она задана;
2. `scripts/detmir-support.env`, если он существует;
3. `$HOME/.config/awatch-rus/detmir-support.env`, если локального файла в
репозитории нет.
Рекомендуемый промышленный вариант — хранить секреты в
`$HOME/.config/awatch-rus/detmir-support.env`, а в репозитории держать только
`scripts/detmir-support.env.example`.
Минимальные параметры для текущего контура DetMir:
```bash
DETMIR_SUPPORT_PVE_HOST=10.10.10.2
DETMIR_SUPPORT_AW_HOST=10.10.10.13
DETMIR_SUPPORT_WEB_HOST=10.10.10.2
DETMIR_SUPPORT_WEB_TLS_HOST=10.10.10.2
DETMIR_SUPPORT_WINDOWS_HOST=192.168.100.19
DETMIR_SUPPORT_SURICATA_HOST=10.10.10.2
DETMIR_SUPPORT_SSH_USER=igor
DETMIR_SUPPORT_AW_SSH_USER=igor
DETMIR_SUPPORT_PVE_BACKUP_DIRS=/var/lib/pve/local-btrfs/dump
```
Парольные переменные вида `DETMIR_SUPPORT_AW_SSH_PASSWORD` допускаются только в
локальном приватном env-файле. В документации, Git и отчетах пароли не
фиксируются.
## Что делает скрипт
Собираются проверки по режиму:
- **daily**: ключевая доступность, сервисы, диски, VM/CT, бэкапы, task log, Suricata.
- **weekly**: всё из `daily` + расширенные проверки логов и журналов.
- **monthly**: всё из `weekly` + проверка апдейтов и базовая фиксация документов/DR-процесса.
Актуальные особенности текущего контура:
- операторский gateway находится на `10.10.10.2`, а не на историческом
`10.10.10.11`;
- текущий Windows/RDP target после восстановления: `192.168.100.19`;
- web health endpoint: `https://10.10.10.2/healthz`, ожидаемый ответ `200`;
- защищенный корень gateway `https://10.10.10.2/` штатно отвечает `401`;
- AW API health проверяется через
`http://10.10.10.13:5600/api/0/settings/`;
- актуальный каталог Proxmox backup storage:
`/var/lib/pve/local-btrfs/dump`;
- если `suricata.service` не активен, проверка процесса Suricata
пропускается как следствие состояния сервиса, а не как отдельный сбой
процесса.
## Результаты
В каталоге отчётов создаются файлы:
- `support-<scope>-<timestamp>.log` — детальный лог запуска
- `support-<scope>-<timestamp>.csv` — машинный реестр проверок
- `support-<scope>-<timestamp>.md` — человекочитаемый отчёт
Коды выхода:
- `0` — без ошибок и предупреждений
- `1` — есть WARN
- `2` — есть FAIL
`SKIP` означает, что проверка не могла быть выполнена в текущих условиях:
например, нет SSH-аутентификации, сервис намеренно выключен или отсутствует
проверяемый компонент. `SKIP` не должен маскировать причину: в строке отчета
должна быть указана диагностическая причина, например
`Permission denied (publickey,password)` или
`Skipped because suricata.service state=inactive`.
## Текущие ожидаемые предупреждения
На момент актуализации документации для контура DetMir допустимо увидеть:
- `aw-server-rust` на `10.10.10.13` в состоянии `inactive`, если фактический
production service — `activitywatch-server`;
- предупреждение по резервным копиям, если последний файл в
`/var/lib/pve/local-btrfs/dump` старше установленного порога;
- `suricata.service state=inactive`, если IDS/IPS на данном узле не введен в
штатную эксплуатацию.
Эти предупреждения нужно фиксировать в отчете и отдельно согласовывать:
включать сервис, менять список ожидаемых сервисов или отмечать компонент как
неиспользуемый.