From 6dfe9813b2eb0ceaf0826daa08696e2e22d91e72 Mon Sep 17 00:00:00 2001 From: vitya Date: Sun, 20 Sep 2026 13:11:54 +0300 Subject: [PATCH] =?UTF-8?q?chore(secrets):=20=D0=B2=D1=8B=D1=87=D0=B8?= =?UTF-8?q?=D1=81=D1=82=D0=B8=D1=82=D1=8C=20VDS-=D0=BA=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D1=8B=20=D0=B8=D0=B7=20.wiki-=D0=BA=D0=BE=D0=BF=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Живое значение Portainer admin (плюс traefik/ntfy/registry-креды) лежало в рабочем дереве .wiki открытым текстом — класс утечки inbox:4179/wiki:187. Значения → плейсхолдеры со ссылкой на pass; канон страниц и так в mappa (файловый канал .wiki закрыт). Ротация — task:3082. --- .../concepts/portainer-2.21-admin-password-regression.md | 8 ++++---- .wiki/concepts/portainer-stack-management-vds.md | 2 +- .wiki/entities/vds-kzntsv.md | 2 +- .wiki/summaries/vds-kzntsv-bootstrap-2026-05-20.md | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.wiki/concepts/portainer-2.21-admin-password-regression.md b/.wiki/concepts/portainer-2.21-admin-password-regression.md index c47c987..aaa2c4a 100644 --- a/.wiki/concepts/portainer-2.21-admin-password-regression.md +++ b/.wiki/concepts/portainer-2.21-admin-password-regression.md @@ -36,19 +36,19 @@ docker run -d --name portainer --network proxy \ # API admin/init available 5 minutes after start curl -sk -X POST https://portainer.vds.kzntsv.site/api/users/admin/init \ -H 'Content-Type: application/json' \ - -d '{"Username":"vitya","Password":"Pryakhin9-VDS-2026"}' + -d '{"Username":"vitya","Password":""}' # Login → JWT JWT=$(curl -sk -X POST https://portainer.vds.kzntsv.site/api/auth \ -H 'Content-Type: application/json' \ - -d '{"Username":"vitya","Password":"Pryakhin9-VDS-2026"}' \ + -d '{"Username":"vitya","Password":""}' \ | jq -r .jwt) # Generate API key APIKEY=$(curl -sk -X POST https://portainer.vds.kzntsv.site/api/users/1/tokens \ -H "Authorization: Bearer $JWT" \ -H 'Content-Type: application/json' \ - -d '{"description":"automation","password":"Pryakhin9-VDS-2026"}' \ + -d '{"description":"automation","password":""}' \ | jq -r .rawAPIKey) ``` @@ -62,7 +62,7 @@ curl -sk -X POST https://portainer.vds.kzntsv.site/api/endpoints \ ## Trade-off -- ✗ Имя пользователя пароль user'а — приходится менять на «12+ chars» (`Pryakhin9-VDS-2026` вместо `Pryakhin9`). +- ✗ Имя пользователя пароль user'а — приходится менять на «12+ chars» (`` вместо `Pryakhin9`). - ✔ Single source of truth — admin live в DB только через API, всегда последовательное состояние. - ✔ API token доступен сразу для дальнейшей автоматизации stacks через REST. diff --git a/.wiki/concepts/portainer-stack-management-vds.md b/.wiki/concepts/portainer-stack-management-vds.md index 5b41135..696e529 100644 --- a/.wiki/concepts/portainer-stack-management-vds.md +++ b/.wiki/concepts/portainer-stack-management-vds.md @@ -19,7 +19,7 @@ Portainer API token из `vds-kzntsv/full-env` `PORTAINER_API_KEY` ранее д ```bash JWT=$(curl -ksS -X POST https://portainer.vds.kzntsv.site/api/auth \ -H "Content-Type: application/json" \ - -d '{"username":"vitya","password":"Pryakhin9-VDS-2026"}' | jq -r .jwt) + -d '{"username":"vitya","password":""}' | jq -r .jwt) ``` Pass-store: `pass show vds-kzntsv/full-env` (full env file со всеми creds). diff --git a/.wiki/entities/vds-kzntsv.md b/.wiki/entities/vds-kzntsv.md index bbe2501..eb4a48a 100644 --- a/.wiki/entities/vds-kzntsv.md +++ b/.wiki/entities/vds-kzntsv.md @@ -68,7 +68,7 @@ Production CMS (MoreThenCms) **остаётся на** [`windows-recovery-host`] | 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 / `` (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 | | `git.kzntsv.site` | Gitea | kreknin users restored | Git hosting | | `verdaccio.kzntsv.site` | Verdaccio | kreknin htpasswd (vitya) | Private npm | diff --git a/.wiki/summaries/vds-kzntsv-bootstrap-2026-05-20.md b/.wiki/summaries/vds-kzntsv-bootstrap-2026-05-20.md index 7e02eb8..7c7bfb2 100644 --- a/.wiki/summaries/vds-kzntsv-bootstrap-2026-05-20.md +++ b/.wiki/summaries/vds-kzntsv-bootstrap-2026-05-20.md @@ -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. - 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 с длинным паролем `` (18 chars). Деталь — [`portainer-2.21-admin-password-regression`](../concepts/portainer-2.21-admin-password-regression.md). API key сгенерирован через `/api/users//tokens`, local docker endpoint создан через `POST /api/endpoints` form-data. Сохранён в `vds-kzntsv.env`. @@ -112,7 +112,7 @@ Pipeline: - **Hermes defer** — user explicit. - **Registry — fresh install, no migration** — user mid-flight reversal (могу новых наделать). - **`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 `` (18 chars)** вместо запрошенного `Pryakhin9` (9 chars) — Portainer 2.21+ hard min 12-char policy, `--admin-password` CLI flag broken в 2.20+. Сохранено в `vds-kzntsv.env`. ## Архитектурное замечание