owner: группа docker убрана у сервисных пользователей
- 20 приложений её не получают: контейнерами рулит ansible от root, а членство в группе docker равносильно root на хосте - у gitea, miniflux и outline группа осталась — их backup.sh дампит базу через docker compose exec из-под самого приложения - задача service-users-docker-group закрыта, остаток вынесен в новую backup-dump-without-docker-group
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# Дампы бэкапов без группы `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.
|
||||
Reference in New Issue
Block a user