diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index f237dd0..283e629 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -1054,7 +1054,59 @@ den Weg, über den man den Fehler zurücknehmen wollte. auf User-Entscheid 2026-08-23 vorerst unverändert**, weil Redigieren ihn nicht aus der Historie holt und Rotieren heute ~22 Shellys kostet. Nach TP17.1 sind es deutlich weniger. Anlass: das Core-Passwort ist bei einer Debug-Ausgabe im Klartext in ein Sitzungstranskript geraten. Ursache war `sshpass -p`, das es in die **Kommandozeile** - schreibt — sichtbar in `ps` und in jedem argv-Trace. ✅ **Vorbedingung erfüllt, geprüft 2026-08-23:** alle vier + schreibt — sichtbar in `ps` und in jedem argv-Trace. + --- + #### 🔑 Radius-Befund 2026-08-23: das Admin-Konto teilen sich FÜNF Konsumenten + Vor dem Rotieren erhoben — das ist deutlich mehr als „vier Geräte + eine Datei": + + | Halter | Nachziehen | + |---|---| + | `~/.secrets/credentials.env` | Datei | + | `~/.claude.json` (MikroMCP-Env, `ROUTER_*`/`CRS326_*`) | JSON + MCP-Neustart | + | **Nautobot-Stack** `NAUTOBOT_ROUTEROS_USERNAME/PASSWORD` | Stack-Datei + **Portainer-Redeploy auf der DS923** | + | **HA: VIER `mikrotik`-Integrationen** (`.99.1/.2/.11/.12`, 40 `device_tracker`) | 🔴 **`supports_reconfigure: false` — NICHT skriptbar**, 4× Re-Auth von Hand | + | Repo-Skripte (`routeros/*.py`, `nautobot/*.py`, `docs/tp*.sh`) | ziehen aus `~/.secrets` → automatisch | + + ⇒ **User-Entscheid 2026-08-23: Konten trennen statt ein Passwort teilen.** Nicht das Rotieren ist + das Problem, sondern dass ein einziges `admin` von fünf Stellen benutzt wird — jede Rotation kostet + sonst wieder vier Re-Auths und einen Stack-Redeploy. + + #### ✅ Etappe 1 DURCH (2026-08-23): dedizierte Service-Accounts auf allen vier Geräten + Rein **additiv**, kein laufender Dienst berührt. Vorher existierte **nur** `admin` (Gruppe `full`). + + | Gruppe | Policy | User | Zweck | + |---|---|---|---| + | `grp-ha` | `read,api,rest-api,test` | `ha` | HA-Mikrotik-Integration, **lesend** über API 8728 | + | `grp-nautobot` | `ssh,read,write,test,sensitive` | `nautobot` | Golden Config über SSH/Netmiko (Backup **und** Deploy) | + + Passwörter: `MIKROTIK_HA_PASS` / `MIKROTIK_NAUTOBOT_PASS` in `~/.secrets/credentials.env` + (32 Zeichen, je Dienst eigen, geräteübergreifend gleich). + 🔒 **Angelegt über ein Skript, das die Werte aus der Datei liest** — bewusst *nicht* über + `manage_user`, dessen `password`-Parameter im Sitzungstranskript landen würde. + + **Abnahme, auf allen vier Geräten geprüft:** + - `ha` liest (`identity`, `dhcp-lease` — am Core 59 Einträge, genau was das Device-Tracking braucht), + **Schreibversuch wird abgewiesen**. + - `nautobot` meldet sich per SSH an und exportiert; **kein REST** (bewusst kein `rest-api` in der Policy). + - 🎯 **Der Export von `nautobot` ist byte-identisch zu dem von `admin`** (391/56/87/87 Zeilen je Gerät) + ⇒ **die GC-Compliance driftet beim Umstellen nicht.** Das war das Hauptrisiko dieser Etappe. + - `/user` wird von **keiner** ComplianceRule abgedeckt ⇒ die neuen Konten erzeugen selbst keinen Drift. + + #### ⏭️ Etappe 2 offen — die Konsumenten umhängen, DANN `admin` rotieren + 1. **Nautobot** auf `nautobot` umstellen (Stack-Env + Portainer-Redeploy), GC-Backup-Lauf als Abnahme. + 2. **HA**: die vier `mikrotik`-Einträge auf den `ha`-User bringen. ⚠️ Reconfigure ist nicht skriptbar; + Entfernen-und-neu-Anlegen **wäre** skriptbar, riskiert aber die 40 `device_tracker`-Entity-IDs + (sie leiten sich aus der MAC ab, kämen also gleich zurück — **aber erst nachdem** die alten + Registry-Einträge weg sind, sonst hängt HA ein `_2` an; dieselbe Falle wie beim Shelly-Rename). + 3. **Erst danach** `admin` rotieren — dann berührt es nur noch `~/.secrets` + `~/.claude.json`. + + 🔴 **Eigener Fehler, protokolliert:** beim Erheben des Radius hat ein `json.dumps`-Aufruf über + `~/.claude.json` das **ap1-Passwort im Klartext ins Transkript geschrieben**. Da alle vier Geräte + dasselbe `admin`-Passwort teilen, ist es **derselbe Wert, der am 2026-08-22 bereits verbrannt ist** — + keine neue Expositionsklasse, aber ein zweiter Beleg dafür, dass die Rotation fällig ist. + **Merkregel: Secrets-Enumeration gibt nur Schlüsselnamen aus, nie Werte** — auch nicht abgeschnitten. + + ✅ **Vorbedingung erfüllt, geprüft 2026-08-23:** alle vier Skripte laufen auf `sshpass -e` (`tp6-marker/server.py`, `tp6-monitor-core.sh`, `tp25-walk-messung.sh`, `tp25-pin-s22.sh`) — die frühere Notiz, zwei davon hätten die Schwäche noch, war veraltet. Übrig blieb nur **`CLAUDE.md`, das `sshpass -p` weiterhin aktiv als Reboot-Weg