Перейти к содержанию

Устранение неполадок

По областям. Каждый пункт: что вы видите → почему → что делать.

Установка и старт

Бэкенд падает: ENCRYPTION_KEY must be explicitly set when APP_ENV='production' Ожидаемый fail-fast. Задайте корректный Fernet-ключ в .env (команда генерации — в сообщении ошибки).

Бэкенд падает: invalid format (not a valid Fernet key) Опечатка в ENCRYPTION_KEY. Сгенерируйте заново; если данные уже записаны под старым ключом — восстановите его, не перезаписывайте вслепую.

password authentication failed for user "umbryx" при старте DB_PASSWORD изменён после инициализации volume PostgreSQL. Либо верните старый пароль, либо сбросьте volume (docker compose down -v — уничтожает данные).

Приложение недоступно на :3000 docker compose ps для состояний сервисов; проверьте публикуемый PORT и форвардинг reverse-proxy.

Конфигурация

Сессии слетают после каждого рестарта JWT_SECRET не задан — автогенерация при каждом старте, если персистенция не удалась. Задайте явно.

CORS-ошибки после переноса UI на другой origin Пропишите CORS_ORIGINS с origin UI (никогда *; используются учётные данные).

WS за reverse proxy не обновляется live Блок location /ws/ требует заголовков апгрейда HTTP/1.1 и длинных read-таймаутов (рабочий паттерн — в поставляемых nginx-конфигах). Фронтенд тем временем откатывается на polling.

База данных и миграции

Ошибка миграции при старте Несовпадение версий кода/БД (например, БД восстановлена из более новой резервной копии). Восстановите согласованные версии или осознанно сделайте alembic stamp <revision>.

Медленные списки на огромных проектах Осторожно поднимайте DATABASE_STATEMENT_TIMEOUT; лучше подключите read-replica (DATABASE_REPLICA_URL).

Аутентификация и авторизация

401 везде после logout в другом месте Refresh-токены ротируются при использовании и попадают в blacklist при logout (с Redis). Перевойдите.

403 на действия, которые роль «должна мочь» Сверьтесь с фактической матрицей — например, findings.approve принадлежит только reviewer; credentials.read_secret — owner/admin/editor/operator. См. Контроль доступа.

Экран first-run setup появился на экземпляре с пользователями Вы попадаете не в ту БД (проверьте DATABASE_URL / монтирование volume) — setup показывается только при пустой таблице users.

Сканы и исполнение

Скан падает: no attacker host / 404 на attacker_ssh Executor не настроен. Infra → Connections → добавьте attacker SSH-таргет (или включите executor-флаг у пул-workstation). Модуль attacker_ssh должен быть включён.

No usable SSH credential found for attacker host Кред существует, но не привязан к этому attacker-хосту, либо хост не помечен как attacker-side. Исправьте привязку в Connections.

Задача висит в queued Пул воркеров исчерпан или WORKER_BACKEND=arq без сервиса worker. Проверьте System → Health и бейдж воркера в Jobs. Отличайте от awaiting ROE approval — там нужен approve/reject от owner/admin.

Задача падает: Blocked by ROE/scope guard Цель вне scope, запрещённая активность или вне рабочего окна. Скорректируйте ROE/scope; при подтверждении проверка повторяется.

Данные и шифрование

Cannot read encrypted value / ошибки расшифровки ENCRYPTION_KEY отличается от того, которым писались данные. Восстановите оригинальный ключ или перешифруйте через backend/scripts/rekey.py (сначала dry-run). Без старого ключа данные невосстановимы.

Импорт зашифрованного ZIP просит пароль Экспорты с секретами учётных данных шифруются AES с одноразовым паролем, показанным при экспорте. Потерянный пароль — только повторный экспорт с исходного экземпляра.

Loot показывает «No inline preview» Форматы office/БД — только скачивание, by design. Расшифровка файлов для предпросмотра доступна только platform-admin.

Отчёты и лимиты

Кнопка PDF возвращает HTML-файл WeasyPrint отсутствует в этом образе бэкенда — сервер откатывается на HTML. Установите/включите образ с поддержкой PDF.

429 Too Many Requests Встроенные лимиты: экспорт отчётов 10/мин, вход 5/мин (плюс блокировка аккаунта), reveal учётных данных 30/мин, вебхуки 120/мин.

Лицензирование (EE)

402 на записи, баннер про wind-down Лицензия истекла после grace. Загрузите обновлённый токен (System → License); данные и teardown доступны всё это время.

Heartbeat пишет в лог License Server unreachable Сетевой путь до LICENSE_SERVER_URL закрыт. Не критично до контрактного срока; air-gapped-экземплярам следует переключить канал в offline.

Токен отвергается при загрузке Токен привязан к железу/ключу другого экземпляра — для нового хоста нужен новый раунд C2V.