Files
pet-project-server/docs/backlog/backup-dump-without-docker-group.md
T
av c5217607b1
Linting / YAML Lint (push) Canceled after 0s
Linting / Ansible Lint (push) Canceled after 0s
owner: группа docker убрана у сервисных пользователей
- 20 приложений её не получают: контейнерами рулит ansible от root, а
  членство в группе docker равносильно root на хосте
- у gitea, miniflux и outline группа осталась — их backup.sh дампит базу
  через docker compose exec из-под самого приложения
- задача service-users-docker-group закрыта, остаток вынесен в новую
  backup-dump-without-docker-group
2026-08-22 19:40:57 +03:00

2.4 KiB
Raw Blame History

Дампы бэкапов без группы 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.