[2026-09-02] eagle: family/documents/vault-sync/2026-09-02-restore-privilege-scope.md
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
tags: [truenas, restore, incident, git, media, arr, permission]
|
||||
created: 2026-09-02
|
||||
updated: 2026-09-02
|
||||
status: in-progress (бэкап сделан; правка transmission compose на PUID=950 ждёт подтверждения Alex)
|
||||
status: in-progress (Этап 1 done — оба compose на PUID=950 правлены; Этап 2 заблокирован: transmission без compose-лейблов, нужен rm -f — ждёт ок Alex)
|
||||
---
|
||||
|
||||
# Incident 2026-09-02: Поломка прав uid 921/0000 после restore — масштаб и влияния
|
||||
@@ -156,12 +156,25 @@ ssh truenas_admin@mallexxx.duckdns.org 'bash /tmp/fix-storage-nfs4-acl.sh'
|
||||
- ✅ **Этап 0 — БЭКАП выполнен** → `/home/truenas_admin/variantA_bk/`:
|
||||
`transmission.docker-compose.yml` (оригинал), `arr.docker-compose.yml` (оригинал), `transmission_settings.json` (2982 б), ACL топ-папок (Cartoons Downloads Movies Music git work series books shared) + README.txt.
|
||||
> ⚠️ **Питфолл бэкапа:** `/mnt/RED_2TB/backup` — root-owned (`drwxrwxr-x root root`), `truenas_admin` туда **писать не может** → бэкап сделан в домашку `~truenas_admin`. Файл `docker/transmission/docker-compose.yml` на хосте владеет uid 911 (`drwx------ 911 911`) → прочитан/скопирован **через root-контейнер** `docker exec transmission cat /config/docker-compose.yml`.
|
||||
- ⏸ **Этап 1 — правка compose на PUID/PGID=950.** Новая версия transmission compose подготовлена (`~/transmission-new-compose.yml` на маке = `/tmp/transmission-new-compose.yml` на хосте), добавлено `PUID=950` + `PGID=950`. Шаг `docker cp` в `/config/docker-compose.yml` **заблокирован ожиданием подтверждения Alex** (правка живого контейнера) — НЕ выполнен, файл НЕ перезаписан. Лежит в `/tmp/transmission-new-compose.yml`.
|
||||
- ⬜ **Этап 2 — пересоздать transmission под 950** (root/влияние на рабочий сервис → выполняет Alex):
|
||||
```bash
|
||||
cd /mnt/RED_2TB/docker/transmission && docker compose up -d # пересоздаст с PUID=950
|
||||
docker exec transmission id # ожидаем uid=950
|
||||
```
|
||||
- ✅ **Этап 1 — правка compose на PUID/PGID=950 ВЫПОЛНЕНА (2026-09-02):**
|
||||
- **transmission compose:** `/config/docker-compose.yml` перезаписан через `docker cp /tmp/transmission-new-compose.yml transmission:/config/docker-compose.yml`. Добавлено `PUID=950` + `PGID=950`. Оригинал в `variantA_bk`. (Скрипт-источник на маке: `~/transmission-new-compose.yml`.)
|
||||
- **arr compose:** `/mnt/RED_2TB/docker/arr/docker-compose.yml` перезаписан (владелец truenas_admin → запись прошла без root): во всех 4 сервисах (prowlarr/radarr/sonarr/jellyfin) добавлено `PUID=950` + `PGID=950` (у всех уже был `TZ`). Проверено `docker compose config --quiet` → `COMPOSE_VALID`. Источник: `~/arr-new-compose.yml`. Оригинал в `variantA_bk`.
|
||||
- **Arr compose НЕ имеет секции `networks` у сервисов** → при подъёме будет дефолт-сеть `<project>_default`. Consciously оставлено (оригинал не задавал networks у radarr/sonarr/jellyfin явно, только глобально `media_net`/`caddy_default`; НЕ переопределено чтобы не менять поведение без надобности).
|
||||
- ⚠️ **Этап 2 — ПЕРЕСОЗДАНИЕ transmission — ЗАБЛОКИРОВАНО (ключевой технический питфолл, 2026-09-02):**
|
||||
- `cd /mnt/RED_2TB/docker/transmission` → **`permission denied`** (каталог `drwx------ 911 911` — владелец transdamon/911, truenas_admin нет доступа).
|
||||
- Попытка `docker compose -f /tmp/transmission-new-compose.yml up -d` → создал сеть `tmp_default` и упал: **name conflict** (`container "transmission" already in use`).
|
||||
- Полный рабочий контейнер пересоздать из compose **невозможно** по двум причинам:
|
||||
1. Контейнер создан **без compose-лейблов** (`com.docker.compose.project = <no value>`) → compose его **не распознаёт как свой** → не может мигрировать/пересоздать, только name-conflict.
|
||||
2. Композ-файл в каталоге 911 недоступен для работы оттуда.
|
||||
- **Найденное решение:** удалить старый контейнер и поднять заново с корректным проектом (сохранит сеть `transmission_default`):
|
||||
```bash
|
||||
docker rm -f transmission # данные в /config и /mnt/storage НЕ теряются (bind-mount на диск)
|
||||
docker compose -f /tmp/transmission-new-compose.yml -p transmission up -d
|
||||
docker exec transmission id # ожидаем uid=950
|
||||
```
|
||||
- **Почему PUID нельзя применить к работающему контейнеру?** env зашивается при `docker run` (создании). `docker update` меняет ТОЛЬКО ресурсы (CPU/RAM/restart), **НЕ переменные окружения** — ограничение Docker. Пересоздание — единственный способ.
|
||||
- **Альтернатива без пересоздания (если не хотим трогать transmission root):** оставить root; НО тогда новые скачанные файлы будут `root:root`, и radarr/jellyfin (под 950) их не прочитают. → PUID=950 у transmission всё же нужен для цепочки. (Обход с setgid-битом на dir + group 950 возможен как fallback, не выбран.)
|
||||
- **Статус:** ждёт ок Alex на `docker rm -f transmission`.
|
||||
- ⬜ **Этап 3 — рекурсивный фикс прав вглубь** (root → выполняет Alex, масштаб ~257k+ файлов): рекурсивно вернуть владельца 950:950 + снять 0000 на файлах/папках (`find ... -exec chown -R 950:950 {} +`, `chmod u+rw,g+r` для файлов, `u+rwX,g+rwX` для каталогов). Или через UI `Apply recursively`.
|
||||
|
||||
### Точное содержание transmission compose (оригинал, важно для пересоздания)
|
||||
|
||||
Reference in New Issue
Block a user