gendesign/docs/runbooks/basic_auth_management.md
lekss361 cdce8e84a1 fix(security): применить ревью PR #426 — route wrap + log rotation + base64 busybox + runbook log fix
- Caddyfile: обернуть gendsgn.ru и :80 в route { } — сохраняет порядок директив,
  /health и /preview/* теперь действительно short-circuit до basic_auth
- Caddyfile: добавить roll_size 50MiB / roll_keep 5 / roll_keep_for 720h в gendsgn.ru.log
- scripts/auth/add_user.sh: заменить base64 -w 0 (GNU-only) на base64 | tr -d "\n"
  (busybox-compatible, caddy:2 Alpine base image)
- docs/runbooks/basic_auth_management.md: убрать несуществующий auth_audit.log,
  заменить на реальную команду grep по статусу 401 в gendsgn.ru.log

caddy validate: Valid configuration (confirmed locally via caddy:2 container).
Ref: #426 (comment)
2026-05-23 11:11:50 +03: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.