# Roster **English** · [Deutsch](#deutsch) A self-hosted, TacticalRMM-style **inventory & remote-management** platform for computers and servers. A single Go server (with the React web UI and all agent binaries embedded) talks to a lightweight cross-platform Go agent. Everything ships as **one binary**; the UI is fully **bilingual (English / German)**. [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) ![Go](https://img.shields.io/badge/Go-1.22+-00ADD8?logo=go) ![React](https://img.shields.io/badge/UI-React%20%2B%20TypeScript-61DAFB?logo=react) --- ## 📖 Documentation **Full documentation lives at [roster-rmm.dev](https://roster-rmm.dev/)** — getting started, all features, configuration and security. Also available in [German](https://roster-rmm.dev/de/). Release history: [CHANGELOG.md](CHANGELOG.md). ## Screenshots **Dashboard** with configurable charts ![Dashboard](docs/screenshots/dashboard.png) **Device detail** ![Device detail](docs/screenshots/device-detail.png) **Check history** — every result is kept, one click opens the chart ![Check history](docs/screenshots/check-history.png) **Remote control** in the browser ![Remote control](docs/screenshots/remote-control.png) More screenshots of every feature are in the [documentation](https://roster-rmm.dev/). --- ## Features - **Inventory** – hardware, OS, network interfaces (IP/MAC), disks, installed software, printers. Cross-platform agents for Windows / Linux / macOS / FreeBSD with **auto-update**; on OPNsense the agent registers itself as plugin `os-roster-agent` so it survives firmware upgrades. - **Checks** – disk / memory / CPU / pending-updates / script, plus native **Ping / TCP-port / HTTP-status** checks. Per-check frequency, severity, output comparison, platform targeting. - **Tasks** – scheduled scripts with frequency; last run per task + full run history. - **Live utilization + history** – on-demand CPU (per core) / RAM / disk / network graphs, plus stored CPU/RAM/disk **time series** with 24 h / 7 d / 30 d charts. - **Temperatures & fans** – all hardware sensors with the chips' own limits, a temperature history chart, fan speeds (Linux) and **temperature** / **fan** check types. - **Remote desktop** – built-in remote control (own RFB/VNC server, no third-party software) through the same tunnel: screen + mouse/keyboard on Windows and Linux (X11 and Wayland/wlroots, e.g. labwc on Raspberry Pi OS), login screen / UAC, clipboard sync, monitor selection, drag-&-drop file transfer, **live resolution switch** (+ VM guest-driver install for Proxmox/VirtIO/SPICE). Use it in the **browser**, or a bundled **native viewer** (`roster-viewer` – SDL3 via purego, **cgo-free**, cross-builds for Linux/Windows/macOS with no toolchain) with a floating AnyDesk-style toolbar (real **Ctrl+Alt+Del** via SendSAS, block local input, on-screen message, quality) and full keyboard capture on Wayland – one-click launch via `roster://` link. - **Remote terminal** – interactive shell over an on-demand WebSocket (+ pop-out window). - **Proxmox VE** – agent on a PVE host lists all VMs/containers cluster-wide (via `pvesh`, no API token), start / shut down / reboot / stop them, and shows each guest's backup state (latest backup, failed runs, not in a job) plus a **Proxmox backups** check type. - **Taskbar app** – `roster-tray`: a system-tray icon plus a compact window listing every server with its check/task result, and a **Terminal** button (opens your own terminal emulator on the remote shell), a **Viewer** button (native remote control) and an **SFTP** button (hands `sftp://` to your file manager / FileZilla / WinSCP) per row. Same cgo-free SDL3 stack as the viewer; the icon turns red when a check or task fails. `roster-tray --install [--autostart]` adds it to the application launcher / Start menu; `roster-viewer --install` registers the `roster://` handler the same way. - **File browser & transfer** – browse the agent's filesystem, download / upload (up to 4 GB, streamed with progress). - **Services & processes** – list + start/stop/restart services, kill processes. - **Storage explorer** – TreeSize-style live directory scan with a pie chart. - **Security collectors** – Antivirus/Defender status, BitLocker (with recovery-key escrow), SMART disk health, Windows Event Log / journald viewer. - **Patch management** – fleet-wide Patches page with security updates first, approve and install in bulk (apt `upgrade` vs `dist-upgrade` selectable, Ubuntu phased updates marked and optionally included), patch history per device and fleet, package versions and repositories across the fleet, OS lifecycle (EOL) warnings. - **Security monitoring** (Wazuh-style) – file integrity monitoring with a baseline per device, login monitoring (sshd/journald, Windows Security log, macOS log) that turns brute force, logins after brute force, new source IPs and account changes into **incidents**, CIS-style **compliance** checks with a score per device, and **active response**: block the source IP (nftables/iptables incl. Docker forward traffic, Windows Firewall, pf) or lock the account. **Automatic blocking** without policy rules, fleet-wide and per /24 subnet, bulk blocking in the Incidents tab, plus **log sources** for web server, SSH/SFTP, FTP and mail logs and custom patterns (files or Docker container output, e.g. `nginx-proxy`) with a **test button** and a per-device read status. Source IPs carry their **country** from an embedded IP-to-country database (no external service): flags everywhere, country filter on incidents, country tiles and dashboard charts. Private addresses are never blocked automatically; blocks are searchable and can be released fleet-wide with one click. - **Threat intelligence & deep host monitoring** (0.19) – - **Threat feeds**: Spamhaus DROP, blocklist.de, Feodo Tracker, CINS Army and Tor exit nodes are fetched daily and cached; listed source IPs are flagged everywhere and raise the incident *Known attack source* on their first event with an instant fleet-wide block. - **Windows events beyond logons**: service installed (7045), scheduled task (4698), audit log cleared (1102), suspicious process (4688) and PowerShell script block (4104) with pattern matching → incidents *Persistence*, *Audit log cleared*, *Suspicious process*. - **Registry monitoring**: `HKLM\…`, `HKU\*\…` paths in file-integrity rules, 18 persistence locations as defaults; **who-data**: user and process of a file change via auditd (Linux) or SACL + event 4663 (Windows). - **System-state monitoring**: listening ports, kernel modules, cron, UID-0/admin accounts, autostart services and scheduled tasks compared hourly → incident *System change*. - **Rootkit & malware check**: hidden processes/modules, `ld.so.preload`, executables in temp directories, known rootkit paths; files changed per FIM are scanned with ClamAV or Defender when present. - **More log sources**: HAProxy, Traefik, MySQL/MariaDB, firewall drops (kernel log or `pfirewall.log`), systemd journal, Docker events → incidents *Port scan* and *Command in container*. - **106 compliance rules** towards CIS Level 1 with framework references (CIS, PCI DSS, ISO 27001) and a framework filter; **MITRE ATT&CK** techniques on every incident with a technique filter and a per-kind severity override. - **Self-healing** – automatic remediation: run a script/service-restart when a check fails. - **Software distribution** – catalog of deployable packages (winget / choco / apt / dnf / brew); roll out to a device / client / site / tag. - **Vulnerability scan (CVE)** – match installed software against **OSV.dev**; per-device tab + fleet overview + daily background scan (best coverage for Linux packages). - **Flows (flow designer)** – connect blocks (find files, replace text, read value, edit YAML, Docker Compose, command, query API, check incl. version comparison, roll back, wait) on a canvas; the agent runs them natively with a dry-run preview and diff on one server, a test run, then rollout to companies/sites/tags. YAML edits keep comments and formatting; backups per file and automatic rollback on failure; templates e.g. *Replace image in Compose* and *Compose: raise version if older*. Share flows as JSON (`roster-flow` format with published JSON Schema). - **Container security** – packages of every running container image (apk/dpkg/rpm, read via `docker exec`) matched against OSV.dev with the right distro release, services such as sshd flagged, fleet view under *Security → Containers*; database inventory of MongoDB, MySQL/MariaDB and PostgreSQL containers with the incident *Database deviation* for new, deleted or emptied databases (database ransom pattern); Docker checks for expected databases and image age. - **Network discovery** – an agent (or the server itself) scans a CIDR (TCP / ARP / DNS), imports hosts as **assets** into a site; adopt them as **unmanaged devices**; **SNMP** printer info (model / serial / firmware / page count / toner). - **Alerting** – modular channels (email / webhook / Pushover / Telegram / ntfy), scoped to client/site/device, severity filter, **recovery notifications**, **maintenance windows**, optional software-change alerts. - **Custom fields** – TRMM-style custom fields on client/site/device, JSON collector tasks, Twig-like placeholders with filters (`{{ agent.domains | first }}`). - **Bulk actions** – run a script, update-scan/install, or install software across a whole client / site / tag — or reboot / update a hand-picked selection straight from the device list (e.g. filter by failing check "Reboot pending", tick all, reboot). - **Tags & Smart Groups** – free labels plus **rule-based** dynamic groups (e.g. `OS contains windows AND updates > 0`). - **Saved filters** – build custom device-list filters (any field, AND/OR) and save them. - **Install one-liner** – short-URL PowerShell/bash installer per platform. - **Wake-on-LAN** – wake an offline device via an online neighbor in the same site. - **Dashboard** – health summary across all devices (online/offline, failing checks/tasks, pending patches) + recent status changes. - **Global search** – hostname, IP/MAC, OS, serial, installed software, custom fields. - **Reports** – health report per client as printable HTML + scheduled email delivery. - **RBAC** – three roles: Viewer (read-only), Technician (operate devices), Admin (all). - **Audit log** – every change action + sign-ins (incl. failed attempts). - **2FA** – mandatory TOTP with backup codes; admin/CLI reset. - **Bilingual UI** – switch between English and German at any time. ## Architecture ``` Agent (Go, service) --HTTPS/TLS + bearer token--> Server (Go) <--HTTPS--> Web UI (React) Win/Linux/macOS enroll + check-in REST API embedded in binary | SQLite | PostgreSQL ``` - **Server** – a single Go binary with the React frontend and all agent binaries embedded. Runs as a Windows service or Linux systemd service. Database: **SQLite** (small deployments) or **PostgreSQL** (large), switchable via `database_url`. - **Agent** – a CGo-free Go binary running as a service (`kardianos/service`). Inventory via `gopsutil` + OS-specific extras. - **Communication** – outbound HTTPS polling (firewall-friendly, pull model): the server queues commands, the agent picks them up on check-in. An on-demand "wake" long-poll enables real-time terminal / immediate command execution. ## Quickstart ```bash # 1. Build the server (embeds the web UI + cross-compiled agents) make server # -> bin/server # 2. Run it (SQLite, HTTP for local testing – see below for production/TLS) ./bin/server run # On first start it prints a generated admin password. Log in at http://localhost:8443 ``` Enroll an agent: in the UI create an **enrollment token** (Settings → Enrollment tokens), then the "Add computer" dialog generates a ready-to-run install script for Windows / Linux / macOS. ### Build targets ```bash make web # build the React frontend into web/dist make agents-embed # cross-compile agents for all platforms into the embed dir make server # web + agents-embed + server binary make agent # agent for the current platform make cross # agents for all OS + server for Linux/Windows make test # go test ./... ``` ## Configuration Config comes from a YAML file (`--config`) or environment variables. Common ones: | Env | Meaning | |-----|---------| | `ROSTER_ADDR` | Listen address (e.g. `:8443` or `:80`) | | `ROSTER_DB` | `sqlite://./inventory.db` or `postgres://…` | | `ROSTER_BEHIND_PROXY` | `true` when behind a TLS-terminating reverse proxy | | `ROSTER_REQUIRE_2FA` | Enforce TOTP for all users (default `true`) | | `ROSTER_RESULT_RETENTION_DAYS` | History retention (default 30; `0` = keep forever) | | `ROSTER_CHECK_HISTORY_DAYS` | Check history (one sample per check-in) retention (default `10`; `0` = keep forever) | **Production:** do **not** set a fixed seed enrollment token; create tokens in the UI. Behind a reverse proxy, forward WebSocket upgrades and use generous timeouts (≥ 60 s) for the `/agent/wait` long-poll and the terminal. ### Account recovery (CLI) ```bash roster-server list-users roster-server reset-password [new-password] roster-server disable-2fa ``` ## Security 1. **TLS** for the whole server (own certificate; the agent can pin the CA) or a TLS-terminating reverse proxy. 2. **Enrollment**: an admin issues a short-lived token; the agent exchanges it for a unique, per-device agent token. Tokens are stored hashed. 3. **Pull model**: agents open only outbound connections — no inbound port on clients. 4. **2FA** (mandatory TOTP), **RBAC**, **audit log**, hashed passwords. ## License [MIT](LICENSE) © 2026 Thomas Peterson --- --- # Roster (Deutsch) [English](#roster) · **Deutsch** Eine selbst gehostete Plattform im Stil von TacticalRMM zur **Inventarisierung & Fernverwaltung** von Computern und Servern. Ein einzelner Go-Server (mit eingebetteter React-Oberfläche und allen Agent-Binaries) kommuniziert mit einem schlanken, plattformübergreifenden Go-Agent. Alles kommt als **ein Binary**; die Oberfläche ist vollständig **zweisprachig (Deutsch / Englisch)**. ## 📖 Dokumentation **Vollständige Dokumentation unter [roster-rmm.dev/de](https://roster-rmm.dev/de/)** — Einstieg, alle Funktionen, Konfiguration und Sicherheit (auch auf [Englisch](https://roster-rmm.dev/)). Versionshistorie: [CHANGELOG.de.md](CHANGELOG.de.md). ## Funktionen - **Inventar** – Hardware, OS, Netzwerkschnittstellen (IP/MAC), Datenträger, installierte Software, Drucker. Agents für Windows / Linux / macOS / FreeBSD mit **Auto-Update**; auf OPNsense registriert sich der Agent als Plugin `os-roster-agent` und übersteht so Firmware-Upgrades. - **Checks** – Disk / RAM / CPU / ausstehende Updates / Skript, dazu native **Ping / TCP-Port / HTTP-Status**-Checks. Frequenz, Schweregrad, Ausgabe-Vergleich, Plattform-Targeting je Check. - **Tasks** – geplante Skripte mit Frequenz; letzter Lauf je Task + Lauf-Historie. - **Live-Auslastung + Verlauf** – on-demand CPU (je Kern) / RAM / Disk / Netzwerk, plus gespeicherte CPU/RAM/Disk-**Zeitreihen** mit 24 h / 7 d / 30 d-Charts. - **Temperaturen & Lüfter** – alle Hardware-Sensoren mit den Grenzwerten der Chips, Temperaturverlauf, Lüfterdrehzahlen (Linux) und Check-Typen **Temperatur** / **Lüfter**. - **Fernsteuerung (Remote Desktop)** – **eingebaute** Fernsteuerung (eigener RFB/VNC- Server, keine Fremdsoftware) über denselben Tunnel: Bildschirm + Maus/Tastatur unter Windows und Linux (X11 und Wayland/wlroots, z.B. labwc auf Raspberry Pi OS), Anmeldebildschirm / UAC, Zwischenablage-Sync, Monitor-Auswahl, Datei-Drag&Drop, **Live-Auflösungswechsel** (+ VM-Gasttreiber-Installer für Proxmox/VirtIO/SPICE). Nutzbar im **Browser** oder per mitgeliefertem **nativem Viewer** (`roster-viewer` – SDL3 via purego, **cgo-frei**, cross-baut für Linux/Windows/macOS ohne Toolchain) mit schwebender AnyDesk-artiger Bedienleiste (echtes **Strg+Alt+Entf** via SendSAS, Eingaben sperren, Meldung, Qualität) und vollständiger Tastatur-Erfassung auf Wayland – Ein-Klick-Start via `roster://`-Link. - **Remote-Terminal** – interaktive Shell über On-demand-WebSocket (+ Popout-Fenster). - **Proxmox VE** – Agent auf einem PVE-Host listet alle VMs/Container clusterweit (über `pvesh`, ohne API-Token), starten / herunterfahren / neu starten / stoppen, Backup-Status je Gast (letztes Backup, fehlgeschlagene Läufe, kein Job) plus Check-Typ **Proxmox-Backups**. - **Taskleisten-App** – `roster-tray`: Symbol im System-Tray plus schlankes Fenster mit allen Servern samt Check- und Task-Ergebnis, je Zeile ein **Terminal**-Knopf (öffnet die Remote-Shell im eigenen Terminal-Emulator), ein **Viewer**-Knopf (native Fernsteuerung) und ein **SFTP**-Knopf (übergibt `sftp://` an Dateimanager/FileZilla/WinSCP). Gleiche cgo-freie SDL3-Basis wie der Viewer; das Symbol wird rot, sobald ein Check oder Task fehlschlägt. `roster-tray --install [--autostart]` trägt sie ins Anwendungsmenü bzw. Startmenü ein; `roster-viewer --install` registriert ebenso den `roster://`-Handler. - **Dateibrowser & -transfer** – Dateisystem durchsuchen, herunter-/hochladen (bis 4 GB, gestreamt mit Fortschritt). - **Dienste & Prozesse** – auflisten + Start/Stop/Neustart, Prozesse beenden. - **Speicher-Explorer** – TreeSize-artiger Live-Scan mit Tortendiagramm. - **Security-Collectors** – Virenschutz/Defender, BitLocker (mit Recovery-Key-Escrow), SMART-Festplattengesundheit, Windows-Event-Log / journald. - **Patch-Management** – flottenweite Patches-Seite mit Sicherheits-Updates zuerst, gesammelt freigeben und installieren (apt `upgrade` vs `dist-upgrade` wählbar, Ubuntu-Phased-Updates markiert und wahlweise mitinstalliert), Patch-Verlauf je Gerät und Flotte, Paketversionen und Repositories der Flotte, Support-Ende-Warnungen (EOL). - **Sicherheitsüberwachung** (Wazuh-artig) – Datei-Integritätsüberwachung mit Baseline je Gerät, Anmeldungs-Überwachung (sshd/journald, Windows-Sicherheitsprotokoll, macOS-Log), die Brute-Force, Anmeldungen nach Brute-Force, neue Quell-IPs und Kontoänderungen zu **Vorfällen** macht, CIS-artige **Compliance**-Prüfungen mit Score je Gerät und **Active Response**: Quell-IP sperren (nftables/iptables inkl. Docker-Forward-Verkehr, Windows-Firewall, pf) oder Konto sperren. **Automatische Sperre** ohne Richtlinien-Regel, flottenweit und je /24-Netz, Mehrfach-Sperren im Tab Vorfälle, dazu **Log-Quellen** für Webserver-, SSH-/SFTP-, FTP- und Mail-Protokolle und eigene Muster (Dateien oder Docker-Container-Ausgabe, z. B. `nginx-proxy`) mit **Test-Knopf** und Lesestatus je Gerät. Quell-IPs tragen ihr **Land** aus einer eingebetteten IP-zu-Land-Datenbank (kein externer Dienst): Flaggen überall, Länderfilter bei den Vorfällen, Länder-Kacheln und Dashboard-Diagramme. Private Adressen werden nie automatisch gesperrt; Sperren sind durchsuchbar und mit einem Klick flottenweit aufhebbar. - **Bedrohungsdaten & tiefe Host-Überwachung** (0.19) – - **Bedrohungsdaten**: Spamhaus DROP, blocklist.de, Feodo Tracker, CINS Army und Tor-Exit-Nodes werden täglich geladen und zwischengespeichert; gelistete Quell-IPs sind überall markiert und erzeugen beim ersten Ereignis den Vorfall *Bekannte Angriffsquelle* mit sofortiger Flottensperre. - **Windows-Ereignisse jenseits der Anmeldung**: Dienst installiert (7045), geplante Aufgabe (4698), Protokoll gelöscht (1102), verdächtiger Prozess (4688) und PowerShell-Skriptblock (4104) mit Mustererkennung → Vorfälle *Persistenz*, *Protokoll gelöscht*, *Verdächtiger Prozess*. - **Registry-Überwachung**: `HKLM\…`-, `HKU\*\…`-Pfade in FIM-Regeln, 18 Persistenz-Orte als Vorlage; **Who-Data**: Benutzer und Prozess einer Dateiänderung über auditd (Linux) bzw. SACL + Ereignis 4663 (Windows). - **Systemzustand**: lauschende Ports, Kernelmodule, Cron, UID-0-/Admin-Konten, Autostart-Dienste und geplante Aufgaben stündlich verglichen → Vorfall *Systemänderung*. - **Rootkit- & Malware-Prüfung**: versteckte Prozesse/Module, `ld.so.preload`, ausführbare Dateien in Temp-Verzeichnissen, bekannte Rootkit-Pfade; laut FIM geänderte Dateien werden mit ClamAV bzw. Defender geprüft, falls vorhanden. - **Weitere Log-Quellen**: HAProxy, Traefik, MySQL/MariaDB, Firewall-Drops (Kernel-Log oder `pfirewall.log`), systemd-Journal, Docker-Ereignisse → Vorfälle *Portscan* und *Befehl im Container*. - **106 Compliance-Regeln** in Richtung CIS Level 1 mit Framework-Referenzen (CIS, PCI DSS, ISO 27001) und Rahmenwerk-Filter; **MITRE-ATT&CK**-Techniken an jedem Vorfall mit Technik-Filter und Schweregrad je Art. - **Self-Healing** – automatische Behebung: Skript/Dienst-Neustart bei fehlerhaftem Check. - **Software-Verteilung** – Katalog verteilbarer Pakete (winget / choco / apt / dnf / brew); Ausrollen auf Gerät / Client / Standort / Tag. - **Schwachstellen-Scan (CVE)** – Abgleich installierter Software gegen **OSV.dev**; Tab je Gerät + Flotten-Übersicht + täglicher Hintergrund-Scan (beste Abdeckung: Linux). - **Abläufe (Flow-Designer)** – Bausteine (Dateien finden, Text ersetzen, Wert lesen, YAML ändern, Docker Compose, Befehl, API abfragen, Prüfen inkl. Versionsvergleich, Zurückrollen, Warten) auf einer Zeichenfläche verbinden; der Agent führt sie nativ aus – mit Vorschau samt Diff auf einem Server, Testlauf und Rollout auf Firmen/Standorte/Tags. YAML-Änderungen behalten Kommentare und Formatierung; Backup je Datei und automatisches Zurückrollen bei Fehlern; Vorlagen wie *Image in Compose ersetzen* und *Compose: Version anheben, wenn älter*. Austausch als JSON (Format `roster-flow` mit veröffentlichtem JSON-Schema). - **Container-Sicherheit** – Pakete jedes laufenden Container-Images (apk/dpkg/rpm, per `docker exec` gelesen) gegen OSV.dev mit passendem Distributions-Release, Dienste wie sshd markiert, Flottenansicht unter *Sicherheit → Container*; Datenbank-Bestand von MongoDB-, MySQL/MariaDB- und PostgreSQL-Containern mit Vorfall *Datenbank-Abweichung* bei neuen, gelöschten oder geleerten Datenbanken (Muster der Datenbank-Erpressung); Docker-Checks für erwartete Datenbanken und Image-Alter. - **Netzwerk-Discovery** – ein Agent (oder der Server selbst) scannt eine CIDR (TCP / ARP / DNS), importiert Hosts als **Assets** in eine Site; als **nicht verwaltete Geräte** übernehmbar; **SNMP**-Druckerinfos (Modell / Seriennr. / Firmware / Seitenzähler / Toner). - **Alerting** – modulare Kanäle (E-Mail / Webhook / Pushover / Telegram / ntfy), Geltungsbereich Client/Site/Gerät, Schweregrad-Filter, **Recovery-Meldungen**, **Wartungsfenster**, optional Software-Änderungs-Alarme. - **Custom Fields** – eigene Felder auf Client/Site/Gerät, JSON-Collector-Tasks, Twig-artige Platzhalter mit Filtern (`{{ agent.domains | first }}`). - **Sammelaktionen** – Skript, Update-Scan/-Installation oder Software-Installation auf ganze Clients / Standorte / Tags – oder Neustart / Updates für eine markierte Auswahl direkt aus der Geräteliste (z. B. nach Check „Neustart ausstehend“ filtern, alle markieren, neu starten). - **Tags & Smart Groups** – freie Labels plus **regelbasierte** dynamische Gruppen (z. B. `OS enthält windows UND Updates > 0`). - **Eigene Filter** – Geräteliste per Bedingungen (beliebige Felder, UND/ODER) filtern und benannt speichern. - **Install-One-Liner** – Kurz-URL-Installer (PowerShell/bash) je Plattform. - **Wake-on-LAN** – offline Geräte über einen Nachbarn im selben Standort wecken. - **Dashboard** – Health-Übersicht über alle Geräte + letzte Statuswechsel. - **Globale Suche** – Hostname, IP/MAC, OS, Seriennr., Software, Custom Fields. - **Berichte** – Health-Report je Kunde als druckbares HTML + geplanter E-Mail-Versand. - **RBAC** – Viewer (nur lesen), Techniker (bedienen), Admin (alles). - **Audit-Log** – alle ändernden Aktionen + Anmeldungen (inkl. Fehlversuche). - **2FA** – TOTP-Pflicht mit Backup-Codes; Reset per Admin/CLI. - **Zweisprachig** – jederzeit zwischen Deutsch und Englisch umschaltbar. ## Architektur ``` Agent (Go, Dienst) --HTTPS/TLS + Bearer-Token--> Server (Go) <--HTTPS--> Web-UI (React) Win/Linux/macOS Enroll + Checkin REST API im Binary eingebettet | SQLite | PostgreSQL ``` Ausgehendes HTTPS-Polling (firewall-freundlich, Pull-Modell): der Server stellt Befehle in eine Queue, der Agent holt sie beim Checkin ab. Ein On-demand-„Wake"- Long-Poll ermöglicht Echtzeit-Terminal und sofortige Befehlsausführung. ## Schnellstart ```bash make server # baut bin/server (inkl. Web-UI + Agents) ./bin/server run # SQLite, HTTP – druckt beim ersten Start das Admin-Passwort ``` Agent registrieren: in der UI ein **Enrollment-Token** anlegen (Einstellungen → Enrollment-Tokens); der Dialog „Neuer Computer" erzeugt ein fertiges Install-Skript für Windows / Linux / macOS. ## Sicherheit 1. **TLS** für den gesamten Server (eigenes Zertifikat; Agent kann die CA pinnen) oder ein TLS-terminierender Reverse-Proxy. 2. **Enrollment**: ein Admin erzeugt ein kurzlebiges Token; der Agent tauscht es gegen ein eindeutiges Agent-Token pro Gerät. Tokens werden gehasht gespeichert. 3. **Pull-Modell**: Agents öffnen nur ausgehende Verbindungen — kein offener Port am Client. 4. **2FA** (TOTP-Pflicht), **RBAC**, **Audit-Log**, gehashte Passwörter. ## Lizenz [MIT](LICENSE) © 2026 Thomas Peterson