From 2ccfd7f6d6fb35902adcccf4411946fa7a4a7ec6 Mon Sep 17 00:00:00 2001 From: dschlueter Date: Fri, 26 Jun 2026 19:25:12 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20=C2=A7=207.6=20um=20Passwort-Login=20(1?= =?UTF-8?q?FA)=20erweitern;=20Admin-Zugang=20ist=20jetzt=201FA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Neuer Abschnitt 7.6.1 „Anmeldung mit Benutzername & Passwort (1FA, ohne 2FA)" (/login), Knopf auf der Zugangs-Seite, Konten aus dem Authelia-Datei-Backend. - /admin-login als auf Admins beschränkte Variante (7.6.2). - Recovery (ADMIN_API_KEY) -> 7.6.3, Härtung -> 7.6.4; Intro + TOC-Anchor angepasst. Co-Authored-By: Claude Opus 4.8 --- BEDIENUNGSANLEITUNG.md | 53 +++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/BEDIENUNGSANLEITUNG.md b/BEDIENUNGSANLEITUNG.md index 8a66864..14c70eb 100644 --- a/BEDIENUNGSANLEITUNG.md +++ b/BEDIENUNGSANLEITUNG.md @@ -44,7 +44,7 @@ funktioniert trotzdem, die Ausgabe ist dann unformatiert. 6. [Einstellungen und Konfiguration](#6-einstellungen-und-konfiguration) **Administration** -7. [Nutzerverwaltung und Authentifizierung](#7-nutzerverwaltung-und-authentifizierung) · [7.5 Admin-Web-Panel](#75-admin-web-panel) · [7.6 Admin-Login & Recovery](#76-admin-zugang-ohne-persönlichen-link-selbstanmeldung--recovery) +7. [Nutzerverwaltung und Authentifizierung](#7-nutzerverwaltung-und-authentifizierung) · [7.5 Admin-Web-Panel](#75-admin-web-panel) · [7.6 Anmeldung & Admin-Zugang](#76-anmeldung--admin-zugang-link-passwort-recovery) 8. [Gedächtnis und Erinnerungen](#8-gedächtnis-und-erinnerungen) 9. [Resilienz, Fallbacks und Metriken](#9-resilienz-fallbacks-und-metriken) 10. [Notfall-Erkennung und Eskalation](#10-notfall-erkennung-und-eskalation) @@ -1872,34 +1872,49 @@ Protokolliert werden u. a. `config_set` / `config_reset` (Laufzeit-Einstellungen > Sichtbar im Log-Tab nur im **Dienst-Betrieb** (Journal). Im Vordergrund-Betrieb > (`make run`) erscheinen die Audit-Zeilen im Terminal. -### 7.6 Admin-Zugang ohne persönlichen Link (Selbstanmeldung & Recovery) +### 7.6 Anmeldung & Admin-Zugang (Link, Passwort, Recovery) > 🔧 Admin -Die App-Oberfläche (`/`) ist **nur per persönlichem Zugangslink** (`?k=` → Cookie -`va_token`) erreichbar — bewusst ohne SSO, damit Senioren keine Login-Maske sehen. Wer -seinen Link verliert, kommt zunächst nicht in die App. Als **Admin** bist Du dadurch -**nicht ausgesperrt**: Du hast einen Selbst-Login und zwei unabhängige Recovery-Wege. +Die App-Oberfläche (`/`) erkennt Dich an einem `va_token`-Cookie. Es gibt drei Wege hinein: +1. **Persönlicher Zugangslink** (`?k=`) — der Standardweg für Senioren (keine + Login-Maske); ein gültiges Cookie loggt automatisch ein. +2. **Benutzername & Passwort (1FA, ohne 2FA)** — für Betreuer/Admins (§ 7.6.1). +3. **Recovery-Wege**, falls ein Admin ausgesperrt ist (§ 7.6.3 / 7.6.4). -#### 7.6.1 Selbstanmeldung mit dem Admin-Passwort (empfohlen) +Ohne gültiges Cookie zeigt `/` die Seite „Persönlicher Zugang nötig" mit einem Knopf +**„Mit Benutzername & Passwort anmelden"** (→ `/login`). Senioren nutzen weiter ihren Link; +`/` leitet bewusst **nicht** automatisch zur Login-Maske um (sonst säßen Senioren ohne +Authelia-Konto fest). -Rufe im Browser auf: +#### 7.6.1 Anmeldung mit Benutzername & Passwort (1FA, ohne 2FA) + +Rufe auf (oder klicke den Knopf auf der Zugangs-Seite): ``` -https://voice.jamulix.de/admin-login +https://voice.jamulix.de/login ``` -Ablauf: Der Reverse-Proxy schickt Dich zu **Authelia** (`auth.jamulix.de`) → Du meldest -Dich mit Deinem **Admin-Passwort/2FA** an → das Gateway erkennt Dich als SSO-Admin -(`ADMIN_USERS`), setzt Dir ein frisches `va_token`-Cookie und leitet in die App (`/`). -**Kein Link nötig.** Bookmarke diese URL als „Admin-Login". +Ablauf: Der Reverse-Proxy schickt Dich zu **Authelia** (`auth.jamulix.de`) → Du gibst +**nur Benutzername + Passwort** ein (Zugriffsregel `voice.jamulix.de → one_factor`, also +**kein 2FA**) → das Gateway erkennt Dich am `Remote-User`, setzt ein frisches +`va_token`-Cookie und leitet in die App (`/`). Gilt für **Admins und normale +Authelia-Nutzer**; die Konten liegen im Authelia-Datei-Backend +(`/etc/authelia/users_database.yml`). -- Technisch dahinter steht der Endpunkt `GET /api/admin/login` (dieselbe Wirkung; die - hübsche URL `/admin-login` ist nur ein nginx-Alias darauf). -- **Jeder Aufruf rotiert Deinen Token** — alte persönliche Links *dieses Admin-Nutzers* - werden ungültig. Für eine Wiederherstellung korrekt und ein Sicherheitsplus. +- Endpunkt dahinter: `GET /api/login` (nginx-Location `/login`). +- **Jeder Login rotiert Dein Token** — ein zuvor gesetztes Cookie / ein alter Link + *dieses Nutzers* wird ungültig (ein Token pro Nutzer). +- Andere `*.jamulix.de`-Dienste bleiben bei **2FA**; nur `voice.jamulix.de` ist 1FA. + Sicherheits-Hinweis: 1FA für den Admin-Zugang ist schwächer als 2FA — bewusste Abwägung. -#### 7.6.2 Recovery per `ADMIN_API_KEY` (SSO-unabhängig) +#### 7.6.2 Admin-Selbstanmeldung (`/admin-login`) + +`https://voice.jamulix.de/admin-login` ist die auf **Admins** (`ADMIN_USERS`) beschränkte +Variante von `/login` — gleicher Ablauf, aber Nicht-Admins bekommen 403. Praktisch als +Bookmark „Admin-Login". Endpunkt: `GET /api/admin/login` (nginx-Alias `/admin-login`). + +#### 7.6.3 Recovery per `ADMIN_API_KEY` (SSO-unabhängig) Funktioniert auch, wenn Authelia gerade nicht erreichbar ist — vom Server/localhost aus. Den Key liest Du als root aus `/etc/voice-assistant/voice-assistant.env`. @@ -1923,7 +1938,7 @@ echo "https://voice.jamulix.de/?k=$TOKEN" > geraten lassen (kein `?key=` in URLs verwenden, außer beim einmaligen Bootstrap über > `GET /api/admin/request-headers?key=…`), und nach solchem Gebrauch rotieren. -#### 7.6.3 Härtung gegen Total-Aussperrung +#### 7.6.4 Härtung gegen Total-Aussperrung Eine echte Vollsperre bräuchte: Link weg **und** Authelia-Konto weg **und** `ADMIN_API_KEY` weg **und** kein SSH. Um auch das abzusichern: