fix: Dienst läuft als Repo-Eigentümer (behebt 200/CHDIR bei Klon unter /root)

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 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-19 19:40:37 +02:00
co-authored by Claude Opus 4.8
parent 2dd8f9cd35
commit a998f70241
+9 -8
View File
@@ -19,7 +19,11 @@ REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
ETC_DIR="/etc/$APP_SLUG" ETC_DIR="/etc/$APP_SLUG"
ENV_FILE="$ETC_DIR/env" ENV_FILE="$ETC_DIR/env"
DATA_DIR="/var/lib/$APP_SLUG" 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" UNIT_FILE="/etc/systemd/system/$APP_SLUG.service"
ASSUME_YES=0 ASSUME_YES=0
@@ -75,13 +79,10 @@ ensure_node() {
} }
ensure_node ensure_node
# --- Dienst-Benutzer und Verzeichnisse -------------------------------------- # --- Verzeichnisse (Dienst läuft als Repo-Eigentümer, s. o.) ----------------
if ! id -u "$SERVICE_USER" >/dev/null 2>&1; then info "Dienst läuft als Benutzer '$SERVICE_USER' (Eigentümer des Repos)."
info "Lege Dienst-Benutzer '$SERVICE_USER' an …"
useradd --system --user-group --home-dir "$DATA_DIR" --shell /usr/sbin/nologin "$SERVICE_USER"
fi
mkdir -p "$DATA_DIR" "$ETC_DIR" 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 ------------------------------------------- # --- Python-venv + Abhängigkeiten -------------------------------------------
info "Richte Python-venv ein und installiere Abhängigkeiten …" info "Richte Python-venv ein und installiere Abhängigkeiten …"
@@ -156,7 +157,7 @@ Wants=network-online.target
[Service] [Service]
Type=simple Type=simple
User=$SERVICE_USER User=$SERVICE_USER
Group=$SERVICE_USER Group=$SERVICE_GROUP
WorkingDirectory=$REPO_DIR/backend WorkingDirectory=$REPO_DIR/backend
EnvironmentFile=$ENV_FILE EnvironmentFile=$ENV_FILE
ExecStart=$REPO_DIR/backend/.venv/bin/uvicorn app.main:app --host \${APP_BIND_HOST} --port \${APP_PORT} ExecStart=$REPO_DIR/backend/.venv/bin/uvicorn app.main:app --host \${APP_BIND_HOST} --port \${APP_PORT}