74 lines
2.6 KiB
Markdown
74 lines
2.6 KiB
Markdown
# Sicherheitsmodell
|
|
|
|
## Grundsatz
|
|
|
|
Das lokale Modell erhält nur die Werkzeuge, die es für den aktuellen Modus
|
|
benötigt. Lokalität allein ersetzt keine Zugriffskontrolle.
|
|
|
|
## MCP-Profile
|
|
|
|
Empfohlene Trennung:
|
|
|
|
| Modus | Werkzeuge |
|
|
|---|---|
|
|
| Standard | Websuche, harmlose lokale Hilfsfunktionen |
|
|
| Home Assistant | HA-Administration plus Websuche |
|
|
| ARR | Sonarr/Radarr plus Websuche |
|
|
| Unraid Read-only | Diagnose, Logs, Status |
|
|
| Unraid Write | nur bewusst aktiviert, mit Vorschau und Approval Ticket |
|
|
|
|
## Nicht im Standardprofil
|
|
|
|
- allgemeine Shell
|
|
- `python3`, `ssh`, `scp` oder beliebiges `curl`
|
|
- Container erstellen, verändern oder löschen
|
|
- Registry-/Storage-Direktzugriff
|
|
- uneingeschränkte Dateisuche
|
|
|
|
## Secrets
|
|
|
|
- Keine Secrets in Git, Prompts, MCP-Schemas oder Logs.
|
|
- Konfiguration referenziert nur Namen lokaler Environment-Dateien.
|
|
- Dateien mit Secrets: Eigentümer root oder Dienstbenutzer, Modus `0600`.
|
|
- Tokens werden pro Dienst getrennt und minimal berechtigt.
|
|
- Ein Secret Broker oder Wrapper stellt Verbindungen her, ohne Tokens an das
|
|
Modell zurückzugeben.
|
|
|
|
## Netzwerk
|
|
|
|
- Port 8080 nur localhost oder administratives VLAN.
|
|
- Clients verwenden Port 8081.
|
|
- Whisper, XTTS, TinySearch und SearXNG nur localhost.
|
|
- Firewall erlaubt nur bekannte Quellnetze.
|
|
- Externe Suche erhält nur die tatsächliche Suchanfrage, keine Chat-Historie.
|
|
|
|
## Router-Grenze
|
|
|
|
- Alle fachlichen Endpunkte verlangen einen mindestens 32 Zeichen langen,
|
|
zufälligen Router-Key. Der Dienst startet ohne gültigen Key nicht.
|
|
- `/health` und `/ready` sind die einzigen anonymen Endpunkte und geben nur
|
|
groben Betriebszustand aus.
|
|
- Authentifizierungsheader werden niemals an llama.cpp weitergereicht.
|
|
- Remote-Bild-URLs sind standardmäßig gesperrt. Data-URLs werden auf MIME-Typ,
|
|
Base64-Gültigkeit und 20 MiB Maximalgröße geprüft.
|
|
- Die Zahl gleichzeitiger Requests ist begrenzt; große Uploads sind global
|
|
begrenzt und generierte Bilder werden nach Alter, Anzahl und Größe bereinigt.
|
|
- Crash-Recovery beendet keine PID nur aufgrund einer Zahl, sondern verlangt
|
|
zusätzlich einen erwarteten Prozessmarker in `/proc/<pid>/cmdline`.
|
|
|
|
## Schreibaktionen
|
|
|
|
Jede destruktive oder persistente Aktion verwendet:
|
|
|
|
1. read-only Bestandsaufnahme,
|
|
2. exakte Vorschau,
|
|
3. an diese Vorschau gebundenes Approval Ticket,
|
|
4. unveränderte Ausführung,
|
|
5. anschließende Verifikation.
|
|
|
|
## Repository-Prüfung vor jedem Push
|
|
|
|
- Suche nach Token-, Passwort- und Private-Key-Mustern.
|
|
- Keine `.env`, Zertifikate, Logs, Bilder, Audio oder Modellartefakte.
|
|
- Keine echten internen API-Schlüssel in Beispielen.
|