diff --git a/STATUS.md b/STATUS.md index c460b07..6b8215e 100644 --- a/STATUS.md +++ b/STATUS.md @@ -2,9 +2,9 @@ -## Issues (47 open, 53 closed) +## Issues (48 open, 53 closed) -Verteilung: M1 1 · M2 16 · M3 4 · M4 11 · M5 15 +Verteilung: M1 1 · M2 16 · M3 4 · M4 11 · M5 16 Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). @@ -60,7 +60,7 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). | [0100](docs/issues/0100-threadnet-web-13-asset-pfade-tragen-weiterhin-element-themes-e.md) | low | open | Asset-Pfade tragen weiterhin "element" (themes/element/…) | | [0101](docs/issues/0101-threadnet-call-4-kaputtes-paket-0-19-2-threadnet-6-in-der-regi.md) | low | open | Kaputtes Paket 0.19.2-threadnet.6 in der Registry — Herkunft ungeklärt | -### M5 (15) +### M5 (16) | Issue | Priorität | Status | Title | |---|---|---|---| @@ -76,6 +76,7 @@ Bedeutung der Meilensteine: siehe [roadmap.md](roadmap.md). | [0068](docs/issues/0068-gitops-28-lynis-security-baseline.md) | medium | open | Lynis security baseline | | [0069](docs/issues/0069-gitops-29-crowdsec-integration.md) | medium | open | CrowdSec integration | | [0070](docs/issues/0070-gitops-30-falco-runtime-monitoring.md) | medium | open | Falco runtime monitoring | +| [0107](docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md) | medium | open | Ein aktives Konto ohne Profil-Zeile fällt nur durch eine Beschwerde auf | | [0071](docs/issues/0071-gitops-31-trivy-image-scanning-for-cves.md) | low | open | Trivy image scanning for CVEs | | [0089](docs/issues/0089-gitops-58-eigene-images-sind-unsigniert-beim-deploy-pru.md) | low | open | Eigene Images sind unsigniert — beim Deploy prüft nichts die Herkunft | | [0090](docs/issues/0090-gitops-59-kein-kubernetes-audit-log-zugriffe-an-der-api.md) | low | open | Kein Kubernetes-Audit-Log — Zugriffe an der API werden nicht protokolliert | diff --git a/docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md b/docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md index d76a983..9a74e50 100644 --- a/docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md +++ b/docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md @@ -6,6 +6,7 @@ related: - "docs/wiki/stolpersteine/fremder-defekt-der-aenderung-angelastet.md" - "docs/aar/2026-08-11-apo-calls-profile-zeile.md" - "docs/issues/0088-gitops-56-networkpolicy-ausgehender-verkehr-ist-unbesch.md" + - "docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md" --- # AAR: Clarks Calls und Identitäts-Reset — vier Fehldiagnosen bis zur bekannten Ursache @@ -59,8 +60,9 @@ Ausgerechnet `clark` diente dort als *gesundes Referenzkonto*; seine Zeile ist seitdem verschwunden (deaktiviert und reaktiviert; Deaktivieren löscht das Profil, Reaktivieren legt es nicht neu an). -**Die Gegenprobe lieferte sich selbst:** Von neun aktiven Konten ohne -Profil-Zeile waren **acht deaktiviert** — `clark` war der einzige Ausreißer. +**Die Gegenprobe lieferte sich selbst:** Neun Konten hatten keine Profil-Zeile, +**acht davon waren deaktiviert** — `clark` war das einzige **aktive** darunter +und damit der einzige Ausreißer im Muster. ## Why the difference @@ -107,9 +109,9 @@ Tokens gewesen. - [x] Gedächtnis-Eintrag zum apo-Fall um dieses zweite Vorkommen ergänzt, samt der Abfrage, die beim nächsten Mal zuerst laufen soll, und der Falle im alten Diagnose-Kürzel. -- [ ] **Offen:** Es gibt keine Prüfung, die ein aktives Konto ohne Profil-Zeile - meldet. Der Fall ist jetzt zweimal aufgetreten (apo, clark), beide Male - erst nach einer Nutzermeldung. Eine Regel darauf wäre billig — gehört als - Issue vorgeschlagen, nicht hier entschieden. +- [x] Issue **#0107** angelegt (Zustimmung sorb, 2026-08-21): tägliche + Stichprobe auf aktive Konten ohne Profil-Zeile, gebaut wie die + Gruppenprüfung aus #0103 — dieselbe Bauart, derselbe Anlass, derselbe + Nutzer als Auslöser. - [ ] **Offen:** Ob weitere reaktivierte Konten betroffen sind, ist heute mit **0** beziffert; es gibt aber keinen Automatismus, der das hält. diff --git a/docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md b/docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md new file mode 100644 index 0000000..5bca590 --- /dev/null +++ b/docs/issues/0107-aktives-konto-ohne-profil-zeile-faellt-nur-durch-beschwerde-auf.md @@ -0,0 +1,106 @@ +--- +type: issue +id: "0107" +status: open +created: 2026-08-21 +milestone: M5 +priority: medium +area: security +host: matrix +projekt: gitops +related: + - "docs/aar/2026-08-21-clark-calls-reset-vier-fehldiagnosen.md" + - "docs/aar/2026-08-11-apo-calls-profile-zeile.md" + - "docs/issues/0103-wiki-zugang-ohne-gruppe-endet-stumm.md" +--- + +# Ein aktives Konto ohne Profil-Zeile fällt nur durch eine Beschwerde auf + +Fehlt einem Konto die Zeile in Synapses `profiles`-Tabelle, bricht das Setzen +des Anzeigenamens mit `TypeError` in `_check_profile_size`. Ohne Anzeigenamen +initialisiert das Element-Call-Widget nie, ohne Widget gibt es keinen +OpenID-Token und keinen SFU-Eintritt. **Anmeldung und Chat laufen weiter** — +der Nutzer kann nur nicht telefonieren und seine Identität nicht zurücksetzen. + +Nichts an diesem Zustand meldet sich. Kein Zähler, keine Logzeile, keine +Alarmregel. + +## Zweimal aufgetreten, zweimal erst nach einer Beschwerde + +| Datum | Konto | Wie es auffiel | Verzug | +|---|---|---|---| +| 2026-08-11 | `@apo` | Nutzer meldete „kein Call kommt zustande" | unbekannt | +| 2026-08-21 | `@clark` | sorb meldete hängende Calls und hängenden Reset | **4 Tage** (letzter OpenID-Token 08-17 20:26) | + +Beim zweiten Mal kostete die Suche zusätzlich **vier Fehldiagnosen**, weil das +Symptom zeitlich mit einer laufenden Egress-Änderung zusammenfiel — siehe den +AAR und `docs/wiki/stolpersteine/fremder-defekt-der-aenderung-angelastet.md`. + +**Die Ursache entsteht im Normalbetrieb:** Deaktivieren löscht die Profil-Zeile, +Reaktivieren legt sie nicht neu an. Es braucht keinen Fehler, nur einen +Verwaltungsvorgang. + +## Ist-Stand am 2026-08-21 + +Nach der Reparatur von `@clark`: **8 aktive Konten, davon 0 ohne Profil-Zeile.** +Acht weitere Konten ohne Zeile sind sämtlich deaktiviert und damit unauffällig. + +⚠️ Diese Null ist eine **Momentaufnahme von Hand**, kein gehaltener Zustand. Am +nächsten Tag kann sie eine Eins sein, und niemand erführe es. + +## Was zu tun ist + +**Eine tägliche Stichprobe auf der Datenbank — gebaut wie `wikijs-gruppenpruefung` +(#0103), nicht neu erfunden.** Dieselbe Bauart ist bereits im Einsatz und stammt +aus demselben Anlass: Auch #0103 wurde von `@apo` ausgelöst, auch dort war ein +Nutzer „angemeldet, aber unsichtbar kaputt", auch dort fiel es nur durch eine +Beschwerde auf. + +Was aus jener Vorlage übernommen gehört und **nicht** weggekürzt werden darf: + +- Die **Wartschleife** auf die Datenbank. Die NetworkPolicy eines neu erzeugten + Pods ist beim Containerstart noch nicht programmiert; ohne Schleife scheitert + der Job nachts am Wettlauf, und man gewöhnt sich an den roten Job. +- Die **Gegenprobe**: Erst prüfen, dass überhaupt Konten gelesen wurden. Sonst + sieht „0 Konten ohne Profil-Zeile" bei leerer oder falscher Datenbank genauso + aus wie ein sauberes Ergebnis — stiller Erfolg ist hier das größere Risiko als + ein Fund. +- Ausgabe nach stdout, damit sie über Alloy in Loki landet; `exit 1` bei einem + Fund, damit `BackupJobFailed` greift und die Meldung im Wartungsraum steht. + +Die Abfrage selbst ist ein Einzeiler und liefert ihre Gegenprobe mit — *jedes* +Konto ohne Profil-Zeile muss deaktiviert sein: + +```sql +SELECT u.name FROM users u +LEFT JOIN profiles p ON p.full_user_id = u.name +WHERE p.user_id IS NULL AND u.is_guest = 0 AND u.deactivated = 0; +``` + +## Abnahmekriterien + +1. Ein aktives Konto ohne Profil-Zeile führt binnen **24 h** zu einer Meldung im + Wartungsraum — ohne dass jemand sich beschwert. +2. Die Prüfung wird **rot vorgeführt**, nicht nur grün behauptet: ein Konto + testweise ohne Zeile, Meldung erscheint, Zeile wieder herstellen. +3. Eine leere oder falsche Datenbank meldet einen **Fehler**, nicht „0 Konten + betroffen". +4. Der Fund nennt den Localpart, damit die Reparatur ohne weitere Abfrage + möglich ist. + +## Nicht Teil davon + +- **Die Ursache abstellen.** Dass Reaktivieren die Zeile nicht neu anlegt, ist + Synapse-Verhalten; ein Patch dagegen wäre unverhältnismäßig. Diese Prüfung + macht den Zustand sichtbar, sie verhindert ihn nicht. +- **Andere Folgen fehlender Profil-Zeilen** als Calls und Identitäts-Reset. +- Das Homelab und `game-operating`. + +## Nebenbefund für die Behebung + +⚠️ Das dokumentierte Diagnose-Kürzel aus dem apo-Fall — `open_id_tokens = 0` — +ist **veraltet** und hat am 2026-08-21 in die Irre geführt. Es greift nur bei +Konten, die *nie* telefoniert haben; `@clark` hatte 21 Einträge, sämtlich alt. +Maßgeblich ist das **Datum des jüngsten** Tokens im Vergleich zu einem gesunden +Konto. Wer diese Prüfung baut, sollte das Kürzel im Gedächtnis-Eintrag und im +Runbook mitkorrigieren.