- 20 приложений её не получают: контейнерами рулит ansible от root, а членство в группе docker равносильно root на хосте - у gitea, miniflux и outline группа осталась — их backup.sh дампит базу через docker compose exec из-под самого приложения - задача service-users-docker-group закрыта, остаток вынесен в новую backup-dump-without-docker-group
2.4 KiB
2.4 KiB
Дампы бэкапов без группы 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.