ROAMSWITCH FÜR LINUX · OPERATIONSREFERENZ
CLI-/Headless-Betriebshandbuch
So bedienen Sie RoamSwitch für Linux ohne GUI – auf Cloud-VPS-Instanzen, über SSH, von Cron, Überwachungsskripten und programmatischen KI-Agenten (MCP).
- Client Edition (
roamswitch): Entwickelt für Laptops, mobile Workstations und Entwicklergeräte. Wechselt automatisch die nftables-Firewall-Profile basierend auf der Vertrauensstufe des verbundenen Netzwerks. Dieses Handbuch konzentriert sich hauptsächlich auf die Headless-/CLI-Verwaltung der Client Edition. - Server Edition (
roamswitch-server): Entwickelt für Cloud-VPS-Instanzen (AWS, GCP, DigitalOcean, Linode usw.) und lokale Server, die direkt mit dem Internet verbunden sind. Bietet eingehende Standard-Drop-Filterung, SSH-Sperrschutz, Critical-Path File Integrity Monitoring (FIM), eBPF/Falco-Laufzeitintegration und sofortige Benachrichtigungen (Telegram/LINE/Webhooks). Vollständige Installations- und Verwaltungsanweisungen finden Sie im RoamSwitch Server Edition-Betriebshandbuch und im Server Security Whitepaper.
1. Komponenten
| Komponente | Läuft als | Rolle |
|---|---|---|
roamswitch-daemon (Kunde) |
root (systemd Type=notify) |
Alle privilegierten Client-Vorgänge: nftables-Steuerung, Netzwerkerkennung, Ransomware-/Malware-Überwachung, Fanotify, ARP/NDP-Pinning, DNS-Durchsetzung. Öffnet keinen TCP/UDP-Listening-Socket. |
roamswitch-server-daemon (Server) |
root (systemd Type=notify) |
Alle privilegierten Aufgaben auf der Serverseite: Inbound-Default-Drop, Schutz der SSH-/Admin-IP-Ausnahmen, FIM (Manipulationserkennung für mehr als 150 kritische Dateien und Datei-Mengen in Verzeichnissen), Empfang von Falco-eBPF-Ereignissen über einen UNIX-Socket und Einfrieren von Prozessen (SIGSTOP), der Exec-Recorder, die Ereignisweiterleitung (Opt-in) und das Senden von Benachrichtigungen |
roamswitch (CLI) |
Login-Benutzer (einige Aktionen erfordern Sudo) | Thin Client liest Daemon-Status. Verwendet /run/roamswitch/roamswitch.sock IPC in der Client Edition oder stellt die Unterbefehle --server, server, fim und emergency-restore in der Server Edition bereit. |
roamswitch-mcp |
von KI-Clients hervorgebracht | Schreibgeschützter MCP-Server (stdio / JSON-RPC) für den programmgesteuerten Statusabruf durch KI-Agenten. Siehe MCP-Setup |
roamswitch-ransomware-rollback |
root (watch läuft als systemd-Unit roamswitch-ransomware-rollback-watch.service) |
Werkzeug zur Ransomware-Wiederherstellung. Erstellt Snapshots von btrfs-Subvolumes und LVM-Logical-Volumes und entnimmt nur die benötigten Dateien. Im Client-Paket enthalten; auch über den GUI-Tab „Incident Response“ nutzbar |
roamswitch-app |
Login-Benutzer | GTK-GUI (nur Client Edition). In Headless-Umgebungen nicht erforderlich. |
Eine Headless-Bereitstellung läuft auf dem Daemon + roamswitch CLI (plus roamswitch-mcp, falls gewünscht). Alle autonomen Abwehrmechanismen funktionieren ohne GUI.
roamswitch) und Server Edition (roamswitch-server) sind sich gegenseitig ausschließende Pakete (Conflicts). Stellen Sie roamswitch-server in Serverumgebungen bereit.2. Daemon (Systemd-Dienste)
Client-Edition
sudo systemctl status roamswitch.service # Status
sudo systemctl enable roamswitch.service # Autostart beim Booten (bei Installation aktiviert)
sudo systemctl restart roamswitch.service # Neustart
journalctl -u roamswitch.service -f # Logs verfolgen
journalctl -u roamswitch.service --since "1h ago"
Was der Client-Daemon beim Start und in jedem Zyklus (3 s) autonom macht:
- Identifiziert den verbundenen Gateway-MAC und wendet nftables-Profile (
open/balanced/lockdown) auftrusted_networksan. - Verhaltensbasierte Ransomware-Erkennung (Fanotify + Shannon-Entropie + Kanarienvögel)
- On-Access-Malware-Scanning (Fanotify, optional ClamAV)
- ARP-Spoof-Überwachung und präventives Gateway-ARP/NDP-Pinning in nicht vertrauenswürdigen Netzwerken
- Kernel-Härtung (sysctl / Yama / core dumps /
/tmpnoexec) pro Profil - Bedrohungsschutz-DNS-Durchsetzung (
dns_enabled+dns_scope) - Link Guard (NFQUEUE) zum Abfangen von Phishing
- Ausgabe des Laufzeitstatus an
/run/roamswitch/state.json
Server-Edition
sudo systemctl status roamswitch-server.service # Status
sudo systemctl restart roamswitch-server.service # Neustart
journalctl -u roamswitch-server.service -f # Logs verfolgen
3. CLI-Befehlsreferenz
Grundlegende Syntax: roamswitch <command> [options]. Bei der Ausführung ohne Argumente wird standardmäßig status verwendet. Die Ausgabesprache folgt automatisch dem Betriebssystemgebietsschema (LC_ALL / LC_MESSAGES / LANG).
| Befehl | Berechtigungen | Beschreibung |
|---|---|---|
status [--server] (alias report / server-status) |
Benutzer | Sicherheitsbewertung des Zustands (normalerweise 27 Punkte, mit --server die 34-Punkte-Serverbewertung), Score (0–100), Note und Empfehlungen. --json gibt denselben Bericht als maschinenlesbares JSON auf stdout aus |
server [status|config|setup|tui|test-notify|restart|ack|ebpf|bans|unban|allowlist] |
Benutzer/root | Verwaltung der Server Edition. config zeigt und ändert Einstellungen, setup ist der interaktive Assistent, tui startet die TUI mit voller Funktionsabdeckung (roamswitch-server-tui; jede Aktion als root, für gewöhnliche Benutzer schreibgeschützt), test-notify sendet eine Testbenachrichtigung und restart startet den Dienst neu (das Neuladen der Konfiguration wird nicht unterstützt). ack quittiert die aktuelle Notfall-Isolation (es hält eine FULL-Isolation strikt aufrecht und hebt eine DEGRADED-Isolation auf; siehe die Isolationsrichtlinie in §3). ebpf (Alias incidents) zeigt den aktuellen Eindämmungsstatus des eBPF-Laufzeit-Guards und den Verlauf erkannter Vorfälle. allowlist [list|add <rule> <process> [--exe <absolute-path>]|remove] verwaltet die dauerhafte Allowlist für Fehlalarme; die Bindung eines Eintrags an die Programmdatei mit --exe bedeutet, dass ein umbenannter Prozess ihn nicht nutzen kann. bans [--json] zeigt den SSH-Brute-Force-Schutz und die gesperrten Quellen (die Liste kann nur root lesen), unban <IP|IPv6-/64|--all> hebt eine Sperre auf (root) |
fim [verify|update] |
Benutzer/root | Überprüfung der Dateiintegritätsüberwachung kritischer Pfade (verify) und Aktualisierung der Baseline-Hash-Datenbank (update) |
bans [--json] |
Benutzer/root | Zeigt den Zustand des SSH-Brute-Force-Schutzes (sperrt / nur Erkennung / angehalten, samt Grund), die derzeit gesperrten Quellen mit Restzeit und die jüngsten Einträge. Die Sperrliste kann nur root lesen, daher sudo voranstellen. --json ist möglich. Entspricht server bans der Server Edition |
unban <IP | IPv6 /64 | --all> |
Wurzel | Hebt eine Sperre des SSH-Brute-Force-Schutzes auf und löscht auch die Fehlversuchszahl dieser Quelle. --all hebt alle Sperren auf. Entspricht server unban der Server Edition |
emergency-restore |
Wurzel | Heben Sie alle Notfall-eBPF-/Firewall-Isolationen auf und stellen Sie die Netzwerk-Baseline wieder her |
ports [-a|--all] |
Benutzer | Überwachungsports auf 0.0.0.0, nicht authentifizierten Datenbanken und Entwicklungsservern. -a umfasst reine Loopback-Ports |
guards |
Benutzer | Status der automatischen Verteidigungswächter (Portanomalie, ARP, USB-Speicher, Download, DNS-Bedrohung, Canary, Dev-Server-Isolator, Bluetooth) |
wifi |
Benutzer | WLAN-Verschlüsselungsstärke (Offen / WEP / WPA / kabelgebunden) und SSID |
sharing [status|on|off] |
Benutzer | Automatisches Stoppen/Wiederherstellen von SSH/Samba/RDP in nicht vertrauenswürdigen Netzwerken (on trennt aktives SSH, wenn es nicht vertrauenswürdig ist) |
audit-url <URL> |
Benutzer | Untersuchen Sie das URL-Phishing- und Bedrohungsrisiko mithilfe lokaler Feeds und Heuristiken (ruft niemals das Ziel ab) |
audit-secrets <text|path|directory> |
Benutzer | API-Schlüssel, private Schlüssel und Token in Text, einer Datei oder einem Verzeichnis erkennen (rekursiv; überspringt .git/node_modules usw.) — überträgt niemals Daten |
audit-logs [hours] |
Benutzer | Aggregiert und klassifiziert Systemjournal-/Authentifizierungsprotokolle der letzten N Stunden (Standard: 24). API-Schlüssel und Token werden automatisch maskiert. Zeigt zudem Ergebnisse der Protokollmuster-Anomalieerkennung (neue Muster und statistische Häufigkeitsspitzen). |
canary |
Benutzer | Status und Integrität der Ransomware Canary Decoy-Datei sowie erkannte Vorfallshistorie (bis zu den letzten 50) |
port-anomaly (Alias port-guard) |
Allgemein | Baseline-Status des Port-Anomaly-Guards, aktuell automatisch isolierte Ports und erkannte Vorfallshistorie (bis zu den letzten 50) |
quarantine [list] |
Benutzer | Inhalt des Malware-Quarantäne-Tresors (Beispiel, ursprünglicher Pfad, Bedrohungsname, Datum) |
knowledge [query] (alias faq) |
Benutzer | Durchsuchen Sie die Offline-Wissensdatenbank |
airgap [enable|disable] |
Benutzer/root | Löst die Notfall-Air-Gap-Isolation aus oder hebt sie auf (nur Client Edition). enable verwirft jeglichen externen Datenverkehr (bereits geöffnete Verbindungen werden ebenfalls gekappt), und disable stellt ihn wieder her. Wie die automatische Aufhebung funktioniert, steht unten unter „Isolationsrichtlinie (Air-Gap)“ |
help (--help / -h) |
Benutzer | Hilfe anzeigen (roamswitch <command> --help für Unterbefehlshilfe) |
scan-packages [ORDNER...] |
Allgemein | Gleicht installierte OS-Pakete (erkennt automatisch dpkg/pacman/dnf/zypper) mit der lokalen bekannten CVE-Zuordnung ab. Bei Angabe von Ordnerargumenten werden zusätzlich die Abhängigkeits-Lockfiles dieses Projekts (npm/PyPI/crates.io und 4 weitere Ökosysteme) geprüft. Unter Ubuntu (20.04, 22.04, 24.04, 26.04) werden die Ubuntu-eigenen Daten verwendet und nur CVEs mit CVSS 7,0 oder höher geprüft, für die Ubuntu bereits eine Korrektur veröffentlicht hat („kein Treffer“ heißt nicht, dass es keine bekannten CVEs gibt). Ubuntu-Derivate und nicht unterstützte Versionen werden als nicht abgedeckt gemeldet und nicht auf die Debian-Daten umgestellt. Es findet überhaupt keine Netzwerkaktivität statt |
scan-vulns [--confirm] |
Allgemein | Läuft nur bei active_vuln_scan_enabled: true (standardmäßig aus): ausschließlich auf 127.0.0.1 beschränkte Erreichbarkeitsprüfungen ohne Authentifizierung für Redis/Memcached/MongoDB/dockerd, CORS-Fehlkonfiguration/Path-Traversal/Open-Redirect/SSRF-Prüfungen für erkannte Dev-Server, SMTP-Open-Relay-Diagnose sowie beweisbasierte Expositionsprüfungen für Telnet/FTP/SSH. Ohne --confirm ein Trockenlauf |
vuln-status |
Allgemein | Listet für jede von scan-vulns --confirm erfasste Prüfung das zuletzt aufgezeichnete Ergebnis und die verstrichenen Tage (pass_age) auf. Das Ergebnis ist einer von drei Zuständen — verwundbar / sicher / nicht eindeutig —, und die verstrichene Zeit wird als 'heute', 'vor N Tag(en)' oder 'unbekannt' (noch nie ausgeführt) angezeigt. Wurde noch nie ein Scan ausgeführt, fordert der Befehl dazu auf, zuerst scan-vulns --confirm auszuführen, und beendet sich (es gibt noch keinen geplanten erneuten Lauf, daher spiegelt die verstrichene Zeit nur wider, wie oft der Scan tatsächlich manuell ausgeführt wurde). Dieselben Daten sind auch über die GUI (ports-Tab) und das MCP-Tool get_vulnerability_scan_history verfügbar |
notifications (alias notification-history) |
Benutzer | Der Verlauf der von RoamSwitch gesendeten Benachrichtigungen (Anomalien der Protokoll-Prüfung, ClickFix-Erkennungen und so weiter) der letzten Woche, die neueste zuerst. --json gibt ein JSON-Array aus, und --export <FILE> schreibt JSON Lines |
frozen [list|resume <PID>|resume all] |
Benutzer / root | Listet die Prozesse auf, die die Guards (Erkennung schneller Ransomware-Verschlüsselung, Manipulation von Canaries, Kernel-Exploit-Erkennung und die punktgenaue Eindämmung des eBPF-Guards) in SIGSTOP halten, und gibt einen frei (SIGCONT), der ein Fehlalarm war. Ein Einfrieren ist kein Beenden, sodass ein freigegebener Prozess genau dort weiterläuft, wo er angehalten wurde. resume all gibt alle frei. Für die Freigabe eines Prozesses, der root gehört, ist sudo erforderlich |
resource-guard (Alias leak-guard) |
Benutzer | Erkennungshistorie des Ressourcen- und Prozessanomalie-Schutzes (nur Server Edition): anhaltendes, nicht rückläufiges RSS-Wachstum (Speicherleck / DoS) oder Crash-Loops in netzexponierten Diensten, jeweils mit Konfidenzstufe |
timeline (Alias incident-timeline) |
Benutzer | Führt die Erkennungen des Link Guards (ARP-Spoofing), des Ransomware-Canary, des eBPF-Laufzeit-Guards und des Ressourcen-Guards in einer Zeitachse zusammen, mit Prozess-Abstammung und MITRE-ATT&CK-Tags (experimentell). --json gibt jeden Datensatz als JSON-Array auf stdout aus, und --export <FILE> schreibt JSON Lines (ein Datensatz pro Zeile) in eine Datei |
xdp-gate [status|enable|disable] |
Benutzer / root | Zeigt oder schaltet das XDP-Boot-Gate (experimentell). status meldet, ob roamswitch-xdp-gate.service aktiviert ist, und den aktuellen Programmzustand. Standardmäßig deaktiviert |
sensor [key|list|pair|repin|unpair|request-audit|results] |
Benutzer/root | Gegenseitiges Vertrauen über Pairing-Codes mit dem Netzwerk-Sensor „RoamSwitch Sensor“, der auf einem Allzweckrechner installiert wird (ein separates Produkt). pair --addr <IP> --code <code> --fingerprint <SHA-256> koppelt mit dem vom Sensor ausgestellten Code (es wird angenommen, dass der Sensor mit fester IP läuft; der Fingerprint ist der auf dem Sensor-Bildschirm oder mit roamswitch-sensor pairing show angezeigte Wert und pinnt das für TLS 1.3 verwendete Zertifikat – er wird nie aus dem Netzwerk abgerufen, und es gibt keinen Klartext-Fallback). repin nimmt den neuen Fingerprint auf, nachdem der Sensor sein Zertifikat neu erzeugt hat, key zeigt den Public Key und die Adresse dieses Endpunkts, unpair entfernt die Kopplung, und request-audit fordert beim Sensor ein aktives Schwachstellenaudit an (das Ergebnis rufen Sie mit results ab). Erfordert sensor_pairing_enabled: true (standardmäßig aus). Details finden Sie im Sensor-Betriebshandbuch |
port-scan (alias portscan) |
Benutzer | Zeigt den Erkennungsverlauf der Eingangsportscan-Erkennung (Quell-IP, ob automatisch blockiert und Blockierdauer). Eine andere Funktion als port-anomaly, das neu „exponierte“ unbekannte Ports erkennt |
lockfile-fim [verify|update] [--quiet|-q] |
Wurzel | Prüft (verify) oder setzt zurück (update) die Baseline der Manipulationsüberwachung für Abhängigkeits-Lockfiles. Erfordert root. Ziele sind die überwachten Projektordner (lockfile_watch_dirs bei der Server Edition) |
scan-scripts <FOLDER...> |
Benutzer | Listet statisch die von package.json-Dateien unter node_modules in den angegebenen Projektordnern deklarierten Skripte preinstall / install / postinstall / prepare auf (ein Verzeichnis, kein Urteil; keine Netzwerkaktivität) |
scan-typosquat <FOLDER...> |
Benutzer | Vergleicht Abhängigkeitsnamen in package.json anhand der Editierdistanz 1–2 mit einer mitgelieferten Liste beliebter npm-Paketnamen und markiert wahrscheinliche Typosquats (nur zur Orientierung; keine Netzwerkaktivität) |
web-scan [FOLDER...] [--quarantine] [--json] |
Benutzer/root | Prüft PHP-, JavaScript-, JSP- und ASP-Webshells, eingeschleusten Schadcode, als Bild getarntes PHP und .htaccess-Missbrauch mit den Regeln der Webanwendungsschicht (eingebaut, signierter täglicher Feed, eigene Regeln in /etc/roamswitch/rules.d). Ohne Ordner werden die Dokumentenwurzeln der Webserver-Konfiguration geprüft. Standardmäßig nur Prüfung; --quarantine (root) isoliert. Exit-Code: 0 = nichts gefunden, 2 = critical oder high gefunden, 1 = nicht ausführbar |
web-rules [status|list|validate <file.json>|locked|unlock-account <user>|example] |
Benutzer/root | Zeigt den Zustand der Regeln der Webanwendungsschicht (Version, installierte Feed-Version, Ordner für eigene Regeln, Isolierungsstufe, Kontomaßnahme, Hook nach der Erkennung) (status), listet die geladenen Regeln (list), prüft eine eigene Regeldatei (validate), zeigt durch die Kontomaßnahme gesperrte Login-Shells (locked) und stellt sie wieder her (unlock-account, root) und gibt Beispiele für Konfiguration und Hook aus (example) |
kernel-modules [--json] [--apply [MODULE...]] [--remove] |
Benutzer/root | Prüft allein durch Lesen von Dateien (ohne Kommunikation), ob sich die Kernelmodule laden lassen, die zu Wegen für Copy Fail, Dirty Frag und act_pedit wurden (algif_aead, esp4, esp6, rxrpc, act_pedit). --apply (root) schreibt nur für ungenutzte Module install … /bin/false nach modprobe.d; --remove macht das rückgängig. Fließt nicht in den Diagnose-Score ein |
audit-agent-setup [FOLDER...] [--json] |
Benutzer/root | Schreibgeschützte Prüfung (ohne Netzwerk) der Anweisungsdateien und Skills für KI-Agenten (~/.claude, ~/.codex, ~/.cursor, ~/.gemini, ~/.agents, ~/.openclaw sowie CLAUDE.md, AGENTS.md und Ähnliches in den für den Paket-CVE-Abgleich registrierten Projektordnern und jedem angegebenen FOLDER) und von OpenClaws openclaw.json. Gemeldet werden unsichtbare Unicode-Zeichen, überschriebene Anweisungen, Herunterladen-und-Ausführen, Verweise auf geheime Dateien neben einem Upload, kompilierter Code in einem Skill, ausgeschaltete OpenClaw-Authentifizierung oder ein kurzes Token und mehr; Inhalte in HTML-Kommentaren werden höher eingestuft. Dateiinhalte und Geheimnisse werden nie ausgegeben. Ein Treffer heißt „ein Mensch sollte diese Zeile lesen“, nicht „bösartig“. --json gibt JSON aus |
bluetooth-audit [--json] |
Benutzer | Prüft die BlueZ-Konfiguration (/etc/bluetooth/input.conf und main.conf) auf Einstellungen, die nicht gekoppelte Geräte als Tastatur zulassen, und listet die verbundenen Bluetooth-Tastaturen und -Mäuse auf (nur lesend) |
audit-npm-signatures <DIR> [--confirm] |
Benutzer | Prüft mit npm audit signatures die Signaturen und die Provenienz installierter Pakete (der einzige RoamSwitch-Befehl, der mit npmjs.com kommuniziert; ohne --confirm ist es ein Testlauf; die Server Edition benötigt zusätzlich npm_audit_signatures_enabled) |
install [--pm npm|pnpm] [--yes] |
Benutzer | Umhüllt npm- / pnpm-Installationen und sperrt nur die Phase der Lifecycle-Skripte in einer bwrap-Sandbox ein (der Paket-Download selbst nutzt das Netzwerk wie üblich) |
forward status|test|queue (alias event-forward) |
Benutzer/root | Zeigt den Status der Ereignisweiterleitung (status), sendet ein Testereignis (test) oder listet die Wiederholungswarteschlange (queue) für syslog RFC 5424 / CEF, JSON Lines und einen HMAC-signierten strukturierten Webhook. Opt-in, standardmäßig aus, und sendet nur an die von Ihnen konfigurierten Ziele (Server-Betriebshandbuch §16) |
events search|tree|export|verify|status (alias exec-events) |
Wurzel | Durchsucht (search: --since 2h --pid N --exe S --user U --parent P --text S --json), gibt den Prozessbaum aus (tree <pid>), exportiert (export), prüft die Hash-Kette (verify; manipulationserkennbar, nicht manipulationssicher) und zeigt den Status (status) des lokalen Protokolls des Exec-Recorders. Das Protokoll ist nur für root zugänglich, daher ist normalerweise sudo nötig (Server-Betriebshandbuch §15) |
Isolationsrichtlinie (Air-Gap)
Eine Aufhebung allein nach einem festen Timer lässt einen geduldigen Angreifer abwarten, daher wird der Auslöser einer Isolation nach Konfidenz klassifiziert (in beiden Editionen).
- Geringe Konfidenz (ein manuelles Air-Gap, generische Anomalien, eBPF Error / Warning und darunter): wird nach einem kurzen Timer vollständig wiederhergestellt (Client:
airgap_low_confidence_secs, standardmäßig 600 s; Server:safety_timer_secsinguard.yaml, standardmäßig 300 s;0deaktiviert den Timer). - Hohe Konfidenz (Manipulation von Canaries, ransomwareartiges Massen-Umschreiben, ARP-Spoofing unter Lockdown, eBPF Critical / Emergency / Alert, wiederholtes Auslösen derselben Regel und so weiter): wird nie stillschweigend wiederhergestellt. Nach dem Timer wird die Ursache (eingefrorene PID, Canary, ARP, erneut auslösende Regel) erneut geprüft, und die Isolation wird mit einer Benachrichtigung nur dann aufgehoben, wenn die Ursache verifiziert beseitigt ist. Lässt sich das nicht bestätigen, hat niemand quittiert und ist die Obergrenze erreicht (Client:
airgap_hard_cap_secs; Server:isolation_hard_cap_secsinserver.conf; beide standardmäßig 3600 s,0= keine Obergrenze), geht sie in den DEGRADED-Modus über. - Der DEGRADED-Modus öffnet sich nie per Timer (der Client erlaubt nur Loopback; der Server erlaubt nur die Verwaltungspfade der SSH-Wartung und der Whitelist-IPs). Er wird nur durch eine verifiziert erfolgreiche erneute Prüfung, eine ausdrückliche Quittierung (Server:
roamswitch server ack) oder eine manuelle Aufhebung (die GUI-Schaltfläche /roamswitch emergency-restore) aufgehoben. Im DEGRADED-Modus des Clients wird auch das rfkill des WLANs nicht aufgehoben, es sei denn,airgap_degraded_lift_rfkillisttrue. - Bestehende Verbindungen außer den Verwaltungspfaden werden gekappt (Server: alles außer den SSH-Wartungsports und den Whitelist-IPs, sodass auch ein C2-Kanal oder eine Reverse Shell, die der Angreifer bereits geöffnet hat, gekappt wird). Ein manuelles Air-Gap hat geringe Konfidenz, wenn es über das Menü / die GUI /
roamswitch airgap enableohne Warnungskontext ausgelöst wird; wird es jedoch über die Schaltfläche „Jetzt blockieren“ einer ARP-Spoofing-Warnung gestartet, erbt es die (hohe) Konfidenz dieser Warnung, und die MAC des Gateways wird ohne Aussenden von Datenverkehr erneut geprüft, bis sie bei aufeinanderfolgenden Prüfungen mit der vertrauenswürdigen MAC übereinstimmt (arp_recheck_consecutivePrüfungen über mindestensarp_recheck_min_secsSekunden). Jeder Übergang wird in der Vorfalls-Zeitachse festgehalten.
Ransomware-Wiederherstellung (Snapshots und Dateiwiederherstellung)
Die folgenden Befehle gehören zu roamswitch-ransomware-rollback (es sind keine Unterbefehle von roamswitch). Der Zustand wird in /var/lib/roamswitch gespeichert.
| Befehl | Berechtigungen | Beschreibung |
|---|---|---|
roamswitch-ransomware-rollback snapshot [--path PATH] [--label TEXT] |
root | Erstellt sofort einen Snapshot des Ziels (Standard $HOME). Ziele sind btrfs-Subvolumes und LVM-Logical-Volumes |
roamswitch-ransomware-rollback watch [--path PATH] [--periodic-interval-secs N] |
root | Dauerhaft laufend. Erstellt automatisch Snapshots bei Schüben von Dateiüberschreibungen und bei Critical-Ereignissen anderer Schutzfunktionen und legt zusätzlich planmäßig Snapshots vor dem Schaden an (standardmäßig alle 6 Stunden; 4 Generationen auf btrfs, 2 auf LVM; nach einem Erkennungs-Snapshot pausieren die periodischen standardmäßig 7 Tage) |
roamswitch-ransomware-rollback list [--path PATH] [--json] |
root | Listet die von diesem Werkzeug erstellten Snapshots auf (Art, ob noch vorhanden, empfohlener Snapshot vor dem Schaden). --json für maschinenlesbare Ausgabe |
roamswitch-ransomware-rollback restore-files <ID> <PATH> [--dest DIR] |
root | Kopiert nur die angegebene Datei oder das Verzeichnis aus einem Snapshot an einen anderen Ort, ohne den aktuellen Zustand zu überschreiben (Standard <Ziel>/RoamSwitch-Recovered/<ID>/). Erste Wahl bei der Wiederherstellung |
roamswitch-ransomware-rollback mount-for-browsing <ID> / unmount-browse <MOUNT_POINT> |
root | Macht den Inhalt eines Snapshots sichtbar, damit Sie den Pfad für restore-files wählen können (btrfs: unverändert; LVM: temporärer Nur-Lese-Mount). Danach mit unmount-browse aushängen |
roamswitch-ransomware-rollback config get|set --periodic-interval-secs N |
root | Intervall der Snapshots vor dem Schaden (Sekunden; 0 schaltet ab, sonst mindestens 300). Wirkt ohne Neustart auf ein laufendes watch. Eine Einstellung zum Abschalten der Erkennungs-Snapshots gibt es nicht |
roamswitch-ransomware-rollback restore <ID> [--yes] [--accept-tampered] |
root | Setzt das gesamte Ziel auf den Stand eines Snapshots zurück (destruktiv). Ein Erkennungs-Snapshot enthält bereits verschlüsselte Dateien und wird ohne --accept-tampered abgelehnt. Versuchen Sie zuerst restore-files |
Beispiele
sudo roamswitch status # Vollständige Client-Diagnose (27 Punkte)
sudo roamswitch status --server # Vollständige Diagnose der Server Edition (34 Punkte)
sudo roamswitch ports -a # Alle lauschenden Ports
roamswitch guards # Guard-Status
roamswitch audit-url https://examp1e-login.com
roamswitch audit-secrets ./deploy.env
roamswitch audit-secrets . # Aktuelles Verzeichnis rekursiv scannen
roamswitch audit-logs 72 # Logs der letzten 72 Stunden analysieren
sudo roamswitch sharing on # SSH/Samba/RDP in nicht vertrauenswürdigen Netzwerken automatisch stoppen
sudo roamswitch fim verify # FIM-Dateiintegritätsprüfung
sudo roamswitch fim update # FIM-Baseline aktualisieren
sudo roamswitch emergency-restore # Notabschaltung vollständig aufheben und wiederherstellen
sudo roamswitch airgap enable # Notabschaltung
sudo roamswitch airgap disable # Aufheben
sudo roamswitch server ack # Quittiert die Notfall-Isolation (hält eine FULL-Isolation strikt aufrecht, hebt eine DEGRADED-Isolation auf)
roamswitch canary # Canary-Vorfallshistorie
roamswitch vuln-status # Zeigt das letzte Scan-Ergebnis und die verstrichenen Tage (pass_age)
roamswitch port-anomaly # Vorfallshistorie des Port-Anomaly-Guards
roamswitch server ebpf # Eindämmungsstatus und Vorfallshistorie des eBPF-Guards
roamswitch server bans # Zustand des SSH-Brute-Force-Schutzes und die gesperrten Quellen
sudo roamswitch server unban 203.0.113.9 # Eine Sperre des SSH-Schutzes aufheben (benötigt root)
roamswitch notifications # Benachrichtigungsverlauf der letzten 7 Tage
roamswitch frozen # Eingefrorene Prozesse auflisten
sudo roamswitch frozen resume 12345 # Fehlalarm wieder freigeben
sudo roamswitch sensor pair --addr 192.168.1.50 --code AB3DFGH2 --fingerprint 3F:45:89:E1:...:36:10 # Paart sich per Pairing-Code mit Sensor
sudo roamswitch sensor key # Zeigt den eigenen Public Key/Adresse dieses Endpunkts
roamswitch port-scan # Portscan-Erkennungsverlauf
roamswitch timeline --json # all incident-timeline records as JSON
roamswitch notifications --export n.jsonl # JSON Lines
sudo roamswitch events search --since 2h --exe curl
sudo roamswitch forward status
sudo roamswitch server allowlist add "<rule>" mytool --exe /usr/local/bin/mytool
sudo roamswitch sensor repin <PUBLIC_KEY> --fingerprint <NEW_FINGERPRINT>
sudo roamswitch server tui
Der Server-Edition-Daemon läuft als root, daher liefern Befehle, die das nftables-Regelwerk lesen oder den Prozessbesitzer ermitteln müssen (status / status --server / ports -a), ohne sudo ungenaue Ergebnisse (eine fälschliche „inaktiv“-Bewertung oder fehlende Prozessinformationen). Befehle, die die Konfiguration ändern (sharing / fim update / airgap / emergency-restore usw.), benötigen ebenfalls sudo. Alle anderen, reinen Lesebefehle funktionieren auch ohne sudo korrekt.
--helpwird je Unterbefehl unterstützt (zum Beispielroamswitch ports --help).- Für maschinenlesbare Ausgabe nutzen Sie
status --json,--json(ein JSON-Array) und--export <FILE>(JSON Lines) beitimeline/notifications,events search --json, MCP (§6) oder/run/roamswitch/state.json(§5). - In der Client Edition gibt es keinen CLI-Befehl, der das Profil direkt umschaltet (der Daemon entscheidet autonom). Um eines zu erzwingen, setzen Sie
manual_overrideinconfig.jsonoder rufen Sie die IPC-Methodeset_security_leveldirekt auf (§5). statusliefert unabhängig vom Ergebnis den Exit-Code 0. Wenn Sie es für die Überwachung verwenden, werten Sie die Score-Zeile der Ausgabe aus (ein Beispiel steht in §7).
4. Konfigurationsdateien
Client-Edition (~/.config/roamswitch/config.json)
Der Daemon wird als Root ausgeführt und scannt /home/*/.config/roamswitch/config.json, wobei er die erste gültige Datei verwendet, die er findet (oder /root/.config/roamswitch/config.json in Nur-Root-Umgebungen).
| Schlüssel | Typ/Standard | Beschreibung |
|---|---|---|
language | Zeichenfolge / Betriebssystemgebietsschema | UI- und CLI-Sprache (ja / en / ko / zh-Hans / zh-Hant / de / fr / es / it / pt-PT) |
trusted_networks | [{name, mac, level}] | Vertrauenswürdige Netzwerke; mac ist Gateway-MAC, level ist open / balanced / lockdown |
away_protection_level | Zeichenfolge / lockdown | Standardprofil in unbekannten Netzwerken |
manual_override | string / null | Force open / balanced / lockdown (null für automatisch) |
dns_enabled | bool / true | DNS-Durchsetzung zum Schutz vor Bedrohungen |
dns_provider | Zeichenfolge / quad9 | quad9 / cloudflare / adguard / cleanBrowsing |
dns_scope | Zeichenfolge / untrusted_only | untrusted_only / always_on |
arp_spoof_guard_enabled | bool / true | ARP-Spoof-Überwachung |
gateway_arp_lock_enabled | bool / true | Präventive Gateway-ARP/NDP-Sperre für nicht vertrauenswürdige Netzwerke |
port_anomaly_guard_enabled | bool / true | Neue Abhörports automatisch blockieren |
system_wide_fanotify_enabled | bool / true | Systemweiter Fanotify-Malware-Schutz |
pre_exec_blocking_enabled | bool / true | Blockierung vor der Ausführung (FAN_DENY) |
mount_hardening_enabled | bool / true | noexec auf /tmp und /dev/shm (auf nicht offene Profile angewendet) |
yama_memory_protect_enabled | bool / true | Yama-Ptrace-Einschränkungen |
usb_storage_guard_enabled / usb_keyboard_guard_enabled | bool / false | USB-Speicher/BadUSB-Tastaturschutz (standardmäßig deaktiviert) |
usb_zero_trust_enabled | bool / false | USB-Bus autorisierter_Standard=0 |
bluetooth_guard_enabled | bool / true | Schaltet auf einem nicht vertrauenswürdigen Netz die Sichtbarkeit („erkennbar“) von Bluetooth ab (standardmäßig AN; das Funkmodul bleibt an, verbundene Geräte bleiben verbunden) |
sharing_service_control_enabled | bool / true | Automatisches Stoppen/Wiederherstellen von SSH/Samba/RDP |
scan_exclusions | [string] | Absolute Pfade, die vom Scannen ausgeschlossen sind |
link_guard | Objekt | {enabled, mode: "off"|"warn"|"block", allowlist, blocklist_extra, use_threat_dns} |
vpn_on_untrusted_enabled | bool / false | Automatischer Start des VPN-Tunnels in nicht vertrauenswürdigen Netzwerken |
vpn_backend | Zeichenfolge / wireguard | wireguard / tailscale |
active_vuln_scan_enabled | bool / false | Erlaubt die Ausführung von scan-vulns (standardmäßig aus). Erfordert explizites Opt-in, da nur auf 127.0.0.1 beschränkte Erreichbarkeitsproben gesendet werden |
pkgcve_watched_folders | [string] | Projektordner (absolute Pfade), die der Abhängigkeits-Scan der GUI prüft. Der CLI-Befehl scan-packages ignoriert diese Einstellung und verwendet nur über Kommandozeilenargumente übergebene Ordner |
sensor_pairing_enabled | bool / false | Erlaubt Pairing mit gegenseitigem Vertrauen per Pairing-Code mit RoamSwitch Sensor (standardmäßig aus). Erforderlich für die Nutzung des Befehls sensor |
port_scan_detect_enabled | bool / true | Eingangsportscan-Erkennung |
port_scan_detect_min_distinct_ports | int / 15 | Eine Quelle, die innerhalb des Erkennungsfensters mindestens so viele verschiedene Ports kontaktiert, wird als Scan gewertet |
port_scan_detect_window_secs | int / 300 | Aggregationsfenster für die Scan-Erkennung (Sekunden) |
port_scan_block_enabled | bool / true | Blockiert die erkannte Scan-Quell-IP automatisch |
port_scan_block_duration_secs | int / 600 | Dauer der automatischen Blockierung (Sekunden) |
airgap_low_confidence_secs | int / 600 | Sekunden, bis ein Air-Gap mit geringer Konfidenz automatisch wiederhergestellt wird (0 = nie automatisch). Gilt nicht für Isolationen mit hoher Konfidenz (§3, „Isolationsrichtlinie (Air-Gap)“) |
airgap_hard_cap_secs | int / 3600 | Sekunden, bevor eine Isolation mit hoher Konfidenz in den DEGRADED-Modus übergeht (0 = keine Obergrenze). Der DEGRADED-Modus öffnet sich nie per Timer |
airgap_degraded_lift_rfkill | bool / false | Ob der DEGRADED-Modus auch das WLAN-rfkill aufhebt (standardmäßig nicht) |
airgapAutoRfkill | bool / true | Ob Air-Gap auch das WLAN-Funkmodul per rfkill blockiert (wird bei der Aufhebung wiederhergestellt) |
arp_recheck_consecutive | int / 3 | Anzahl aufeinanderfolgender Prüfungen, bei denen die MAC des Gateways mit der vertrauenswürdigen MAC übereinstimmen muss, bevor eine ARP-Spoofing-Isolation als beseitigt gilt (1 oder mehr) |
arp_recheck_min_secs | int / 60 | Die Mindestanzahl an Sekunden, über die sich die aufeinanderfolgende Übereinstimmung erstrecken muss |
arp_recheck_active_probe | bool / true | Bei einer durch ARP ausgelösten Isolation: Wenn das Gateway keinen Eintrag im Nachbar-Cache hat (und die Verbindung besteht), wird eine einzelne ARP-Anfrage direkt gesendet, um die Gateway-MAC zu prüfen. Jede Antwort mit einer anderen als der vertrauten MAC gilt als Abweichung. Höchstens eine Anfrage pro 20 Sekunden |
credential_access_watch_enabled | bool / true | Benachrichtigt, wenn ein unerwarteter Prozess eine Zugangsdaten-Datei öffnet (privater Schlüssel in ~/.ssh, ~/.aws/credentials, ~/.config/gcloud, Zugangsdaten-Speicher eines Browsers); nur Benachrichtigung, standardmäßig AN. Backup-Werkzeuge und Indexer sind von Anfang an ausgenommen, weitere über credential_access_watch_allow. Änderungen gelten nach etwa 30 Sekunden. Ein sehr kurzer Lesezugriff wie bei cat oder head, bei dem sich das Programm beendet, bevor RoamSwitch seine ausführbare Datei bestimmen kann, wird möglicherweise nicht gemeldet. |
ssh_guard_* | — | Einstellungen des SSH-Brute-Force-Schutzes. Die 10 Schlüssel und ihre Standardwerte entsprechen denen der Server Edition (server.conf): ssh_guard_enabled (true), ssh_guard_block_enabled (true), ssh_guard_max_failures (6), ssh_guard_window_secs (600), ssh_guard_ban_secs (3600), ssh_guard_ban_max_secs (604800), ssh_guard_allow (leer; ein Array aus IPs / CIDRs oder eine kommagetrennte Zeichenkette), ssh_guard_log_source (auto), ssh_guard_yield_to_fail2ban (true) und ssh_guard_trust_key_days (30). Arbeitet nur, solange sshd läuft. Ein Wert außerhalb des Bereichs fällt auf den Standard zurück. Änderungen wirken nach etwa einer Minute (kein Neustart). Sperren auflisten und aufheben mit roamswitch bans und roamswitch unban |
fim_intrusion_context_enabled | bool / true | Ergänzt Benachrichtigungen über Dateimanipulation (FIM) und Lockfile-Manipulation um Konto und ausführbare Datei des schreibenden Prozesses und die SSH-Anmeldung, zu der er gehört (Quelle, Zeit, Authentifizierungsmethode); bei einer Zugangsdaten-Datei nur, wenn der Prozess zu einer SSH-Anmeldung gehört. Wirkt nach einem Neustart des Daemons. Es wird nichts nach außen gesendet |
forward_* | — | Einstellungen der Ereignisweiterleitung (syslog / JSON Lines / signierter Webhook). Opt-in, standardmäßig aus. Die Schlüssel sind forward_enabled, forward_syslog_url, forward_syslog_format, forward_syslog_framing, forward_tls_ca_file, forward_file_path, forward_file_max_mb, forward_file_keep, forward_webhook_url, forward_webhook_secret, forward_webhook_secret_file, forward_min_severity, forward_queue_max_mb und forward_queue_max_age_hours (Typen und Standardwerte stehen im Server-Betriebshandbuch §18) |
exec_recorder_* / exec_rule* | — | Einstellungen für den lokalen Exec-Recorder und die nur benachrichtigenden Korrelationsregeln EXR-001 bis EXR-007. Standardmäßig aktiviert (auf Hosts mit weniger als 1 GiB Speicher deaktiviert; eine ausdrückliche Einstellung hat Vorrang). Die Schlüssel sind exec_recorder_enabled, exec_recorder_retention_mb, exec_recorder_retention_days, exec_recorder_hash_chain, exec_recorder_hash_exe, exec_recorder_cpu_budget_pct, exec_rules_enabled, exec_rules_disabled, exec_rule_service_users, exec_rule_window_secs und exec_rules_isolation_optin (Standard false; nur bei true lösen Regeln mit hohem Schweregrad eine Isolation aus) |
sharing_service_control_enabled: true werden durch die Verbindung zu einem nicht vertrauenswürdigen Netzwerk aktive SSH-Sitzungen getrennt. Lassen Sie es auf Headless-Servern deaktiviert.Server-Edition (/etc/roamswitch/server.conf)
Die Server Edition nutzt eine Konfigurationsdatei im INI-Format, geschützt mit den Berechtigungen 0600 (nur root). Typ, zulässige Werte, Standard und Neustartbedarf jedes Schlüssels stehen im Server-Betriebshandbuch §18. Schlüssel ändern Sie mit roamswitch server config show|get|set oder im Konfigurationseditor von roamswitch server tui (alle 146 Schlüssel von server.conf und guard.yaml). Die Server Edition unterstützt kein Neuladen der Konfiguration, wenden Sie Änderungen daher mit sudo roamswitch server restart an.
Gemeinsam genutzte Rechner: Nur-Administrator-Modus
Auf einem Rechner, den mehrere Personen nutzen, schaltet sudo touch /etc/roamswitch/admin-only den Nur-Administrator-Modus ein. Änderungen, die den ganzen Rechner betreffen (Firewall, DNS, VPN, USB, Kernel- und Mount-Härtung, Funkmodule, Sensor-Vertrauen u. a.), sind dann auf root oder Benutzer der Gruppe sudo, wheel oder roamswitch beschränkt. Aktionen, die an eigene Dateien und Prozesse gebunden sind (Isolation, kill, freeze, Scans), funktionieren wie bisher. /etc/roamswitch/admin-only gilt nur, wenn die Datei root gehört und andere sie nicht beschreiben können (ein Benutzer kann den Modus also nicht selbst umschalten). Standardmäßig ist der Modus aus (keine Datei).
5. Protokolle und Laufzeitstatusdateien
| Pfad | Ziel | Beschreibung |
|---|---|---|
journalctl -u roamswitch.service | Kunde | Client-Daemon-Protokolle (Profilwechsel, Erkennungen, Fehler) |
journalctl -u roamswitch-server.service | Server | Server-Daemon-Protokolle (FIM-Ereignisse, Falco-Erkennungen, Isolierungen) |
/run/roamswitch/roamswitch.sock | Kunde | Client-Daemon-IPC-Unix-Domänen-Socket |
/run/roamswitch/events.sock | Server | Der Integrations-Socket für Falco / Tetragon eBPF (root:root, Modus 0600; Falco läuft ebenfalls als root, daher ist keine zusätzliche Berechtigungseinrichtung nötig) |
/run/roamswitch/state.json | Kunde | Zyklusstatus: {active_level, network_trusted, fanotify_ready} |
/run/roamswitch/alerts.json | Kunde | Aktuelle Benachrichtigungswarteschlange |
/run/roamswitch/approvals.json | Kunde | Ausstehende Genehmigungswarteschlange |
/run/roamswitch/fanotify.ready | Kunde | Flag-Datei, die anzeigt, dass Fanotify Guard ausgeführt wird |
/var/lib/roamswitch/fim.db | Server | FIM SHA-256 Baseline-Hash-Datenbank |
~/.local/share/roamswitch/quarantine/ | Beides | Quarantäne-Tresor (0700, Proben 0400) + .metadata.json |
/var/lib/roamswitch/exec_log/ | Beides | Die per Hash verketteten JSON Lines des Exec-Recorders (nur root, 0600). Suchen und prüfen Sie mit roamswitch events |
/run/roamswitch/airgap_isolation.json / host_isolation.json | Beides | Der Zustand der Isolation (Air-Gap) (FULL / DEGRADED) und der Auslöser-Eintrag; die Isolation überdauert einen Neustart des Daemons |
IPC direkt aufrufen (Erweitert)
Der Daemon akzeptiert durch Zeilenumbrüche getrenntes JSON auf /run/roamswitch/roamswitch.sock:
# Profil erzwungen wechseln (Client Edition)
printf '{"id":1,"method":"set_security_level","params":{"level":"lockdown"}}\n' \
| sudo socat - UNIX-CONNECT:/run/roamswitch/roamswitch.sock
# Gateway-ARP-Sperre jetzt abgleichen
printf '{"id":1,"method":"reconcile_gateway_lock","params":null}\n' \
| sudo socat - UNIX-CONNECT:/run/roamswitch/roamswitch.sock
6. Programmatischer Status (MCP)
roamswitch-mcp macht schreibgeschützte Tools über JSON-RPC auf stdio verfügbar (get_security_report / verify_security_findings / get_exposed_ports / get_guard_status / audit_url_safety / audit_secrets / audit_security_logs / audit_mcp_configs / audit_agent_setup / get_app_help / get_quarantine_status / get_file_scan_guard_status / verify_fim / get_port_anomaly_incidents / get_ebpf_incidents / get_resource_guard_incidents / get_port_scan_incidents / get_ssh_guard_incidents / get_canary_status / get_vulnerability_scan_history / get_notification_history / search_exec_events / get_process_tree / get_incident_timeline / get_fleet_status / get_vpn_status / get_link_guard_status / get_air_gap_status / get_sharing_services_status / get_bluetooth_guard_status / get_usb_guard_status / run_active_vuln_scan / run_package_cve_scan / run_package_cve_scan_languages / run_package_lifecycle_script_scan / run_typosquat_scan / run_npm_audit_signatures / get_sensor_audit_results).
Es verbindet sich nicht mit externen Hosts, sondern spricht lokal mit dem Daemon-Socket oder ruft roamswitch-core direkt auf. get_security_report und verify_security_findings senden auch nichts ins LAN (das Gateway wird nur aus dem ARP-Cache und anderen lokalen Informationen gelesen). Siehe MCP-Einrichtungshandbuch
7. Automatisierungsrezepte
Täglicher Cron-Gesundheitscheck → E-Mail senden, wenn der Score unter den Schwellenwert fällt
#!/usr/bin/env bash
# /etc/cron.daily/roamswitch-health
out=$(runuser -u "$SUDO_USER" -- roamswitch status 2>&1)
score=$(printf '%s\n' "$out" | grep -oE '[0-9]+/100' | head -1 | cut -d/ -f1)
if [ -n "$score" ] && [ "$score" -lt 80 ]; then
printf '%s\n' "$out" | mail -s "RoamSwitch health: ${score}/100" root
fi
Warteschlange für Überwachungswarnungen (Poll Alerts.json)
#!/usr/bin/env bash
last=0
while :; do
ts=$(jq -r 'max_by(.timestamp).timestamp // 0' /run/roamswitch/alerts.json 2>/dev/null || echo 0)
if [ "$ts" -gt "$last" ]; then
jq -c ".[] | select(.timestamp > $last)" /run/roamswitch/alerts.json | logger -t roamswitch-alert
last=$ts
fi
sleep 10
done
Überprüfen Sie den Zustand des Fanotify Guard (state.json).
jq -e '.fanotify_ready == true' /run/roamswitch/state.json >/dev/null \
|| echo "WARNING: fanotify guard is not running" >&2
8. Fehlerbehebung
| Symptom | Auflösung |
|---|---|
roamswitch wird mit „Überprüfen Sie, ob roamswitch-mcp installiert ist“ beendet. |
Daemon läuft nicht → sudo systemctl start roamswitch.service (oder roamswitch-server.service). Überprüfen Sie, ob der Socket vorhanden ist |
roamswitch status zeigt fanotify 🔴 „Wache blieb stehen“ |
Vorübergehende fs.fanotify.max_user_groups Erschöpfung. Starten Sie mit sudo systemctl restart roamswitch.service neu und überprüfen Sie es im Journal |
Profil bleibt in balanced und erreicht nie open |
Überprüfen Sie, ob die Gateway-MAC in trusted_networks mit level: open registriert ist. |
| SSH wird unerwartet getrennt | Die Client-Edition hat sharing_service_control_enabled: true in einem nicht vertrauenswürdigen Netzwerk. Deaktivieren über roamswitch sharing off |
| Konfigurationsänderungen werden nicht wirksam | The client daemon reads the first of /home/*/.config/…; apply with systemctl restart roamswitch.service. For the server edition, edit /etc/roamswitch/server.conf then run sudo roamswitch server restart (no reload). |
| Die Serverkommunikation wurde versehentlich blockiert | Greifen Sie auf die Cloud-Konsole (VNC/seriell) zu und führen Sie sudo roamswitch emergency-restore aus. |