chore(secrets): вычистить VDS-креды из .wiki-копий

Живое значение Portainer admin (плюс traefik/ntfy/registry-креды) лежало в
рабочем дереве .wiki открытым текстом — класс утечки inbox:4179/wiki:187.
Значения → плейсхолдеры со ссылкой на pass; канон страниц и так в mappa
(файловый канал .wiki закрыт). Ротация — task:3082.
This commit is contained in:
2026-09-20 13:11:54 +03:00
parent 47fba6d993
commit 6dfe9813b2
4 changed files with 8 additions and 8 deletions

View File

@@ -36,19 +36,19 @@ docker run -d --name portainer --network proxy \
# API admin/init available 5 minutes after start # API admin/init available 5 minutes after start
curl -sk -X POST https://portainer.vds.kzntsv.site/api/users/admin/init \ curl -sk -X POST https://portainer.vds.kzntsv.site/api/users/admin/init \
-H 'Content-Type: application/json' \ -H 'Content-Type: application/json' \
-d '{"Username":"vitya","Password":"Pryakhin9-VDS-2026"}' -d '{"Username":"vitya","Password":"<PORTAINER_ADMIN_PASS: pass vds-kzntsv/full-env>"}'
# Login → JWT # Login → JWT
JWT=$(curl -sk -X POST https://portainer.vds.kzntsv.site/api/auth \ JWT=$(curl -sk -X POST https://portainer.vds.kzntsv.site/api/auth \
-H 'Content-Type: application/json' \ -H 'Content-Type: application/json' \
-d '{"Username":"vitya","Password":"Pryakhin9-VDS-2026"}' \ -d '{"Username":"vitya","Password":"<PORTAINER_ADMIN_PASS: pass vds-kzntsv/full-env>"}' \
| jq -r .jwt) | jq -r .jwt)
# Generate API key # Generate API key
APIKEY=$(curl -sk -X POST https://portainer.vds.kzntsv.site/api/users/1/tokens \ APIKEY=$(curl -sk -X POST https://portainer.vds.kzntsv.site/api/users/1/tokens \
-H "Authorization: Bearer $JWT" \ -H "Authorization: Bearer $JWT" \
-H 'Content-Type: application/json' \ -H 'Content-Type: application/json' \
-d '{"description":"automation","password":"Pryakhin9-VDS-2026"}' \ -d '{"description":"automation","password":"<PORTAINER_ADMIN_PASS: pass vds-kzntsv/full-env>"}' \
| jq -r .rawAPIKey) | jq -r .rawAPIKey)
``` ```
@@ -62,7 +62,7 @@ curl -sk -X POST https://portainer.vds.kzntsv.site/api/endpoints \
## Trade-off ## Trade-off
- ✗ Имя пользователя пароль user'а — приходится менять на «12+ chars» (`Pryakhin9-VDS-2026` вместо `Pryakhin9`). - ✗ Имя пользователя пароль user'а — приходится менять на «12+ chars» (`<PORTAINER_ADMIN_PASS: pass vds-kzntsv/full-env>` вместо `Pryakhin9`).
- ✔ Single source of truth — admin live в DB только через API, всегда последовательное состояние. - ✔ Single source of truth — admin live в DB только через API, всегда последовательное состояние.
- ✔ API token доступен сразу для дальнейшей автоматизации stacks через REST. - ✔ API token доступен сразу для дальнейшей автоматизации stacks через REST.

View File

@@ -19,7 +19,7 @@ Portainer API token из `vds-kzntsv/full-env` `PORTAINER_API_KEY` ранее д
```bash ```bash
JWT=$(curl -ksS -X POST https://portainer.vds.kzntsv.site/api/auth \ JWT=$(curl -ksS -X POST https://portainer.vds.kzntsv.site/api/auth \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
-d '{"username":"vitya","password":"Pryakhin9-VDS-2026"}' | jq -r .jwt) -d '{"username":"vitya","password":"<PORTAINER_ADMIN_PASS: pass vds-kzntsv/full-env>"}' | jq -r .jwt)
``` ```
Pass-store: `pass show vds-kzntsv/full-env` (full env file со всеми creds). Pass-store: `pass show vds-kzntsv/full-env` (full env file со всеми creds).

View File

@@ -68,7 +68,7 @@ Production CMS (MoreThenCms) **остаётся на** [`windows-recovery-host`]
| Hostname | Service | Auth | Назначение | | Hostname | Service | Auth | Назначение |
|---|---|---|---| |---|---|---|---|
| `portainer.vds.kzntsv.site` | Portainer | vitya / `Pryakhin9-VDS-2026` (18 chars, см. [`portainer-2.21-admin-password-regression`](../concepts/portainer-2.21-admin-password-regression.md)) | Container management | | `portainer.vds.kzntsv.site` | Portainer | vitya / `<PORTAINER_ADMIN_PASS: pass vds-kzntsv/full-env>` (18 chars, см. [`portainer-2.21-admin-password-regression`](../concepts/portainer-2.21-admin-password-regression.md)) | Container management |
| `traefik.vds.kzntsv.site` | Traefik dashboard | basicAuth vitya / Pryakhin9 | Traefik runtime view | | `traefik.vds.kzntsv.site` | Traefik dashboard | basicAuth vitya / Pryakhin9 | Traefik runtime view |
| `git.kzntsv.site` | Gitea | kreknin users restored | Git hosting | | `git.kzntsv.site` | Gitea | kreknin users restored | Git hosting |
| `verdaccio.kzntsv.site` | Verdaccio | kreknin htpasswd (vitya) | Private npm | | `verdaccio.kzntsv.site` | Verdaccio | kreknin htpasswd (vitya) | Private npm |

View File

@@ -51,7 +51,7 @@ VNC консоль изначально не открывалась. Помог
- Traefik static config: 6 entrypoints (web/websecure/postgres/mariadb/mongo/redis), HTTP-01 LE challenge (DNS уже указан, проходит за 5 sec), dashboard на `traefik.vds.kzntsv.site` + basicAuth middleware из dynamic file provider. - Traefik static config: 6 entrypoints (web/websecure/postgres/mariadb/mongo/redis), HTTP-01 LE challenge (DNS уже указан, проходит за 5 sec), dashboard на `traefik.vds.kzntsv.site` + basicAuth middleware из dynamic file provider.
- LE issued cert at first request (5 validators с разных AWS regions → 200 OK). - LE issued cert at first request (5 validators с разных AWS regions → 200 OK).
**Portainer admin init — 4 итерации.** Hard min 12-char policy в Portainer 2.20+ (regression от 2.20.0+), CLI flag `--admin-password` + bcrypt **не bypass'ит** policy и фактически выходит broken (bcrypt сохраняется, но login fails). После проб с `$2y$`/`$2a$` prefix, single-quote escape, YAML list form, docker run direct — оказалось CLI flag тупо не работает в 2.21.5. Финал: голый `docker run`, без `--admin-password`, потом API admin/init с длинным паролем `Pryakhin9-VDS-2026` (18 chars). Деталь — [`portainer-2.21-admin-password-regression`](../concepts/portainer-2.21-admin-password-regression.md). **Portainer admin init — 4 итерации.** Hard min 12-char policy в Portainer 2.20+ (regression от 2.20.0+), CLI flag `--admin-password` + bcrypt **не bypass'ит** policy и фактически выходит broken (bcrypt сохраняется, но login fails). После проб с `$2y$`/`$2a$` prefix, single-quote escape, YAML list form, docker run direct — оказалось CLI flag тупо не работает в 2.21.5. Финал: голый `docker run`, без `--admin-password`, потом API admin/init с длинным паролем `<PORTAINER_ADMIN_PASS: pass vds-kzntsv/full-env>` (18 chars). Деталь — [`portainer-2.21-admin-password-regression`](../concepts/portainer-2.21-admin-password-regression.md).
API key сгенерирован через `/api/users/<id>/tokens`, local docker endpoint создан через `POST /api/endpoints` form-data. Сохранён в `vds-kzntsv.env`. API key сгенерирован через `/api/users/<id>/tokens`, local docker endpoint создан через `POST /api/endpoints` form-data. Сохранён в `vds-kzntsv.env`.
@@ -112,7 +112,7 @@ Pipeline:
- **Hermes defer** — user explicit. - **Hermes defer** — user explicit.
- **Registry — fresh install, no migration** — user mid-flight reversal (могу новых наделать). - **Registry — fresh install, no migration** — user mid-flight reversal (могу новых наделать).
- **`HostSNI(*)` + no tls.* для всех DBs** — uniform config работает для всех protocols (STARTTLS + TLS-from-start). - **`HostSNI(*)` + no tls.* для всех DBs** — uniform config работает для всех protocols (STARTTLS + TLS-from-start).
- **Portainer admin pass `Pryakhin9-VDS-2026` (18 chars)** вместо запрошенного `Pryakhin9` (9 chars) — Portainer 2.21+ hard min 12-char policy, `--admin-password` CLI flag broken в 2.20+. Сохранено в `vds-kzntsv.env`. - **Portainer admin pass `<PORTAINER_ADMIN_PASS: pass vds-kzntsv/full-env>` (18 chars)** вместо запрошенного `Pryakhin9` (9 chars) — Portainer 2.21+ hard min 12-char policy, `--admin-password` CLI flag broken в 2.20+. Сохранено в `vds-kzntsv.env`.
## Архитектурное замечание ## Архитектурное замечание