gendesign/docs/runbooks/basic_auth_management.md
lekss361 cc2d148967
All checks were successful
Deploy / changes (push) Successful in 5s
Deploy / build-worker (push) Successful in 30s
Deploy / build-frontend (push) Successful in 28s
Deploy / build-backend (push) Successful in 31s
Deploy / deploy (push) Successful in 53s
feat(security): закрыть gendsgn.ru basic_auth gate (multi-user, 11 users) (#426)
Pilot demo 28.05.2026: closed gendsgn.ru/* (включая trade-in/) basic_auth gate. /health и /preview/* остаются public через route { } wrapper (Caddy 2.x directive ordering fix).

11 users (admin + user1..user10), bcrypt cost=14, snippet в git (audit trail). Scripts: scripts/auth/{add,remove,list}_user.sh.

Fixup PR #426 (route{} wrap + log rotation + base64 busybox-compat + runbook audit log fix).
2026-05-23 08:16:10 +00:00

61 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Caddy basic_auth — управление пользователями
Snippet: `caddy/users.caddy.snippet`
Scripts: `scripts/auth/{add,remove,list}_user.sh`
Git history = audit trail для всех изменений пользователей.
## Добавить юзера
1. `./scripts/auth/add_user.sh <username> "<comment>"`
2. Скрипт сгенерит 16-char password, забери его в безопасное место
3. Commit `caddy/users.caddy.snippet` → PR → merge → GHA deploy → Caddy reload
4. Выдай username/password стейкхолдеру через защищённый канал (Telegram secret chat / Signal)
Шаблон письма: `docs/PILOT_ACCESS.md`
## Удалить юзера
1. `./scripts/auth/remove_user.sh <username>`
2. Commit → PR → merge → deploy
Caddy начнёт отклонять запросы этого юзера сразу после reload (через ~1 мин после merge).
## Сменить пароль юзеру
1. `./scripts/auth/remove_user.sh <username>` + `./scripts/auth/add_user.sh <username> "<comment>"` в одном PR
## Посмотреть текущих юзеров
```bash
./scripts/auth/list_users.sh
```
## В случае утечки credentials
1. `./scripts/auth/remove_user.sh <affected_username>` СРАЗУ
2. Force-commit + push → merge ASAP (reviewer быстрее через personal DM)
3. Caddy reload проверить вручную: `docker compose -f docker-compose.prod.yml exec caddy caddy reload --config /etc/caddy/Caddyfile`
4. Уведомить остальных стейкхолдеров
## Аудит логи
- Access log: `/var/log/caddy/gendsgn.ru.log` (все запросы JSON, включая auth events).
- Failed auth последние 100:
```bash
docker compose -f docker-compose.prod.yml exec caddy \
grep -P '"status":401' /var/log/caddy/gendsgn.ru.log | tail -100 | jq
```
- Phase 2 TODO: отдельный auth_audit.log + GlitchTip forwarder sidecar.
## Caddy reload после ручной правки на VPS
```bash
# Если snippet изменён вручную на VPS (минуя GHA):
docker compose -f docker-compose.prod.yml exec caddy caddy reload --config /etc/caddy/Caddyfile
```
Стандартный путь (через PR + GHA deploy) делает reload автоматически.
## Phase 2 (TODO)
GlitchTip forwarder sidecar — отдельный PR. Будет парсить `auth_audit.log` и отправлять события в GlitchTip для dashboard + alerting при brute-force.