diff --git a/install/runner-install.sh b/install/runner-install.sh index de33790..a326549 100644 --- a/install/runner-install.sh +++ b/install/runner-install.sh @@ -58,7 +58,10 @@ valid_token_word "$RUNNER_LABELS" || { msg_err "RUNNER_LABELS enthält unzuläss [[ "$RUNNER_VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || { msg_err "RUNNER_VERSION ungültig"; exit 1; } [[ "$NODE_MAJOR" =~ ^[0-9]+$ ]] || { msg_err "NODE_MAJOR ungültig"; exit 1; } -run_user() { runuser -u "$APP_USER" -- env HOME="$APP_HOME" "$@"; } +# Finding 85 (Re-Review): act_runner schreibt .runner ins CWD — run_user wechselt +# deshalb hart ins RUNNER_DIR (env -C), sonst landet die Registrierung in / und +# der unprivilegierte User darf dort nicht schreiben. +run_user() { runuser -u "$APP_USER" -- env -C "$RUNNER_DIR" HOME="$APP_HOME" "$@"; } # ── Pakete: git/rsync, Node (checkout-Action), Docker (Test-Container) ──────── setup_base_apt git rsync ca-certificates curl @@ -108,6 +111,7 @@ if [[ ! -f "$RUNNER_DIR/.runner" ]]; then msg_info "Registering runner '$RUNNER_NAME' [$RUNNER_LABELS] with $GITEA_INSTANCE_URL (instance scope)..." # Werte sind oben strikt validiert (keine Quotes/Whitespace möglich) — # Übergabe als argv an runuser, keine erneute Shell-Interpolation (vgl. Finding 76). + # CWD = RUNNER_DIR via run_user (Finding 85). run_user /usr/local/bin/act_runner register \ --no-interactive \ --config /dev/null \ @@ -116,7 +120,7 @@ if [[ ! -f "$RUNNER_DIR/.runner" ]]; then --name "$RUNNER_NAME" \ --labels "$RUNNER_LABELS" \ 2>&1 | sed "s#$RUNNER_TOKEN##g" || { msg_err "Registrierung fehlgeschlagen"; exit 1; } - # act_runner schreibt .runner ins CWD des Users — sicherstellen, dass es im RUNNER_DIR liegt + # Belt-and-suspenders: falls eine künftige act_runner-Version doch ins HOME schreibt if [[ -f "$APP_HOME/.runner" && ! -f "$RUNNER_DIR/.runner" ]]; then mv "$APP_HOME/.runner" "$RUNNER_DIR/.runner" fi