Passwort-Rotation Etappe 1: dedizierte Service-Accounts statt geteiltem admin
Vor dem Rotieren den Radius erhoben -- und der ist groesser als geplant: das Admin-Konto teilen sich fuenf Konsumenten. Neben ~/.secrets und der MikroMCP-Registry haengen der Nautobot-Stack (Portainer-Redeploy noetig) und VIER HA-mikrotik-Integrationen mit 40 device_tracker daran. Die HA- Eintraege melden supports_reconfigure=false, sind also nicht skriptbar. Christophs Entscheid daraufhin: Konten trennen statt ein Passwort teilen. Nicht das Rotieren ist das Problem, sondern dass ein einziges admin von fuenf Stellen benutzt wird -- sonst kostet jede Rotation wieder vier Re-Auths und einen Stack-Redeploy. Etappe 1 ist durch, rein additiv, kein laufender Dienst beruehrt. Vorher existierte auf allen vier Geraeten nur admin in der Gruppe full. Jetzt: grp-ha read,api,rest-api,test -> user ha grp-nautobot ssh,read,write,test,sensitive -> user nautobot Passwoerter als MIKROTIK_HA_PASS / MIKROTIK_NAUTOBOT_PASS in ~/.secrets. Angelegt ueber ein Skript, das die Werte aus der Datei liest -- bewusst nicht ueber manage_user, dessen password-Parameter im Transkript landet. Abnahme auf allen vier Geraeten: ha liest (am Core 59 DHCP-Leases) und wird beim Schreiben abgewiesen; nautobot kommt per SSH rein und exportiert. Der Export von nautobot ist byte-identisch zu dem von admin (391/56/87/87 Zeilen) -- die GC-Compliance driftet beim Umstellen also nicht, was das Hauptrisiko dieser Etappe war. /user wird von keiner ComplianceRule abgedeckt, die Konten erzeugen selbst keinen Drift. Offen: Konsumenten umhaengen (Nautobot-Stack, 4x HA), dann erst admin rotieren -- danach beruehrt eine Rotation nur noch zwei Dateien. Eigener Fehler protokolliert: eine Enumeration hat das ap1-Passwort im Klartext ins Transkript geschrieben. Selber Wert wie der am 22.08. verbrannte, also keine neue Expositionsklasse -- aber Merkregel ergaenzt, dass Secrets-Enumeration nur Schluesselnamen ausgibt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user