# ADR-032: Права на каталог состояния и файлы базы Уточняет [ADR-022](022-deploy-nginx-systemd.md): к юниту добавлены `StateDirectoryMode` и `UMask`. ## Контекст `docs/deploy.md` задавал владельца `/var/lib/bare`, но не режим. `StateDirectory=bare` создаёт каталог с режимом 0755, SQLite кладёт базу с 0644 — на целевой машине, где живут ещё десяток сайтов и чужие сервисы, файл базы читал любой локальный пользователь. В базе нет плейнтекста, но есть `argon2id(authKey)` и ключевые блобы. Модель угроз прямо называет стойкость блоба к оффлайн-перебору равной стойкости пароля: раздавать этот материал соседям по машине незачем. Пункт «кража базы или бэкапа» подразумевает злоумышленника, а не любого пользователя системы. ## Решение - Каталог `/var/lib/bare` — режим 0700, владелец `bare`. В юните `StateDirectoryMode=0700`, чтобы это переживало рестарт. - Файлы базы — 0600. В юните `UMask=0077`: `bare.db`, `-wal` и `-shm` создаются закрытыми. - `/etc/bare` — 0700, `/etc/bare/env` — 0600, владелец `root`: там VAPID-ключи. - Бэкап наследует те же права; `VACUUM INTO` пишет в тот же каталог. ## Следствия - Локальный пользователь без root не читает ни базу, ни секреты окружения. - От оператора машины это не защищает и не должно: он остаётся вне модели угроз. - Восстановление из бэкапа требует восстановить и права; строка про это есть в `docs/deploy.md`.