- Первый администратор создаётся через
/setup. - Пароли хранятся как Argon2 hash.
- Android получает JWT access token через
/api/v1/auth/login. - Android хранит серверный URL, access token и базовую сессию в
EncryptedSharedPreferences. - OpenWrt agent использует отдельный device token.
- Device token хранится на сервере только как hash.
- Web UI
/devicesтребует вход через/login. - Все Web UI POST-формы защищены CSRF-токеном; детали описаны в security-web-ui.md.
- API-документация
/docs,/redoc,/openapi.jsonпо умолчанию выключена. - Команды управления выполняются только через allowlist.
- Произвольные shell-команды на роутере не поддерживаются.
- Доступ к серверным устройствам сейчас жёстко ограничен моделью
single-owner.
Сервер не стартует, если:
WRTMONITOR_JWT_SECRETпустой;WRTMONITOR_JWT_SECRETкороче 32 символов;WRTMONITOR_JWT_SECRETравен дефолтномуchange-me-*;- пароль PostgreSQL в
WRTMONITOR_DATABASE_URLпустой; - пароль PostgreSQL начинается с
change-me; - используется не PostgreSQL URL.
Исключение для тестов и CI возможно только при явном:
WRTMONITOR_ALLOW_INSECURE_DEV_DEFAULTS=trueНа реальном сервере этот параметр должен быть:
WRTMONITOR_ALLOW_INSECURE_DEV_DEFAULTS=falseProduction server_url должен быть HTTPS. Локальный HTTP разрешается только для временного теста:
WRTMONITOR_ALLOW_INSECURE_LOCAL=true- произвольное выполнение shell-команд на роутере;
- входящий порт из интернета на OpenWrt;
- хранение device token в открытом виде на сервере;
- SQLite-режим для production.