Dashboard-Auth komplett entfernt statt nur optional: Caddy ist einzige Auth-Schicht

Hermes' eigenes Auth-Gate (dashboard.basic_auth/HERMES_DASHBOARD_PASSWORD_HASH)
engagiert sich laut eigener Fehlermeldung ohnehin nur bei einem 0.0.0.0-Bind,
der Dashboard-Container bindet aber fest auf 127.0.0.1 -- das Gate haette hier
nie gegriffen. Statt es als "Fallback falls Bind mal wieder wandert" zu
behalten, jetzt sauber raus: HERMES_DASHBOARD_PASSWORD_HASH aus .env.example
und docker-compose.yml, der auskommentierte dashboard:-Block aus
config.yaml.example, README-Setup auf 8 statt 9 Schritte umnummeriert.
Caddy (TLS + eigene Basic-Auth) ist damit die einzige noetige Auth-Schicht --
ein Layer statt zwei, weniger Setup, weniger Verwirrung. Stale Kommentare im
Caddy-Compose-Block (redeten noch von "zweiter Basic-Auth-Schicht noetig weil
unklar ob dashboard.basic_auth greift") ebenfalls korrigiert.
This commit is contained in:
ARIA
2026-07-19 22:23:22 +00:00
parent b1423ffb6e
commit 3aaddc4a31
4 changed files with 77 additions and 137 deletions
+16 -21
View File
@@ -187,18 +187,13 @@ services:
environment:
- HERMES_UID=${HERMES_UID:-10000}
- HERMES_GID=${HERMES_GID:-10000}
# NICHT MEHR PFLICHT seit dem Caddy-Umbau (19.07.2026, spaeter Abend):
# Hermes' eigenes Auth-Gate "engagiert sich" laut seiner eigenen
# Fehlermeldung NUR bei einem 0.0.0.0-Bind ("the auth gate engages on
# non-loopback binds"). Der Service unten bindet per `command:` auf
# 127.0.0.1 — das Gate greift also gar nicht, Caddy (siehe unten) macht
# die eigentliche Absicherung nach aussen (TLS + eigene Basic-Auth).
# HERMES_DASHBOARD_PASSWORD_HASH ist daher optional: leer lassen ist ok,
# kein Hash-Erzeugen mehr noetig fuer den Normalbetrieb. Nur falls der
# Dashboard-Bind mal wieder auf 0.0.0.0 wandert, braucht's wieder einen
# Wert (siehe .env.example fuer die Erzeugung).
# HERMES_DASHBOARD_USER wird hier NICHT fuer Hermes' eigenes Auth-Gate
# gebraucht (das Gate engagiert sich laut eigener Fehlermeldung nur bei
# einem 0.0.0.0-Bind, der Service unten bindet aber fest auf 127.0.0.1
# per `command:`) — steht nur der Vollstaendigkeit halber mit drin,
# tatsaechlich genutzt wird die Variable von Caddy (siehe unten) fuer
# dessen Basic-Auth. Absicherung nach aussen laeuft komplett ueber Caddy.
- HERMES_DASHBOARD_USER=${HERMES_DASHBOARD_USER:-admin}
- HERMES_DASHBOARD_PASSWORD_HASH=${HERMES_DASHBOARD_PASSWORD_HASH:-}
# Kurskorrektur 19.07.2026, spaeter Abend: Stefan wollte erst 0.0.0.0
# (SSH-Tunnel machte mit SSL Probleme), jetzt aber die richtige Loesung:
# Dashboard bleibt auf 127.0.0.1 (Hermes' eigenes Auth-Gate verlangt dann
@@ -210,16 +205,16 @@ services:
# ─── Caddy (TLS-Reverse-Proxy + Basic-Auth vor dem Dashboard) ──────────
# Stefans Entscheidung 19.07.2026: Dashboard bleibt intern auf 127.0.0.1,
# Caddy uebernimmt TLS-Termination auf Port 443 UND eine zweite Basic-Auth-
# Schicht davor. Der zweite Punkt ist kein Overkill, sondern noetig: Hermes'
# eigenes Auth-Gate "engagiert" laut seiner eigenen Fehlermeldung NUR bei
# einem 0.0.0.0-Bind. Auf 127.0.0.1 (das Caddy hier anspricht) ist unklar/
# nicht garantiert, ob dashboard.basic_auth trotzdem noch durchgesetzt wird
# - deshalb sichert Caddy selbst zusaetzlich ab, statt sich darauf zu
# verlassen. Nutzt denselben HERMES_DASHBOARD_USER wie Hermes (aus .env),
# aber einen EIGENEN Hash: Caddys basic_auth will bcrypt, Hermes' Hash ist
# pbkdf2 — Formate sind nicht kompatibel, siehe .env.example fuer die
# Erzeugung von CADDY_BASIC_AUTH_HASH.
# Caddy uebernimmt TLS-Termination auf Port 443 UND die Basic-Auth davor.
# Caddy ist die EINZIGE Auth-/TLS-Schicht (aufgeraeumt 20.07.2026): Hermes'
# eigenes Dashboard-Auth-Gate (dashboard.basic_auth) wurde komplett entfernt,
# weil es sich laut eigener Fehlermeldung ohnehin nur bei einem 0.0.0.0-Bind
# engagiert — der Dashboard-Container bindet aber fest auf 127.0.0.1, das
# Gate haette hier nie gegriffen. Ein zweiter, nie greifender Auth-Layer
# haette nur Setup-Schritte gekostet, kein Sicherheitsgewinn. Nutzt
# HERMES_DASHBOARD_USER (aus .env) als Login-Name + einen eigenen bcrypt-
# Hash in CADDY_BASIC_AUTH_HASH (Caddy verlangt bcrypt, siehe .env.example
# fuer die Erzeugung).
#
# Zertifikat: bewusst KEIN Let's Encrypt (bräuchte oeffentliche Domain +
# Port-80-Challenge). Stefans Wunsch: ein selbstsigniertes Zertifikat mit