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).
2.6 KiB
2.6 KiB
Caddy basic_auth — управление пользователями
Snippet: caddy/users.caddy.snippet
Scripts: scripts/auth/{add,remove,list}_user.sh
Git history = audit trail для всех изменений пользователей.
Добавить юзера
./scripts/auth/add_user.sh <username> "<comment>"- Скрипт сгенерит 16-char password, забери его в безопасное место
- Commit
caddy/users.caddy.snippet→ PR → merge → GHA deploy → Caddy reload - Выдай username/password стейкхолдеру через защищённый канал (Telegram secret chat / Signal)
Шаблон письма: docs/PILOT_ACCESS.md
Удалить юзера
./scripts/auth/remove_user.sh <username>- Commit → PR → merge → deploy
Caddy начнёт отклонять запросы этого юзера сразу после reload (через ~1 мин после merge).
Сменить пароль юзеру
./scripts/auth/remove_user.sh <username>+./scripts/auth/add_user.sh <username> "<comment>"в одном PR
Посмотреть текущих юзеров
./scripts/auth/list_users.sh
В случае утечки credentials
./scripts/auth/remove_user.sh <affected_username>СРАЗУ- Force-commit + push → merge ASAP (reviewer быстрее через personal DM)
- Caddy reload проверить вручную:
docker compose -f docker-compose.prod.yml exec caddy caddy reload --config /etc/caddy/Caddyfile - Уведомить остальных стейкхолдеров
Аудит логи
- 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.