Authentifizierung
Dozzle unterstützt zwei Konfigurationen für die Authentifizierung. In der ersten bringst du deine eigene Authentifizierungsmethode mit, indem du Dozzle hinter einen Proxy stellst. Dozzle kann die passenden Header ohne weitere Einrichtung lesen.
Wenn du keine Authentifizierungslösung hast, bietet Dozzle eine einfache dateibasierte Benutzerverwaltung. Authentifizierungsanbieter werden über das Flag --auth-provider eingerichtet. In beiden Konfigurationen versucht Dozzle, die Benutzereinstellungen auf die Festplatte zu schreiben. Diese Daten landen in /data.
Sicherheitshinweise
Dozzle hat Zugriff auf docker.sock, was — sofern nicht eingeschränkt — Root-Rechten auf dem Host entspricht. Bevor du Dozzle über dein privates Netzwerk hinaus erreichbar machst, geh Folgendes durch:
- Stelle Dozzle immer hinter eine Authentifizierung, wenn es aus dem öffentlichen Internet erreichbar ist. Nutze
--auth-provider=simpleoder einen Forward-Proxy wie Authelia / Authentik / Cloudflare Access. - Lass Aktionen und Shell-Zugriff deaktiviert, solange du sie nicht brauchst. Damit lassen sich Container starten, stoppen, neu erstellen und beliebige Befehle darin ausführen.
- Schränke Benutzer im Mehrbenutzermodus über Rollen und Filter ein. Ohne explizite Rollen sieht ein Benutzer jeden Container, den die Dozzle-Instanz sieht.
- Gib den Port von Dozzle im Forward-Proxy-Modus niemals direkt frei. Dozzle vertraut
Remote-Userbei jeder Anfrage, und wenn kein Rollen-Header vorhanden ist, bekommt der Benutzer alle Rollen. Wer den Container erreicht, ohne über den Proxy zu gehen, authentifiziert sich mit einem einzigen Header als beliebiger Benutzer. Veröffentliche nur den Proxy und halte Dozzle mitexposestattportsin einem internen Netzwerk. - Terminiere TLS am Reverse Proxy. Beispiele für Nginx / Traefik / Caddy findest du unter Reverse Proxy & Basispfad.
- Schränke den Zugriff auf
docker.sockmit einem Proxy ein, wenn du keine Aktionen brauchst. Beachte, dass ein schreibgeschützter Mount (/var/run/docker.sock:/var/run/docker.sock:ro) die API nicht einschränkt: Das Flag:romarkiert nur die Socket-Datei auf der Festplatte als schreibgeschützt, API-Aufrufe laufen weiterhin ganz normal über den Socket, sodass Erstellen, Löschen und Ändern weiterhin möglich sind. Um Operationen wirklich einzuschränken, setze einen Socket-Proxy wietecnativa/docker-socket-proxyvor den Daemon.
Eine Methode wählen
| Methode | Wem die Benutzer gehören | Wann du sie nimmst |
|---|---|---|
| Simple | Dozzle, in users.yml | Du hast keine Authentifizierungslösung und möchtest, dass Dozzle die Anmeldungen übernimmt. |
| GitHub & OIDC | Dozzle, in users.yml | Du möchtest, dass sich dieselben Benutzer aus users.yml mit GitHub, Google, Keycloak, Pocket ID, Zitadel oder Authentik anmelden statt mit einem Passwort. |
| OpenID Connect | Dein Identity Provider | Du möchtest, dass Keycloak, Authentik, Zitadel oder Pocket ID die Benutzerliste besitzt, mit Rollen und Filtern aus dem Token und ohne users.yml. |
| Forward Proxy | Dein Proxy | Du betreibst bereits Authelia, Authentik, Cloudflare Access oder Ähnliches und möchtest, dass es die Authentifizierung vollständig übernimmt. |
Simple und OAuth sind derselbe Anbieter: users.yml ist in beiden Fällen die Benutzerliste, und OAuth ergänzt nur einen zweiten Weg, um nachzuweisen, dass du einer der Benutzer darin bist. OpenID Connect und Forward Proxy sind die eigenständigen Wege, bei denen etwas außerhalb von Dozzle die Benutzer besitzt. Nimm oidc, wenn dein Identity Provider Rollen in das Token schreiben kann, und den Forward Proxy, wenn du organisations- oder domainweite Zugriffsregeln brauchst, die vor Dozzle durchgesetzt werden, was users.yml bewusst nicht kann.
users.yml erzeugen
Dozzle hat einen eingebauten Befehl generate, um users.yml zu erzeugen. Hier ein Beispiel:
docker run -it --rm amir20/dozzle generate admin --password password --email test@email.net --name "John Doe" --user-filter name=foo --user-roles shell > users.ymlIn diesem Beispiel ist admin der Benutzername. E-Mail und Name sind optional, aber empfohlen, damit die Avatare stimmen. docker run -it --rm amir20/dozzle generate --help zeigt alle Optionen. Das Flag --user-filter erwartet eine kommagetrennte Liste von Filtern. Das Flag --user-roles erwartet eine kommagetrennte Liste von Rollen.
Wenn du --password weglässt, fragt Dozzle das Passwort auf stdin ab, sodass es nie in deiner Shell-History landet. Dafür ist ein interaktives Terminal nötig, behalte also die Flags -it:
docker run -it --rm amir20/dozzle generate admin --email test@email.net --name "John Doe" > users.ymlDie Eingabeaufforderung wird nach stderr geschrieben, die Umleitung von stdout nach users.yml funktioniert also weiterhin. Du kannst das Passwort auch hineinpipen, zum Beispiel echo "$PASSWORD" | docker run -i --rm amir20/dozzle generate admin > users.yml.