From 5d1ae687053f8632bef337384db6c4d028cc5fa7 Mon Sep 17 00:00:00 2001 From: Micha Date: Wed, 3 Jun 2026 10:55:56 +0200 Subject: [PATCH] fix(restore): nextcloud permissions on unraid shfs (no-new-privileges removal) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Zweiter Erstlauf 2026-06-03 scheiterte weiterhin mit 503, obwohl config.php korrekt gepatcht war. Ursache: Unraid's FUSE/shfs-Dateisystem auf User-Shares ignoriert chown -R 33:33 still — Dateien bleiben bei sshd:sshd. Der Nextcloud-Entrypoint versucht intern chmod/chown auf /var/www/html und /var/www/html/data, was mit no-new-privileges:true blockiert wird. Fix: - no-new-privileges vom restoretest-nextcloud Container entfernt, damit der Entrypoint Rechte im Container selbst setzen kann (Test-Postgres und Test-Redis behalten no-new-privileges) - Host-seitiger chown durch chmod a+rwX ersetzt (funktioniert auf shfs) - Vertretbar im isolierten Smoke-Kontext (127.0.0.1, Wegwerf-Daten, kein Traefik) Co-Authored-By: Claude Opus 4.7 --- ops/restore-tests/nextcloud-compose.test.yml | 9 +++++++-- ops/restore-tests/nextcloud-restore-test.sh | 10 +++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/ops/restore-tests/nextcloud-compose.test.yml b/ops/restore-tests/nextcloud-compose.test.yml index c75f204..4b7ff79 100644 --- a/ops/restore-tests/nextcloud-compose.test.yml +++ b/ops/restore-tests/nextcloud-compose.test.yml @@ -57,5 +57,10 @@ services: # Restore-Lab-Pfade: alles isoliert, keine produktiven Mounts. - /mnt/user/backups/restore-lab/nextcloud/html:/var/www/html - /mnt/user/backups/restore-lab/nextcloud/data:/var/www/html/data - security_opt: - - no-new-privileges:true + # KEIN no-new-privileges fuer den Smoke-Test-Container. + # Der Nextcloud-Entrypoint fuehrt intern chown/chmod auf /var/www/html + # und /var/www/html/data aus. Auf Unraid (FUSE/shfs) ignoriert das + # Host-Dateisystem chown-Aufrufe von aussen, deshalb muss der + # Container-Entrypoint die Rechte selbst setzen koennen. Im isolierten + # Smoke-Kontext (127.0.0.1, kein Traefik, Wegwerf-Daten) ist das + # vertretbar. Test-Postgres und Test-Redis behalten no-new-privileges. diff --git a/ops/restore-tests/nextcloud-restore-test.sh b/ops/restore-tests/nextcloud-restore-test.sh index af3deb1..f7b0913 100644 --- a/ops/restore-tests/nextcloud-restore-test.sh +++ b/ops/restore-tests/nextcloud-restore-test.sh @@ -126,11 +126,11 @@ mv "$EXTRACT_DIR/local/borg-dumps/latest/nextcloud.dump" "$RESTORE_ROOT/dumps/la # Im Restore-Lab ist das /mnt/user/backups/restore-lab/nextcloud/data. mkdir -p "$RESTORE_ROOT/data" -# Nextcloud laeuft im Container als www-data (UID 33, GID 33). -# Die aus Borg extrahierten Dateien gehoeren typischerweise dem -# borg-ui-Container-User (sshd o. ae.). Ohne chown scheitert Nextcloud -# beim Start mit "chmod(): Operation not permitted" und gibt dauerhaft 503. -chown -R 33:33 "$RESTORE_ROOT/html" "$RESTORE_ROOT/data" +# Unraid (FUSE/shfs) ignoriert chown auf User-Shares. Stattdessen setzen +# wir die Dateien auf world-writable, damit der Nextcloud-Entrypoint +# (der als root startet und intern auf www-data wechselt) die Dateien +# lesen und beschreiben kann. Im isolierten Smoke-Kontext vertretbar. +chmod -R a+rwX "$RESTORE_ROOT/html" "$RESTORE_ROOT/data" # Falls config.php einen anderen dbuser als das Test-Compose hat, patchen # wir die DB-Zugangsdaten in der restaurierten config.php fuer den Test.