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

2.6 KiB
Raw Blame History

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

Посмотреть текущих юзеров

./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:
    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

# Если 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.