82 lines
No EOL
10 KiB
Markdown
82 lines
No EOL
10 KiB
Markdown
# Реестр ключей и секретов хоста (только пути и описания, БЕЗ значений)
|
||
|
||
Дата: 2026-09-30. Составил: часовой поток Simbiot Harness (t-260930061207-617c69).
|
||
Правило: значения секретов в чат/файлы отчётов не выводятся — только пути и назначение.
|
||
|
||
## 1. Simbiot Harness (активный, владелец: харнес)
|
||
|
||
| Путь | Что | Права | Бэкап | Ротация |
|
||
|---|---|---|---|---|
|
||
| `/root/simbiot-harness/.env` | ROUTER_KEY, OPENROUTER_KEY, SIMBIOT_TG_TOKEN, SIMBIOT_TG_ALLOWED, ROUTER/OPENROUTER_BASE_URL | 600 | да (см. §6) | ROUTER_KEY — по политике 9router; TG-токен — при подозрении |
|
||
| `/etc/simbiot/dashboard.env` | SIMBIOT_DASH_TOKEN (страница + /api/state, порт 8765 **открыт наружу 0.0.0.0**) | 600 | да | при демобилизации дашборда |
|
||
| git-история `/root/simbiot-harness` | `.env` убран из трекинга (e6a99ce); **01.10 push в приватный репо https://git.cil.by/symbiot/simbiot-harness (3361b67..d39f60f)**: аудит — `.env` в истории отсутствует (0 коммитов), скан sk-/bot/rsh/Bearer по git log -p --all чист. Утечки не было. | — | n/a | токен Forgejo symbiot (9f29709…) — admin-скоп, ротация при компрометации; в репо не хранить |
|
||
|
||
## 2. Наследие агента Гермес (живое, сервисы active)
|
||
|
||
| Путь | Что | Права | Примечание |
|
||
|---|---|---|---|
|
||
| `/root/.hermes/.env` (+ `.env.bak.tok-5673079687`) | ~30 ключей: TELEGRAM_BOT_TOKEN/TOKEN, OLLAMA_API_KEY, KIE/KIMI_API_KEY, RESEND_API_KEY, X_* (OAuth Twitter, 8 шт: consumer/access/refresh/bearer), MATRIX_ACCESS_TOKEN, SIMPLEX_*, 9ROUTER_CIL_API_KEY, HERMES_CUSTOM_*_API_KEY, 42admin-*, OIDC-токены профиля | 600 | `.env.bak.*` — тот же набор, дубликат ротации токена |
|
||
| `/root/.hermes/profiles/coop-group/.env` | TELEGRAM_BOT_TOKEN (групповой бот), KIMI/OLLAMA_API_KEY, 9ROUTER_CIL_API_KEY, HERMES_CUSTOM_ROUTER_CIL_BY_API_KEY | 600 | профиль кооп-чата |
|
||
| `/root/.hermes/config.yaml` (+ 8 бэкапов `config.yaml.bak.*`) | api_key у ~10 провайдеров (9router, ollama-cloud, kimi-coding, glm-coding, 9router-remote, 9router-cil…), password_hash, token_analytics | 600 | бэкапы копируют те же ключи |
|
||
| `/root/.hermes/auth.json` | credential_pool: kimi-coding, zai, openrouter, custom:9router(-remote/-cil), glm-coding, ollama-cloud, nous (OAuth client_id) | 600 | актуальный пул кредов LLM-провайдеров |
|
||
| `/root/.hermes/profiles/coop-group/auth.json` | тот же пул для профиля coop-group | 600 | |
|
||
| `/root/.hermes/chain-key.json` | **приватный ключ блокчейна** (address + private_key, кооп 42) | 600 | критично; бэкап обязателен, ротация невозможна без смены адреса |
|
||
| `/root/.hermes/harness-attest.json` | аттестационный чек (root/tx/files/bytes/ts) — не секрет | 600 | не бэкапить отдельно |
|
||
| `/root/.hermes/telegram_config.yaml` | token TG | 600 | |
|
||
| `/etc/systemd/system/hermes-api.service` | **ADAPTER_KEYS inline** (ключ доступа к локальному OpenAI-адаптеру) | 600 (было 644 — исправлено) | см. §5 рекомендация |
|
||
| `/root/hermes-api/.key` | ключ адаптера (тот же) | 600 | адаптер слушает только 127.0.0.1:9100 |
|
||
| `/root/.hermes/state.db` (+ бэкапы `/root/backups/hermes/state.db.*.bak.zst`, 644, ротация 14) | SQLite агента — внутри сессии/токены в истории | 600 | бэкапы содержат секреты, права нести в 600 |
|
||
|
||
## 3. Инфраструктура кооператива (/root, /opt)
|
||
|
||
| Путь | Что | Права | Примечание |
|
||
|---|---|---|---|
|
||
| `/root/coop/.env` | HETZNER_API_TOKEN, STRIPE_(LIVE/TEST)_KEY, STRIPE_WEBHOOK_SECRET, RESEND_API_KEY, HARNESS_TOKEN, TIME_REPORT_TOKEN, SALARY_CRON_TOKEN, STUDIO_ADMIN_KEY, LIVE_MONITOR_TOKEN, MAGIC_SEND_SECRET, GOOGLE_AI_KEY | 600 | ядро биллинга коопа |
|
||
| `/root/coop/.alfa_env` (EnvironmentFile coop-portal.service) | FORGEJO_PULL_TOKEN — scoped read-токен Forgejo (simbiot-agent-pull, read:repository): им simbiot-агенты клонируют /root/simbiot-harness с git.cil.by при деплое (simbiot_harness.py) | 600 | ротация: Forgejo → Settings → Applications → удалить и перевыпустить, обновить .alfa_env, рестарт coop-portal |
|
||
| `/root/rag/.env` | RAG_API_KEY (публичный сервис RAG) | 600 | |
|
||
| `/root/litellm/.env` | LITELLM_MASTER_KEY, ZAI/KIMI/OLLAMA_API_KEY ×4, POSTGRES_PASSWORD | 600 | |
|
||
| `/root/9router/.env` | JWT_SECRET, INITIAL_PASSWORD, API_KEY_SECRET, MACHINE_ID_SALT, OLLAMA_CLOUD_API_KEY | 600 (было 644 — исправлено) | сервис слушает **0.0.0.0:20128** |
|
||
| `/root/deip/.env` | DEIP_ADMIN_TOKEN, STRIPE_* (live+test+webhooks), RESEND_API_KEY, OLLAMA_API_KEY | 600 (было 644) | |
|
||
| `/root/jitsi/.env` | JICOFO/JVB/JIGASI XMPP-пароли, JIGASI_TRANSCRIBER_PASSWORD | 600 (было 644) | |
|
||
| `/root/cal-diy/.env` | CALCOM_DB_PASSWORD, NEXTAUTH_SECRET, CALENDSO_ENCRYPTION_KEY, SSO42_CLIENT_SECRET | 600 (было 644) | |
|
||
| `/root/chatwoot/.env` | POSTGRES/REDIS_PASSWORD, SECRET_KEY_BASE, C42_CLIENT_ID(+secret) | 600 (было 644) | |
|
||
| `/opt/documenso/.env` | POSTGRES_PASSWORD, NEXTAUTH_SECRET, NEXT_PRIVATE_ENCRYPTION_KEY ×2, SMTP_PASSWORD, OIDC_CLIENT_SECRET, SIGNING_PASSPHRASE | 600 | |
|
||
| `/opt/kan/.env` | POSTGRES_PASSWORD, BETTER_AUTH_SECRET, OIDC_CLIENT_SECRET | 600 | |
|
||
| `/opt/rallly/.env` | SECRET_PASSWORD, OIDC_CLIENT_SECRET, SMTP_PWD, POSTGRES_PASSWORD, S3_ACCESS_KEY_ID/SECRET, GARAGE_RPC_SECRET | 600 | |
|
||
| `/opt/espocrm/compose.yml` | **inline**: MARIADB_ROOT/USER_PASSWORD, ESPOCRM_ADMIN_PASSWORD (admin: alex), ESPOCRM_DATABASE_PASSWORD | 600 (было 644 — исправлено) | вынести в .env или secrets |
|
||
| `/opt/hermes-agent/.env` | OPENROUTER_API_KEY, GLM_API_KEY, TELEGRAM_BOT_TOKEN, KIMI_API_KEY | 600 (было 644) | |
|
||
| `/opt/apps/totem-platform/.env` | STRIPE_WEBHOOK_SECRET | 600 (было 644) | |
|
||
| `/opt/vexa/.env` | TRANSCRIPTION_SERVICE_TOKEN, пароли/ключи портов сервисов | 600 (было 644) | |
|
||
| `/root/docker-compose.openclaw.yml` | OPENCLAW_GATEWAY_PASSWORD **inline в командной строке** | 600 (было 644 — исправлено) | |
|
||
| `/root/.config/claude-code/env` | CLAUDE_CODE_OAUTH_TOKEN; router-env: ANTHROPIC_API_KEY (через 9router) | 600 | |
|
||
| `/root/.openclaw/credentials/` | telegram-default-allowFrom.json, telegram-pairing.json | 600, dir 700 | |
|
||
| `/root/.docker/.token_seed` | seed docker-токенов | 600, dir 700 | |
|
||
| `/root/.config/gogcli/` | gog-credentials (OAuth google) | 600 | |
|
||
| `~/.ssh` | **пусто** — приватных SSH-ключей пользователя нет | — | |
|
||
| `/etc/ssh/ssh_host_*_key` | host-ключи сервера | 600 | бэкапить при DR |
|
||
| systemd `simbiot-*.service` | секретов нет (токены в .env/dash-env) | 644 | |
|
||
|
||
## 4. Отсутствует / не найдено
|
||
|
||
- `~/.ssh/` — нет ни приватных ключей, ни known_hosts: доступ наружу по SSH не хранится.
|
||
- `/root/.git-credentials`, `.netrc`, `.pypirc` — нет.
|
||
- `/etc/docker/` — нет registry-секретов (auths пуст).
|
||
- Bitwarden-интеграция в `config.yaml` (`secrets.bitwarden`) — **disabled**, пароль-менеджер не подключён.
|
||
- crontab `/root/coop/scripts/*` — inline-секретов нет (ключи тянутся из .env coop).
|
||
|
||
## 5. Рекомендации
|
||
|
||
1. **Права**: исправлено в этом тике — 11 файлов с 644→600 (espocrm compose, hermes-agent, 9router, deip, jitsi, cal-diy, chatwoot, openclaw, totem-platform, vexa, hermes-api.service). На хосте есть не-root юзер `swarm` (uid 1000, bash) — мир-читаемые секреты были ему доступны.
|
||
2. **systemd с inline-секретами** (`hermes-api.service`, openclaw): перенести в `EnvironmentFile=` с правами 600.
|
||
3. **git-история харнеса**: `.env` с ROUTER_KEY+SIMBIOT_TG_TOKEN в коммитах 6236044/2f758bb. Репо без remote → утечки не было. Перед push: `git filter-repo --path .env --invert-paths` (или ротация обоих ключей).
|
||
4. **Бэкап state.db** (`/root/backups/hermes/`) содержит сессии/креды: chmod 600 на `*.bak.zst` и добавить в скрипт `umask 077`.
|
||
5. **Экспозиция**: dashboard 8765 и 9router 20128 слушают 0.0.0.0 — dashboard за токеном (ок), 9router — проверить firewall/привязку, JWT_SECRET и API_KEY_SECRET живут в его .env.
|
||
6. **Куда выгрузить копию** (реестр+значения):
|
||
- зашифрованный архив возрастом/age: `age -r <public-key> secrets.tar.age` → выгрузить в S3 Garage (уже есть S3_ACCESS_KEY_ID у rallly) или Hetzner Storage Box;
|
||
- preferable: поднять Bitwarden Secrets Manager — интеграция уже есть в конфиге Гермеса (`secrets.bitwarden.enabled: false` → true), это даёт центральное хранение + ротацию + TTL;
|
||
- критичный минимум для DR: chain-key.json (приватный ключ коопа), coop/.env (Stripe live + Hetzner), .hermes/.env (X OAuth refresh-токены невосстановимы!), hermes-api adapter key.
|
||
7. **Ротация**: X_OAUTH2_USER_REFRESH_TOKEN — одноразовый по природе, копию держать обязательно; STRIPE_LIVE_KEY + HETZNER_API_TOKEN — ротация раз в 90 дней; ADAPTER_KEYS — сменить и разнести по файлу (см. п.2).
|
||
|
||
## 6. Хранение этого реестра
|
||
|
||
Сам реестр значений не содержит и безопасен в git. Значения секретов в него не заносить. |