TRMM-Linux-Agent-Konzept
abstract: Kurzfassung Linux-Hosts in TRMM laufen bei CORESTREAM inzwischen über einen eigenen Linux-Agent-Fork mit vorgebauten, SHA256-verifizierten Linux-Binaries und mobile-freundlichem
curl | bash-Installer. Der frühere netvolt-/Live-Compile-Workaround entfällt. Der Pilot mitv2.11.0-cs4wurde erfolgreich getestet; Mesh +tacticalagent.servicefunktionieren.
1. Problemstellung
warning: Show-Stopper im MSP-Alltag Linux-Hosts lassen sich in TRMM nur über einen umständlichen, nicht automatisierbaren Workaround aufnehmen. Pro Maschine von Hand — nicht skalierbar.
- Ursache = TRMM Paywall: Signierte Agenten (inkl. Linux) liefert TRMM nur an zahlende Sponsoren (Tier 1, monatlich) über einen eigenen Code-Signing-Server. Agent-Generate ohne Token → HTTP 400 → kein offizieller Linux-Agent.
- Workaround = netvolt-Script: pro Maschine manuell ausgeführt (Go live installieren,
masterlive kompilieren, systemd einrichten). Sicherheitstechnisch bedenklich: ungepinntesmaster, Compile auf Kunden-Server. - Fakt (geprüft im Code): Die 400 ist eine Paywall, kein Linux-Technik-Erfordernis.
AgentUpdate(agent_unix.go) prüft keine Signatur — auf Linux ist Code-Signing irrelevant.
success: Lösung Eigenen Fork + Build-CI betreiben → vorgebaute, SHA256-verifizierte Linux-Binaries + sauberes
curl | bash-Install-Script. Kein TRMM-Token, keine Paywall, kein manueller Umweg.
2. Ausgangslage (faktisch)
- Offizieller Agent kann Linux:
agent_unix.go+install_unix.go, baut sauber (CGO_ENABLED=0 GOOS=linux ... go build -ldflags "-s -w"). - TRMM vertreibt Linux-Binary offiziell nicht → daher der netvolt-Umweg.
netvolt/LinuxRMM-Scriptmacht 3 Dinge:- Go auf dem Zielhost installieren (
go_install) - Agent aus
amidaware/rmmagentmaster live kompilieren (agent_compile) - systemd-Unit + Mesh-Installer drüberlegen
- Go auf dem Zielhost installieren (
bug: Sicherheitsproblem des Umwegs Lädt Go vom Web, clont
master(ungepinnt!) und kompiliert zur Laufzeit auf dem Kunden-Server. Exakt die „fremdes Binary/Source vertrauen"-Falle aus dem 2021/22 Miner-Vorfall — nur als Live-Source statt als Binary.
3. Zielbild
Eigener Fork mit vorgebauten, verifizierten Linux-Binaries + sauberem Installer.
- Kein Go auf dem Client, kein Live-Compile
- Source-Commit + Binary per SHA256 verifiziert
- Update-Pfad zeigt auf das eigene Repo
4. Komponenten
4.1 Fork-Strategie
- Repo: internes Git (
git.corestream.ch, OneDev) statt öffentliches GitHub-Repo - Fork/Mirror von
amidaware/rmmagentals internes Projekt, z.B.corestream/rmmagent - Branches:
main(= CORESTREAM) +upstreamals Remote/Mirror - Upstream-Commits nur geprüft mergen (Review-Diff +
go mod verify); Sicherheitsfixes priorisieren
4.2 Build-CI (erzeugt die Binaries)
- Laufzeit: interne Build-VM / internes CI statt GitHub Actions
- Matrix:
linux/amd64,linux/arm64,linux/386 - Build:
CGO_ENABLED=0 GOOS=linux GOARCH=<arch> go build -ldflags "-s -w" -o rmmagent-linux-<arch> - Artefakte:
rmmagent-linux-{arch},SHA256SUMS, optional zusätzlich mit internem Schlüssel signiert - Storage: internes Git/Release- oder Artefakt-Repo (gepinnte Tags, z.B.
v2.8.0-cs1), nicht öffentlich
4.3 Install-Script (Ersatz für netvolt)
- Öffentlicher Installer:
https://git.corestream.ch/corestream/rmmagent/~raw/main/install-linux.sh - Standard-One-Liner:
curl -fsSL https://git.corestream.ch/corestream/rmmagent/~raw/main/install-linux.sh | sudo bash -s -- -c CLIENT -s SITE -t TOKEN - Wenn
-c,-soder-tfehlen, fragt das Script interaktiv via/dev/ttynach; Token/Auth wird verdeckt gelesen. - Lädt vorgebautes Binary vom internen Fork-Repo (aktuell
v2.11.0-cs4, nichtmaster). - SHA256-Verifikation vor Install gegen
SHA256SUMS. - Installiert Mesh standardmässig direkt via MeshCentral Linux-Agent-URLs, weil
/api/v3/meshexe/Linux nicht zuverlässig liefert. - Liest nach der Mesh-Installation die lokale Mesh Node ID aus und übergibt sie an
/api/v3/newagent/. - Legt systemd-Unit
tacticalagent.servicean (Restart=always) und startet/aktiviert sie. - Kein
go_install, keinagent_compileauf dem Client.
4.4 Update-Pfad
- Linux
AgentUpdateist im Fork gehärtet: Update-Binary wird nur ersetzt, wenn die SHA256 gegen ein benachbartesSHA256SUMSpasst. - Server-/Update-URLs müssen auf das interne Artefaktlayout zeigen:
<BASE_URL>/<VERSION>/rmmagent-linux-<arch>plus<BASE_URL>/<VERSION>/SHA256SUMS.
4.5 Security (aus Miner-Review)
- Reproducible Builds, Checksum-Verifikation im Installer + Agent-Update
- Gepinnter Source-Tag (kein
master) - Build-Pipeline selbst reviewen (realistischere Angriffsfläche als Source)
go mod verifyim CI- Niemals fremde vorgefertigte Binaries an Kunden ausliefern
5. Linux-Code Gaps
Funktionen in agent_unix.go sind oft Stub/nil — Linux kann weniger als Windows:
| Funktion | Linux-Status | Bedeutung |
|---|---|---|
| GetDisks / checkin / RunScript / Terminal / Mesh | ✅ implementiert | Kern-RMM funktioniert |
| GetInstalledSoftware | {} (leer) |
Keine Software-Inventur |
| SendSoftware | {} |
kein Reporting |
| GetServiceDetail / ControlService / EditService | Windows-only | Service-Steuerung nur via Script |
| PatchMgmnt | nil |
kein Patch-Management |
| CreateSchedTask / ListSchedTasks | nil |
kein GUI-Task-Scheduling |
| GetWinUpdates / InstallUpdates | Windows | kein OS-Update-Mgmt |
| GetEventLog | Windows | kein Eventlog |
| InstallChoco | Windows | kein Chocolatey |
note: Fazit Linux-Agent taugt für Monitoring, Scripts, Terminal, Mesh — aber keine Software-Inventur, kein Patch-Mgmt, keine Service-UI. Feature-Gap, kein Bug. Entscheidung: Gaps füllen oder „Monitoring-only" akzeptieren?
6. Code-Signing-Strategie (Linux-fokussiert)
| Plattform | Signing nötig? | Maßnahme |
|---|---|---|
| Linux | ❌ nein | SHA256-Verifikation statt Signatur (reicht, da wir Build kontrollieren) |
| macOS | 🚫 vorerst NEIN (2026-07-28) | kein Apple-Dev-Account; bei Bedarf später nachrüsten |
| Windows | ❌ vorerst raus | läuft weiter via TRMM-Sponsor / unsigniert + AV-Exclusion |
info: Kernpunkt Der 400-Fehler verschwindet komplett, sobald wir die Build-CI selbst betreiben — kein TRMM-Token, keine Paywall, kein manueller netvolt-Umweg mehr.
7. Risiken
caution: Wichtig
- Fork-Pflegeverantwortung dauerhaft (Build-Kette + Security-Tracking)
- CVEs manuell verfolgen (kein upstream-Auto-Patch)
- Lizenz: Tactical RMM License v1.0 ist kein OSI-Open-Source — verbietet kommerziellen Weiterverkauf. Interne MSP-Nutzung OK; Rebrand nur intern, kein gebrandeter SaaS-Verkauf
8. Rollout (Phasen)
- Dev-VM: Fork + CI + Install-Script testen (Linux-VM bei euch)
- Pilot: 1–2 eigene CORESTREAM-Hosts
- Prod: ausgewählte Kunden-Linux-Server
8b. Scaffold-Stand 2026-08-17
success: Erster interner Scaffold gebaut Upstream
amidaware/rmmagentwurde auf Tagv2.11.0/ Commite6b61ba540af2df9d13247f96538397daa3c4f1fgepinnt, statisch geprüft und lokal als CORESTREAM-Scaffold vorbereitet.
Lokaler Arbeitsstand auf Hermes:
- Repo:
/home/csgadmin/work/trmm-linux-agent/corestream-rmmagent - Branch:
main - Commit
df2b116: Import upstreamv2.11.0 - Commit
252e601: CORESTREAM Build-/Installer-Scaffold - Commit
e54fa3f: Installer-One-Liner-Workflow verbessert (--api-url/--client-id/--site-id/--auth/--base-url, Preflight, Dry-run, klare Fehlerausgaben, One-Liner-Generator) - Interner Remote vorbereitet:
https://git.corestream.ch/corestream/rmmagent.git - Push noch offen: OneDev verlangt HTTPS-Credentials/Token
Gebaut/verifiziert:
- Dockerized Go
go1.24.13verwendet — kein Go lokal auf Hermes installiert go mod verify: erfolgreich- Linux-Builds:
amd64,arm64,386erfolgreich - Self-Update-Härtung:
AgentUpdatelädt künftig ein benachbartesSHA256SUMSund ersetzt die Binary nur bei passender SHA256 - Unit-Tests für positive und negative Checksum-Verifikation: erfolgreich
- Installer-Wrapper:
scripts/install-linux-corestream.sh— jetzt one-liner-fähig mit CLI-Flags, Preflight, klaren[OK]/[FEHLER]-Ausgaben und--dry-runfür Download/SHA256-Test ohne Installation - One-Liner-Generator:
scripts/render-linux-oneliner.sherzeugt einen sauber gequoteten kunden-/site-spezifischen Installationsbefehl - Build-Script:
scripts/build-linux.sh - Audit-Report:
docs/audit-v2.11.0.md
Artefakte lokal:
/home/csgadmin/work/trmm-linux-agent/corestream-rmmagent/dist/v2.11.0-cs2//home/csgadmin/work/trmm-linux-agent/packages/corestream-rmmagent-scaffold-v2.11.0-cs3.tar.gz/home/csgadmin/work/trmm-linux-agent/packages/corestream-rmmagent-scaffold-v2.11.0-cs2.tar.gz/home/csgadmin/work/trmm-linux-agent/packages/corestream-rmmagent-linux-artifacts-v2.11.0-cs2.tar.gz
Checksums der Linux-Binaries:
rmmagent-linux-amd64:4215c699fb5526a1b3567cf91cff6011c300a2634a87d8755e301eedbf471925rmmagent-linux-arm64:752bb9b9247c9e1e4e1e479c752a53f9ef9d759f6474f7853a9b33bbca055899rmmagent-linux-386:9ad05849fe0fdd470a46c4b52611113f81f46a613f61955236965ac1ff5176e0
Package-Checksums:
corestream-rmmagent-scaffold-v2.11.0-cs3.tar.gz:9b25c2e476f8c80b06a4bb11212e1796bc294fcaa5ed944e05fa80510d2bb3efcorestream-rmmagent-scaffold-v2.11.0-cs2.tar.gz:372fda6e73d5c50b2938ca073550b35a42568977aeec531fc2cd013d5ab8f5eccorestream-rmmagent-linux-artifacts-v2.11.0-cs2.tar.gz:2991b7560ec2492b17ba1ad8d353ea05af3070a2373b16e3fdafa4aafba8fcb1
success: Self-Update-Härtung erledigt Der Installer und der Linux-Self-Update-Pfad verifizieren jetzt SHA256. Voraussetzung: Update-URLs zeigen auf internes Artefaktlayout
<BASE_URL>/<VERSION>/rmmagent-linux-<arch>und daneben liegtSHA256SUMS.
8c. Produktiver Installer-Stand 2026-09-09
success: Pilot bestätigt Der kurze Linux-Installer wurde mit
v2.11.0-cs4auf einer Testmaschine erfolgreich ausgeführt. Agent registriert sich im RMM, Mesh wird installiert undtacticalagent.serviceläuft.
Aktueller Prozess für Techniker:
-
In Tactical RMM Client/Site und Enrollment-/Deployment-Token bestimmen.
-
Auf Linux-Zielhost folgenden Befehl ausführen:
curl -fsSL https://git.corestream.ch/corestream/rmmagent/~raw/main/install-linux.sh | sudo bash -s -- -c CLIENT -s SITE -t TOKEN -
Wenn Werte nicht direkt im Befehl stehen, fragt der Installer interaktiv nach:
Client-IDSite-IDEnrollment-Token/Authverdeckt
-
Nach Installation prüfen:
- RMM: Host erscheint unter der gewählten Client/Site.
- Systemd:
tacticalagent.serviceläuft. - Mesh: Remote-Control-Verknüpfung ist vorhanden.
Aktueller Artefaktstand v2.11.0-cs4 im OneDev-Raw-Pfad:
rmmagent-linux-386:52e81126768a95f64cfc52fcf4c4641c7d6a95b09db09e1d83804c14378d1843rmmagent-linux-amd64:480aa5d95b33a6cc6bf025c5b850cb1ae989a2e7cfea42c97d114c2559420900rmmagent-linux-arm64:eaa2d66389a83a7cd7193599310b96d5722deafd664beff3e553e720f227702f
Relevante Commits:
28ee3a2— Installer legttacticalagent.serviceselbst an.ca80646— Linux Mesh Node ID wird während Installation synchronisiert.f11af1a— Linux Mesh-Agent wird direkt von MeshCentral geladen.
Offen für nächsten Ausbau:
- Saubere Deployment-URL im RMM-Backend, z.B.
https://api.corestream.ch/clients/<uid>/deploy/linux.shoder Proxy-Aliashttps://rmm.corestream.ch/i/<uid>, damit Techniker keinen Token mehr manuell kopieren müssen.
9. Offene Entscheidungen
- CI: interne Build-VM / internes CI statt GitHub Actions
- Artefakt-Storage: internes Git/Release- oder Artefakt-Repo
- Rebrand-Umfang (Name/Logo) — Lizenzgrenze beachten
- Linux-Gaps füllen oder als „Monitoring-only" akzeptieren?
- Update-Pfad: voll eigen oder upstream-Releases spiegeln?
- macOS: vorerst NEIN (2026-07-28) — kein Apple-Dev-Account nötig
Verwandt
Knowledge Base/2026/Linux/— weitere Linux-ThemenCORESTREAM/Konzepte/— CORESTREAM-Architektur
Quelle: Obsidian Knowledge Base/TacticalRMM/TRMM-Linux-Agent-Konzept.md · Stand: 2026-09-20 · Automatisiert publiziert durch Hermes.