From a998f70241b3b7114e6571b419ee1befd3fa39a8 Mon Sep 17 00:00:00 2001 From: Guido Date: Wed, 19 Aug 2026 19:40:37 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20Dienst=20l=C3=A4uft=20als=20Repo-Eigent?= =?UTF-8?q?=C3=BCmer=20(behebt=20200/CHDIR=20bei=20Klon=20unter=20/root)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ein eigener Dienst-Benutzer kommt nicht an Code/venv unter /root (Modus 700). install.sh setzt User/Group der Unit jetzt auf den Eigentümer des Repos – bei Klon als root nach /root also root. Kein useradd mehr. Co-Authored-By: Claude Opus 4.8 --- deploy/install.sh | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/deploy/install.sh b/deploy/install.sh index cbf382e..d5a76ca 100755 --- a/deploy/install.sh +++ b/deploy/install.sh @@ -19,7 +19,11 @@ REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" ETC_DIR="/etc/$APP_SLUG" ENV_FILE="$ETC_DIR/env" DATA_DIR="/var/lib/$APP_SLUG" -SERVICE_USER="$APP_SLUG" +# Der Dienst läuft als EIGENTÜMER des Repos. Wer als root nach /root klont, für den +# läuft der Dienst als root – nur so ist /root/... für den Dienst überhaupt +# zugänglich (ein eigener Dienst-Benutzer käme sonst nicht an Code/venv unter /root). +SERVICE_USER="$(stat -c '%U' "$REPO_DIR" 2>/dev/null || echo root)" +SERVICE_GROUP="$(stat -c '%G' "$REPO_DIR" 2>/dev/null || echo root)" UNIT_FILE="/etc/systemd/system/$APP_SLUG.service" ASSUME_YES=0 @@ -75,13 +79,10 @@ ensure_node() { } ensure_node -# --- Dienst-Benutzer und Verzeichnisse -------------------------------------- -if ! id -u "$SERVICE_USER" >/dev/null 2>&1; then - info "Lege Dienst-Benutzer '$SERVICE_USER' an …" - useradd --system --user-group --home-dir "$DATA_DIR" --shell /usr/sbin/nologin "$SERVICE_USER" -fi +# --- Verzeichnisse (Dienst läuft als Repo-Eigentümer, s. o.) ---------------- +info "Dienst läuft als Benutzer '$SERVICE_USER' (Eigentümer des Repos)." mkdir -p "$DATA_DIR" "$ETC_DIR" -chown -R "$SERVICE_USER:$SERVICE_USER" "$DATA_DIR" +chown -R "$SERVICE_USER:$SERVICE_GROUP" "$DATA_DIR" # --- Python-venv + Abhängigkeiten ------------------------------------------- info "Richte Python-venv ein und installiere Abhängigkeiten …" @@ -156,7 +157,7 @@ Wants=network-online.target [Service] Type=simple User=$SERVICE_USER -Group=$SERVICE_USER +Group=$SERVICE_GROUP WorkingDirectory=$REPO_DIR/backend EnvironmentFile=$ENV_FILE ExecStart=$REPO_DIR/backend/.venv/bin/uvicorn app.main:app --host \${APP_BIND_HOST} --port \${APP_PORT}