host-install: install the sudo package for the non-root agent model (visudo+sudo)
A host that previously ran the agent as root+direct has no sudo package, so visudo and runtime sudo -n are missing. step_agent_install now apt-get installs sudo before the sudoers/unit, and resolves visudo by absolute path (non-login SSH PATH gap). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -538,6 +538,23 @@ step_agent_install() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# The non-root model REQUIRES the `sudo` package (provides both `sudo` and `visudo`). A host that
|
||||||
|
# previously ran the agent as root+`direct` won't have it installed. Install it idempotently before
|
||||||
|
# the sudoers (visudo validates it) and before the daemon starts (it shells out via `sudo -n`).
|
||||||
|
if ! command -v sudo >/dev/null 2>&1 || ! command -v visudo >/dev/null 2>&1; then
|
||||||
|
if $DRY_RUN; then
|
||||||
|
log_dry "apt-get install -y sudo # required for the non-root agent (provides sudo + visudo)"
|
||||||
|
else
|
||||||
|
log_info " installing the 'sudo' package (required for the non-root agent model) …"
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt-get install -y -q sudo >/dev/null 2>&1 \
|
||||||
|
|| { apt-get update -q >/dev/null 2>&1; DEBIAN_FRONTEND=noninteractive apt-get install -y -q sudo >/dev/null 2>&1; } \
|
||||||
|
|| die "failed to install the 'sudo' package (needed for the non-root agent)"
|
||||||
|
log_success " sudo installed ($(sudo --version 2>/dev/null | head -1))"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# Resolve visudo by absolute path too (non-login SSH PATH can miss /usr/sbin).
|
||||||
|
local VISUDO; VISUDO=$(command -v visudo 2>/dev/null || echo /usr/sbin/visudo)
|
||||||
|
|
||||||
# Service user (system, no login, no home dir creation needed beyond state).
|
# Service user (system, no login, no home dir creation needed beyond state).
|
||||||
if $DRY_RUN; then
|
if $DRY_RUN; then
|
||||||
log_dry "useradd --system --no-create-home --shell /usr/sbin/nologin $AGENT_USER # if absent"
|
log_dry "useradd --system --no-create-home --shell /usr/sbin/nologin $AGENT_USER # if absent"
|
||||||
@@ -560,11 +577,11 @@ step_agent_install() {
|
|||||||
else
|
else
|
||||||
local sdtmp; sdtmp=$(mktemp -t felhom-sudoers.XXXXXX)
|
local sdtmp; sdtmp=$(mktemp -t felhom-sudoers.XXXXXX)
|
||||||
fetch_raw "configs/felhom-agent.sudoers" "$sdtmp"
|
fetch_raw "configs/felhom-agent.sudoers" "$sdtmp"
|
||||||
visudo -cf "$sdtmp" >/dev/null || { rm -f "$sdtmp"; die "fetched sudoers failed visudo -cf — refusing to install"; }
|
"$VISUDO" -cf "$sdtmp" >/dev/null || { rm -f "$sdtmp"; die "fetched sudoers failed visudo -cf — refusing to install"; }
|
||||||
install -m 0440 -o root -g root "$sdtmp" "$AGENT_SUDOERS"
|
install -m 0440 -o root -g root "$sdtmp" "$AGENT_SUDOERS"
|
||||||
rm -f "$sdtmp"
|
rm -f "$sdtmp"
|
||||||
# re-validate the live drop-in in the full sudoers context
|
# re-validate the live drop-in in the full sudoers context
|
||||||
visudo -cf /etc/sudoers >/dev/null || die "sudoers invalid after installing $AGENT_SUDOERS"
|
"$VISUDO" -cf /etc/sudoers >/dev/null || die "sudoers invalid after installing $AGENT_SUDOERS"
|
||||||
log_success " installed $AGENT_SUDOERS (0440, visudo-validated)"
|
log_success " installed $AGENT_SUDOERS (0440, visudo-validated)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user