23 lines
1.5 KiB
Markdown
23 lines
1.5 KiB
Markdown
# Мелкий хардненинг контейнеров
|
||
|
||
**Приоритет:** низкий
|
||
|
||
- **`no-new-privileges`**: ни один compose-шаблон не задаёт `security_opt:
|
||
["no-new-privileges:true"]`. Добавить всем — одна строка, режет эскалацию через
|
||
setuid-бинарники в образах.
|
||
- **non-root `user:`**: без него работают caddyproxy, gramps (данные в
|
||
`/root/.gramps`), rssbridge, dozzle, homepage и valkey/postgres-сайдкары gramps.
|
||
Дотянуть там, где образ позволяет (rssbridge, valkey) — продолжение уже принятой
|
||
в проекте практики.
|
||
- **homepage на `:latest`** (`vars/homepage.yml`) — плавающий тег + ночной `docker
|
||
image prune` может подтянуть другое содержимое без отката. Перевести на
|
||
иммутабельный `<sha>-<timestamp>` по образцу transcriber
|
||
(`vars/transcriber.images.yml`).
|
||
- **Соглашение о портах**: зафиксировать в AGENTS.md, что новые `ports:` — только
|
||
с `127.0.0.1:`. Docker публикует порты мимо UFW, поэтому дисциплина
|
||
localhost-биндинга — единственный контроль (сейчас соблюдается: apprise, wanderer).
|
||
|
||
Из sec-ревью (fable, 2026-07-13).
|
||
|
||
Связано: все files/*/docker-compose*.template.yml, vars/homepage.yml, AGENTS.md.
|