release r007 security hardening and redesigned UI
This commit is contained in:
@@ -5,9 +5,9 @@ Kompiliertes Bun-Binary (TypeScript), läuft als SysVinit-Service auf Unraid.
|
||||
|
||||
- **MCP-Endpunkt:** `http://<unraid-ip>:3002/mcp` (Streamable HTTP, POST-only, JSON-RPC 2.0)
|
||||
- **Health-Check:** `http://<unraid-ip>:3002/health` (offen, ohne Auth)
|
||||
- **Config-Server:** `http://127.0.0.1:3013/config` (nur localhost, für WebGUI)
|
||||
- **Config-Server:** `http://127.0.0.1:3013/config` (localhost + separater Admin-Token)
|
||||
- **Auth:** API-Key (Bearer-Token) für `/mcp`
|
||||
- **Tools:** 21 (Docker: 14, Netzwerk: 6, System: 1)
|
||||
- **Tools:** 22 (Docker: 14, Netzwerk: 6, System: 2)
|
||||
|
||||
---
|
||||
|
||||
@@ -30,14 +30,30 @@ Kompiliertes Bun-Binary (TypeScript), läuft als SysVinit-Service auf Unraid.
|
||||
│ │
|
||||
┌────────┴─────────┐ ┌────────┴─────────┐
|
||||
│ MCP-Client │ │ Unraid WebGUI │
|
||||
│ (Hermes, etc.) │ │ Settings → MUA │
|
||||
│ (Hermes, etc.) │ │ User Utilities → MUA │
|
||||
└──────────────────┘ └──────────────────┘
|
||||
```
|
||||
|
||||
**Wichtig:** Der MCP-Endpunkt (Port 3002) ist **extern** erreichbar und braucht
|
||||
einen Bearer-Token. Der Config-Server (Port 3013) läuft **nur auf localhost**
|
||||
und wird ausschließlich von der WebGUI-Page (`mua.page`) über PHP/curl
|
||||
angesprochen — er ist von außen nicht erreichbar.
|
||||
und verlangt zusätzlich einen bei jedem Start neu erzeugten Admin-Token.
|
||||
Die WebGUI schützt schreibende Formulare außerdem mit einem CSRF-Token.
|
||||
|
||||
## Sicherheitsmodell
|
||||
|
||||
- Neuinstallationen starten im Profil **Nur Lesen**. Container-Steuerung,
|
||||
aktive Netzwerktests, Container-Umbauten und die Root-Shell sind aus.
|
||||
- `none` bedeutet tatsächlich **keine Tools aktiv**; `all` ist ein expliziter
|
||||
Vollzugriff und wird in der GUI deutlich gewarnt.
|
||||
- Container-Umgebungswerte werden nie ausgegeben, nur ihre Variablennamen.
|
||||
- Häufige Secret-Formate in Logs werden zusätzlich redigiert. Logs können
|
||||
trotzdem Nutzdaten enthalten und sollten gezielt abgefragt werden.
|
||||
- Der API-Key erscheint nur unmittelbar nach seiner Erzeugung vollständig.
|
||||
- Tool-Aufrufe werden ohne Argumente oder Ausgaben in
|
||||
`/var/log/plugins/mua-audit.log` protokolliert.
|
||||
- CORS ist standardmäßig aus. Requests sind auf 1 MiB, 120 pro Minute je
|
||||
Client und vier gleichzeitig laufende Werkzeuge begrenzt. Diese Grenzen
|
||||
lassen sich per Umgebungsvariable anpassen.
|
||||
|
||||
---
|
||||
|
||||
@@ -52,10 +68,10 @@ Oder manuell:
|
||||
|
||||
```bash
|
||||
# .txz von Gitea laden
|
||||
curl -O http://192.168.1.2:4000/michael/MUA-Mikes-Unraid-Agent/raw/branch/main/dist/mua-2026.08.18.r005-x86_64-1.txz
|
||||
curl -O http://192.168.1.2:4000/michael/MUA-Mikes-Unraid-Agent/raw/branch/main/dist/mua-2026.08.21.r007-x86_64-1.txz
|
||||
|
||||
# Installieren
|
||||
./mua-2026.08.18.r005-x86_64-1.txz
|
||||
upgradepkg --install-new mua-2026.08.21.r007-x86_64-1.txz
|
||||
```
|
||||
|
||||
### 2. Service starten
|
||||
@@ -70,16 +86,16 @@ Der Service startet automatisch bei jedem Boot (SysVinit).
|
||||
|
||||
```bash
|
||||
curl http://192.168.1.2:3002/health
|
||||
# → {"status":"ok","version":"2026.08.18.r005","auth":"required"}
|
||||
# → {"status":"ok","version":"2026.08.21.r007","auth":"required"}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## API-Key generieren (WebGUI)
|
||||
|
||||
1. **Settings → MUA** in der Unraid-WebGUI öffnen
|
||||
1. **Settings → User Utilities → MUA** in der Unraid-WebGUI öffnen
|
||||
2. Unter **„API-Key (Authentifizierung)"** auf **„Neuen API-Key generieren"** klicken
|
||||
3. Den angezeigten Key kopieren (64-stellige Hex-String)
|
||||
3. Den einmalig angezeigten Key kopieren (64-stellige Hex-Zeichenfolge)
|
||||
|
||||
Der Key wird in `/boot/config/plugins/mua/mua.conf` gespeichert (chmod 600).
|
||||
|
||||
@@ -177,13 +193,20 @@ curl -X POST http://192.168.1.2:3002/mcp \
|
||||
|
||||
## Tools aktivieren/deaktivieren (WebGUI)
|
||||
|
||||
In **Settings → MUA** → **„Tools (aktivieren / deaktivieren)"**:
|
||||
In **Settings → User Utilities → MUA** stehen vier Sicherheitsprofile bereit:
|
||||
|
||||
- **Nur Lesen (empfohlen):** Status, Diagnose, Logs und Inventar
|
||||
- **Betrieb + Diagnose:** zusätzlich aktive Prüfungen und Start/Stop/Restart
|
||||
- **Alles sperren:** MCP bleibt erreichbar, bietet aber keine Werkzeuge an
|
||||
- **Vollzugriff:** einschließlich Container-Umbau und uneingeschränkter Root-Shell
|
||||
|
||||
Zusätzlich kann jedes Werkzeug einzeln nach Risikostufe freigegeben werden:
|
||||
|
||||
| Gruppe | Tools |
|
||||
|--------|-------|
|
||||
| **Docker (14)** | `unraid_docker_list`, `unraid_docker_inspect`, `unraid_docker_logs`, `unraid_docker_analyze_logs`, `unraid_docker_processes`, `unraid_docker_stats`, `unraid_docker_info`, `unraid_docker_start`, `unraid_docker_stop`, `unraid_docker_restart`, `unraid_docker_create`, `unraid_docker_modify`, `unraid_docker_update`, `unraid_docker_rebuild` |
|
||||
| **Netzwerk (6)** | `unraid_network_inventory`, `unraid_network_list`, `unraid_network_inspect`, `unraid_network_host_state`, `unraid_network_audit_tcp`, `unraid_network_lan_probe` |
|
||||
| **System (1)** | `unraid_system_connection_test` |
|
||||
| **System (2)** | `unraid_system_connection_test`, `unraid_system_shell` |
|
||||
|
||||
Deaktivierte Tools werden vom MCP-Server gefiltert — sie erscheinen nicht in
|
||||
`tools/list` und können nicht aufgerufen werden (→ `ERROR: Tool disabled`).
|
||||
@@ -220,18 +243,13 @@ Prozess startet automatisch. Zusätzlich führt der POST-INSTALL-Hook im
|
||||
|
||||
### Config-Datei-Format (`mua.conf`)
|
||||
|
||||
```json
|
||||
{
|
||||
"apiKey": "a1b2c3d4...",
|
||||
"enabledTools": [
|
||||
"unraid_docker_list",
|
||||
"unraid_docker_inspect",
|
||||
"unraid_network_list",
|
||||
"unraid_system_connection_test"
|
||||
]
|
||||
}
|
||||
```ini
|
||||
MUA_API_KEY=a1b2c3d4...
|
||||
MUA_ENABLED_TOOLS=unraid_docker_list,unraid_docker_inspect,unraid_network_list
|
||||
```
|
||||
|
||||
Sonderwerte: `all` aktiviert ausdrücklich alles, `none` deaktiviert alles.
|
||||
|
||||
---
|
||||
|
||||
## Entwicklung
|
||||
|
||||
Reference in New Issue
Block a user