From 63a735e6979d7e1202b84521ace5723eff304dad Mon Sep 17 00:00:00 2001 From: "l.kirchner" Date: Fri, 12 Jun 2026 15:26:53 +0200 Subject: [PATCH] =?UTF-8?q?fix(runner):=20Re-Review-Finding=2085=20?= =?UTF-8?q?=E2=80=94=20run=5Fuser=20wechselt=20via=20env=20-C=20ins=20RUNN?= =?UTF-8?q?ER=5FDIR=20(.runner=20landet=20sonst=20in=20/)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install/runner-install.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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