Node-Agent Self-Update — Trust-Modell (#187)
Der Node-Agent vertraut einem Self-Update über den Transport, nicht über eine
eincompilierte Signatur. theProx ist self-hosted: Backend und Agent gehören
demselben Betreiber, und der Binary-Download läuft entweder über TLS
(public Nodes, https://) oder über ein VPN (http:// mit
TRUSTED_TRANSPORT=vpn). Die frühere ed25519-Release-Signatur
(X-Binary-Sig / .sig-Dateien, eincompilierter UPDATE_PUBKEY_B64) wurde
entfernt — sie war für ein self-hosted Modell ohne öffentliche Verteilung
unnötiger Schlüssel-Ballast.
Was das Update absichert
- Transport-Authentizität. Public:
https://(Zertifikat via Reverse-Proxy, siehe Deployment-Public). VPN: das VPN selbst. Klartexthttp://zu einem Nicht-localhost-Host ohneTRUSTED_TRANSPORT=vpnlehnt der Agent ab (config::validate_server_url) — er lädt also gar nicht erst über einen ungesicherten Kanal. - Integrität via sha256. Backend
GET /node-agent-binary/{arch}(server/main.py) sendet denX-Binary-Hash-Header (sha256 über das Binary). Der Agent (Node-Agent/src/self_update.rs) berechnet den Hash über den heruntergeladenen Inhalt und vergleicht. Fehlt der Header oder weicht der Hash ab → Update verweigert, die laufende Binary bleibt aktiv. Kein Fallback. - Größencheck. Verdächtig kleine Downloads (< 200 kB) werden abgelehnt.
Release bauen (#CLAUDE.md / Agent-Build-Regel)
cd Node-Agent
# Crate-Version in Cargo.toml erhöhen (CARGO_PKG_VERSION = /agent/latest-version)
cargo build --release --target x86_64-unknown-linux-musl
cp target/x86_64-unknown-linux-musl/release/theprox-node-agent theprox-node-agent-x86_64
Nur die rebuildete Binary committen — keine .sig-Datei mehr. Pro
Architektur wiederholen (aarch64). Es gibt keinen Signing-Key und keine
Schlüsselrotation mehr.
Files
| File | Role |
|---|---|
Node-Agent/theprox-node-agent-<arch> |
prebuilt binary (committed) |
server/main.py GET /node-agent-binary/{arch} |
liefert Binary + X-Binary-Hash |
Node-Agent/src/self_update.rs |
lädt, prüft sha256, swapt, systemctl restart |
Hinweis:
scripts/sign-release.shundscripts/gen-update-key.shwurden mit #187 entfernt.