docs: Projektplan, Issues und Konventionen anlegen
Plan nach Freigabe vom 12.10.2026 mit den Antworten auf die sieben Rueckfragen. Issues fuer alle fuenf Phasen als Dateien, bis der Gitea-Zugang da ist (#030). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
# #001 Projekt-Setup
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** infrastruktur
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Lauffähiges Grundgerüst: Next.js 16, TypeScript strict, Prisma 7, pnpm, ESLint/Prettier/Vitest, Commit-Prüfung, Docker-Compose für die Entwicklungsdatenbank.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Next.js 16 (App Router), React 19, TypeScript strict
|
||||
- [ ] pnpm 12, gepinnte Versionen, `.nvmrc`
|
||||
- [ ] ESLint 9, Prettier, Vitest, commitlint + husky
|
||||
- [ ] `docker-compose.dev.yml` mit PostgreSQL
|
||||
- [ ] `.env.example` mit Präfix `SSHKV_`
|
||||
- [ ] `CLAUDE.md` mit Konventionen
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] `pnpm lint && pnpm typecheck && pnpm test && pnpm build` grün
|
||||
|
||||
## Abhängigkeiten
|
||||
–
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,25 @@
|
||||
# #002 Design-System und Layout
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** ui
|
||||
**Geschätzt:** 4 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Design laut Vorgabe (Tresor, Graphit + Messing): Tokens, Schriften, Logo, Favicon/PWA-Icons, Grundlayout mit Seitenleiste.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Design-Tokens als CSS-Variablen + Tailwind-Theme
|
||||
- [ ] Space Grotesk, IBM Plex Sans, JetBrains Mono selbst gehostet (`@fontsource`)
|
||||
- [ ] `public/brand/` mit `logo.svg`, `logo-light.svg`, `logo-mono.svg`, `favicon.svg`; PNG-Icons + Manifest per Skript
|
||||
- [ ] Seitenleiste (Logo, Navigation, Benutzer unten), einklappbar auf schmalen Bildschirmen
|
||||
- [ ] Grundkomponenten: Karte, Button (primär/sekundär/Gefahr), Badge, Statuspunkt, Tabelle, Diff-Box, Kennzahl-Kachel
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Kontrast ≥ 4,5:1, Fokusrahmen in Messing
|
||||
- [ ] Kein horizontales Scrollen bei 390 px
|
||||
- [ ] Klickflächen ≥ 44 px
|
||||
|
||||
## Abhängigkeiten
|
||||
#001
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,23 @@
|
||||
# #003 Datenmodell und Migrationen
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** datenbank
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Prisma-Schema für alle Phasen (Hosts, Gruppen, Personen, Schlüssel, Verwendungen, Host-Keys, Vorgänge, Protokoll), erste Migration, Seed.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Schema mit deutschen Bezeichnern (siehe `CLAUDE.md`)
|
||||
- [ ] Datenbankregeln (CHECK, Trigger) für das, was auch an der Service-Schicht vorbei gelten muss
|
||||
- [ ] Seed: Notfall-Admin, eingebaute Vorlagen, optional Demo-Daten
|
||||
- [ ] Test-Datenbank-Setup für Vitest
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Migration läuft auf leerer Datenbank
|
||||
- [ ] Tests für die Datenbankregeln
|
||||
|
||||
## Abhängigkeiten
|
||||
#001
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,28 @@
|
||||
# #004 Anmeldung, Rollen und erneute Bestätigung
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** sicherheit
|
||||
**Geschätzt:** 5 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Anmeldung per OIDC (authentik, in der Entwicklung Mock-Anbieter) und lokaler Notfall-Admin mit Passwort + TOTP. Rollen Admin/Operator/Leser, Re-Auth für kritische Aktionen.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Sitzungs-Cookie (`jose`), OIDC mit PKCE (`openid-client`)
|
||||
- [ ] Rollen aus authentik-Gruppen, bei jeder Anmeldung neu
|
||||
- [ ] Notfall-Admin: argon2id + TOTP (Pflicht), Einrichtung beim ersten Login
|
||||
- [ ] Re-Auth: OIDC `prompt=login`/`max_age=0` + `auth_time`, Notfall-Admin Passwort + TOTP; Gültigkeit 5 min
|
||||
- [ ] Rechtetabelle `darf()`, jede Seite/Route prüft selbst; struktureller Test
|
||||
- [ ] Rate-Limit für Anmeldung und Re-Auth
|
||||
- [ ] Mock-OIDC-Anbieter in `docker-compose.dev.yml`
|
||||
- [ ] Proxy mit CSP-Nonce und Sicherheits-Kopfzeilen
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Ohne Anmeldung keine Seite erreichbar
|
||||
- [ ] Operator sieht keine Private-Key-Funktionen
|
||||
- [ ] Re-Auth älter als 5 min wird abgelehnt
|
||||
|
||||
## Abhängigkeiten
|
||||
#003
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,23 @@
|
||||
# #005 Revisionssicheres Protokoll
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** sicherheit
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Jede Aktion landet im Protokoll; Einträge sind unveränderlich und über eine Hash-Kette verbunden.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Modell `Protokoll` mit Akteur, Aktion, Host, Zielbenutzer, Fingerprint, Diff, Ergebnis
|
||||
- [ ] DB-Trigger verbietet UPDATE/DELETE
|
||||
- [ ] Hash-Kette (SHA-256 über Vorgänger + Inhalt), Prüffunktion
|
||||
- [ ] Redaction: Private Keys/Passwörter können nicht hineingeraten
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Test: UPDATE/DELETE schlägt fehl
|
||||
- [ ] Test: manipulierte Zeile wird von der Prüfung gefunden
|
||||
|
||||
## Abhängigkeiten
|
||||
#003
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,26 @@
|
||||
# #006 Verschlüsselte Ablage und OpenSSH-Schlüsselformat
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** sicherheit
|
||||
**Geschätzt:** 4 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Envelope Encryption für Private Keys mit Master-Key aus Datei; eigene Erzeugung und Serialisierung von OpenSSH-Schlüsseln ohne temporäre Dateien; Deployment-Key der Instanz.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Master-Key aus `SSHKV_MASTER_KEY_FILE` (32 Byte), nur im Worker
|
||||
- [ ] AES-256-GCM, DEK je Schlüssel, AAD = Schlüssel-ID + Fingerprint, Master-Key-Version
|
||||
- [ ] ed25519 und RSA-4096 erzeugen (Node `crypto`), OpenSSH-Format schreiben und lesen (optional Passphrase: bcrypt-pbkdf + aes256-ctr)
|
||||
- [ ] Fingerprint SHA256 wie `ssh-keygen -l`
|
||||
- [ ] Deployment-Key beim ersten Start erzeugen
|
||||
- [ ] Log-Redaction
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] `ssh-keygen -y -f` liest erzeugte Schlüssel (mit und ohne Passphrase)
|
||||
- [ ] Fingerprints identisch zu `ssh-keygen -lf`
|
||||
- [ ] Datenbank-Dump enthält keinen Klartext-Schlüssel
|
||||
|
||||
## Abhängigkeiten
|
||||
#003
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,22 @@
|
||||
# #007 Worker und Vorgänge
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** backend
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Eigener Worker-Prozess mit pg-boss; die Oberfläche legt Vorgänge an und zeigt deren Fortschritt.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Worker-Einstieg, gebündelt per esbuild
|
||||
- [ ] pg-boss-Queues je Vorgangsart, Zeitpläne
|
||||
- [ ] Modell `Vorgang` für Status/Ergebnis in der Oberfläche
|
||||
- [ ] Docker-Compose produktiv: web, worker, db, migrate; Master-Key nur im Worker
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Vorgang wird im Web angelegt, im Worker ausgeführt, Ergebnis sichtbar
|
||||
|
||||
## Abhängigkeiten
|
||||
#003
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,22 @@
|
||||
# #008 Hosts und Hostgruppen
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Hosts und Hostgruppen anlegen, bearbeiten, archivieren; Kunden und Tags.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Liste mit Status (erreichbar, letzter Abgleich, Drift)
|
||||
- [ ] Formular: Name, Adresse, Port, Gruppen, Tags, Beschreibung, Kunde, Anmeldebenutzer (`sshkv`/`root`)
|
||||
- [ ] Hostgruppen mit Mitgliedern
|
||||
- [ ] Hostdetail-Gerüst
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Leser sieht, Operator/Admin bearbeiten
|
||||
|
||||
## Abhängigkeiten
|
||||
#004
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,23 @@
|
||||
# #009 Host-Key-Prüfung (TOFU) und Erreichbarkeit
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** sicherheit
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Beim ersten Kontakt wird der Host-Key angezeigt und bestätigt; danach strikte Prüfung, Änderung = Warnung.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Vorgang „Host-Key abrufen“ (ohne Anmeldung)
|
||||
- [ ] Bestätigen/Ablehnen mit Protokolleintrag
|
||||
- [ ] `hostVerifier` in ssh2 gegen gespeicherten Key
|
||||
- [ ] Geänderter Host-Key: Status GEAENDERT, keine Verbindung, deutliche Warnung
|
||||
- [ ] Erreichbarkeitsprüfung
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Integrationstest: geänderter Host-Key wird abgelehnt
|
||||
|
||||
## Abhängigkeiten
|
||||
#006, #007
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,24 @@
|
||||
# #010 Bootstrap neuer Hosts
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 4 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Deployment-Key auf neuen Host bringen: einmalige Passwortanmeldung (nie gespeichert) oder Copy-Paste-Befehl. Dienstbenutzer `sshkv` + sudoers.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Einmal-Passwort nur im Arbeitsspeicher des Workers, verschlüsselt im Job, danach gelöscht
|
||||
- [ ] Bootstrap-Skript: Benutzer `sshkv`, `/etc/sudoers.d/sshkv` (geprüft mit `visudo -c`), Deployment-Key in verwaltetem Block
|
||||
- [ ] Alternative: Befehl zum Kopieren
|
||||
- [ ] Prüfung nach Bootstrap: Anmeldung per Schlüssel, sudo ohne Passwort
|
||||
- [ ] sshd-Check: `PermitRootLogin`, `PasswordAuthentication` (nur Anzeige)
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Integrationstest gegen Test-Container: Bootstrap per Passwort und per Befehl
|
||||
- [ ] Passwort taucht nirgends in DB, Logs oder Protokoll auf
|
||||
|
||||
## Abhängigkeiten
|
||||
#009
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,21 @@
|
||||
# #011 Test-SSH-Container und Integrationstests
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** test
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Debian-Container mit sshd für Integrationstests (Bootstrap, Host-Key, später Ausrollen).
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Dockerfile `tests/ssh-ziel/` (Debian 13, sshd, sudo, Passwort für root/test)
|
||||
- [ ] Compose-Datei für Tests, zwei Ziele (für Host-zu-Host)
|
||||
- [ ] Vitest-Projekt `integration`
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] `pnpm test:integration` läuft lokal
|
||||
|
||||
## Abhängigkeiten
|
||||
#001
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,23 @@
|
||||
# #012 Schlüssel erzeugen, importieren, exportieren
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 4 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Schlüsselliste und -formular: erzeugen (ed25519, rsa-4096), importieren (Public oder Paar), exportieren; Kategorien, Tags, Ablaufdatum.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Liste mit Filter
|
||||
- [ ] Erzeugen-Dialog
|
||||
- [ ] Import mit Prüfung
|
||||
- [ ] Export Public Key
|
||||
- [ ] Schlüsseldetail-Gerüst mit Verwendungen
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Private Keys erscheinen nie in Listen-Antworten
|
||||
|
||||
## Abhängigkeiten
|
||||
#006
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,20 @@
|
||||
# #013 Personen und Self-Service
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Personen verwalten; jeder angemeldete Benutzer kann eigene Public Keys hinterlegen, wirksam erst nach Zuweisung.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Personenliste/-detail
|
||||
- [ ] Seite „Meine Schlüssel“
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Leser kann nur eigene Keys hinterlegen, nicht zuweisen
|
||||
|
||||
## Abhängigkeiten
|
||||
#012
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,20 @@
|
||||
# #014 Private Key anzeigen und herunterladen
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** sicherheit
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Nur Admin, nur nach Re-Auth, immer protokolliert; Entschlüsselung im Worker.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Einmal-Abholung
|
||||
- [ ] Option „Private Key nach Ausrollen löschen“
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Kein Caching, kein Logging
|
||||
|
||||
## Abhängigkeiten
|
||||
#012, #004
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,22 @@
|
||||
# #015 authorized_keys: Parser und Merge
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** backend, test
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Reine Funktionen zum Lesen und Schreiben von `authorized_keys` mit verwaltetem Block.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Optionen mit Anführungszeichen
|
||||
- [ ] CRLF, BOM, Kommentare, Duplikate
|
||||
- [ ] Block erzeugen/ersetzen, Rest bytegenau
|
||||
- [ ] Aussperrschutz Deployment-Key
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Umfangreiche Unit-Tests der Randfälle
|
||||
|
||||
## Abhängigkeiten
|
||||
#001
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,21 @@
|
||||
# #016 Public Key ausrollen mit Dry-Run und Backup
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 4 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Zuweisungen Schlüssel × Host/Gruppe × Benutzer; Dry-Run-Diff, Backup, atomares Schreiben, Rechte.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Remote-Skript
|
||||
- [ ] Optimistische Sperre über Datei-Hash
|
||||
- [ ] Diff-Box im Schlüsseldetail
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Integrationstest Ausrollen/Entfernen
|
||||
|
||||
## Abhängigkeiten
|
||||
#015, #010
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,21 @@
|
||||
# #017 Private Key ausrollen und ~/.ssh/config
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.3.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 4 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Private Key auf Zielhost/-benutzer/-pfad, verwalteter Block in `~/.ssh/config`, `known_hosts`.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Übertragung nur über stdin
|
||||
- [ ] Warnung bei Passphrase
|
||||
- [ ] nur Admin
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Integrationstest
|
||||
|
||||
## Abhängigkeiten
|
||||
#016
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,20 @@
|
||||
# #018 Zielbenutzer anlegen und sudoers
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.3.0
|
||||
**Labels:** backend, sicherheit
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Benutzer (z. B. `deploy`) anlegen, optional sudoers mit Vorschau und `visudo -c`.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Auswahl keine/bestimmte Befehle/voll
|
||||
- [ ] Entfernen beim Widerruf
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Integrationstest
|
||||
|
||||
## Abhängigkeiten
|
||||
#016
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #019 Vorlagen
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.3.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Eingebaute Vorlagen „Deployment-Zugang“, „Backup-Zugang“, „Admin-Zugang Person“; eigene in den Einstellungen.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Platzhalter `{{quellHostIp}}` usw.
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Vorlage füllt Assistent vor
|
||||
|
||||
## Abhängigkeiten
|
||||
#017, #018
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,21 @@
|
||||
# #020 Host-zu-Host-Assistent und Verbindungstest
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.3.0
|
||||
**Labels:** ui, backend
|
||||
**Geschätzt:** 4 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Geführter Ablauf: Schlüssel erzeugen, Private auf A, Public auf B, Host-Key von B in known_hosts von A, Verbindungstest.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Schrittanzeige
|
||||
- [ ] Zusammenfassung + Dry-Run
|
||||
- [ ] `ssh -o BatchMode=yes … true` auf A
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Kern-Anwendungsfall Ende-zu-Ende gegen zwei Test-Container
|
||||
|
||||
## Abhängigkeiten
|
||||
#019
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,20 @@
|
||||
# #021 Abgleich und Drift-Erkennung
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.4.0
|
||||
**Labels:** backend
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Periodischer und manueller Abgleich, Befunde je Host/Benutzer.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] Zeitplan konfigurierbar
|
||||
- [ ] Befundarten
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] Integrationstest
|
||||
|
||||
## Abhängigkeiten
|
||||
#016
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #022 Import bestehender Schlüssel
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.4.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Unbekannte Schlüssel eines Hosts übernehmen und zuordnen.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
#021
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #023 Geführte Rotation
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.4.0
|
||||
**Labels:** backend, ui
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Neuer Schlüssel an allen Verwendungen, Test, alter entfernt.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
#020
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #024 Widerruf und Massenwiderruf
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.4.0
|
||||
**Labels:** backend, ui, sicherheit
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Ein-Klick-Widerruf inkl. Benutzer/sudoers; Massenwiderruf mit Re-Auth.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
#018
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #025 Zuweisungsmatrix
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.4.0
|
||||
**Labels:** ui
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Matrix Schlüssel × Host.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
#016
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #026 Übersicht (Dashboard)
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.5.0
|
||||
**Labels:** ui
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Kennzahlen, Hosts mit Abweichung, bald ablaufend, letzte Aktionen.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
#021
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #027 Protokollansicht, CSV-Export, Syslog
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.5.0
|
||||
**Labels:** ui, backend
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Filterbare Ansicht, CSV, optionale Weiterleitung an Syslog.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
#005
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #028 Benachrichtigungen
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.5.0
|
||||
**Labels:** backend
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
E-Mail (M365 SMTP) und Webhook bei Drift und Ablauf.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
#021
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #029 Handbuch und Betriebsdokumentation
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.5.0
|
||||
**Labels:** docs
|
||||
**Geschätzt:** 3 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Installation, Bootstrap, Kern-Anwendungsfall mit Bildern; Bedrohungsanalyse, Backup-Konzept.
|
||||
|
||||
## Aufgaben
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
–
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
@@ -0,0 +1,19 @@
|
||||
# #030 Issues nach Gitea übertragen
|
||||
**Status:** offen
|
||||
**Meilenstein:** v0.1.0
|
||||
**Labels:** chore
|
||||
**Geschätzt:** 1 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
Issue-Dateien, Labels und Meilensteine in Gitea anlegen (wartet auf Zugangsdaten).
|
||||
|
||||
## Aufgaben
|
||||
- [ ] `scripts/gitea-issues.ts`
|
||||
|
||||
## Akzeptanzkriterien
|
||||
- [ ] wird zu Beginn der Phase verfeinert
|
||||
|
||||
## Abhängigkeiten
|
||||
–
|
||||
|
||||
## Notizen / Entscheidungen
|
||||
Reference in New Issue
Block a user