- 20 приложений её не получают: контейнерами рулит ansible от root, а членство в группе docker равносильно root на хосте - у gitea, miniflux и outline группа осталась — их backup.sh дампит базу через docker compose exec из-под самого приложения - задача service-users-docker-group закрыта, остаток вынесен в новую backup-dump-without-docker-group
34 lines
2.4 KiB
Markdown
34 lines
2.4 KiB
Markdown
# Дампы бэкапов без группы `docker` у сервисных пользователей
|
||
|
||
**Приоритет:** средний
|
||
|
||
Группу `docker` (= root на хосте) убрали у всех сервисных пользователей, кроме
|
||
трёх: `miniflux`, `gitea`, `outline`. Их `backup.sh` делает `docker compose exec`
|
||
(pg_dump, `gitea dump`), а `files/backups/backup-all.py` запускает такие скрипты
|
||
через `su --login <app_user>`, то есть от имени самого приложения — без членства
|
||
в группе дамп упадёт.
|
||
|
||
Дампить снаружи докера нельзя: postgres порт не публикует, `gitea dump` живёт
|
||
только внутри контейнера.
|
||
|
||
Варианты, как развязать:
|
||
|
||
- **A. sudo-обёртка на дамп.** Плейбук кладёт `/usr/local/sbin/backup-<app>-dump.sh`
|
||
(root:root, 0755 — сам app_user его не перепишет) с единственным
|
||
`docker compose exec …`, в sudoers — `<app_user> ALL=(root) NOPASSWD:` ровно на
|
||
этот файл, а `backup.sh` дёргает его через `sudo`. Пользователь получает право
|
||
на одну фиксированную команду вместо права на весь докер. Механизм в проекте
|
||
уже обкатан: так `playbook-backups.yml` разрешает `primary_user` запускать
|
||
`backup-all.py`.
|
||
- **B. root-скрипты в оркестраторе.** Новый контракт в `backup-all.py`: если у
|
||
приложения есть `backup-root.sh` с владельцем root — запускать его без `su`.
|
||
Механизм один на всех, но от root пойдёт скрипт целиком, включая
|
||
`keep-files.py`, и дампы станут root-овыми файлами в директориях приложения.
|
||
- **C. оставить как есть** — три аккаунта как осознанное исключение,
|
||
задокументированное в плейбуках.
|
||
|
||
Предпочтение на момент записи — A.
|
||
|
||
Связано: playbook-miniflux.yml, playbook-gitea.yml, playbook-outline.yml,
|
||
files/*/backup.template.sh, files/backups/backup-all.py.
|