Du hast wahrscheinlich schon einige Dienste auf deinem Server, welche eine Authentifizierung mittels LDAP erlauben. Mit LLDAP kannst du relativ einfach einen LDAP-Server aufsetzen. Somit erreichst du, dass du eine zentrale Benutzerverwaltung erhältst. LLDAP ist eine einfache und ressourcenschonende Alternative zu OpenLDAP. Ich zeige euch in dieser Anleitung, wie ihr LLDAP mittels Docker und Traefik auf eurem Server installieren könnt.
1. Grundvoraussetzung
- Docker & Docker Compose v2 (Debian / Ubuntu )
- Traefik V3 Installation, Konfiguration und CrowdSec-Security
2. Verzeichnis erstellen
Dazu gebt ihr folgenden Befehl ein:
mkdir -p /opt/containers/lldap
3. Docker Compose Datei erstellen
Dazu erstellt ihr folgende Datei:
nano /opt/containers/lldap/docker-compose.yml
Fügt folgendes ein:
services: lldap: image: lldap/lldap:stable container_name: lldap networks: - proxy volumes: - ./lldap_data:/data environment: - UID=1000 - GID=1000 - TZ=Europe/Berlin - LLDAP_JWT_SECRET=Supergeheim # verwende hier einen zufällligen Token. Ist nicht das Passwort. - LLDAP_KEY_SEED=Supersupergeheim # verwende hier einen zufällligen Token. Ist nicht das Passwort. - LLDAP_LDAP_BASE_DN=dc=deinedomain,dc=de labels: - traefik.enable=true - traefik.http.routers.lldap.rule=Host(`ldap.deinedomain.de`) - traefik.http.routers.lldap.entrypoints=websecure - traefik.http.services.lldap.loadbalancer.server.port=17170 - traefik.http.routers.lldap.service=lldap - traefik.http.routers.lldap.tls.certresolver=tls_resolver networks: proxy: name: proxy external: true
4. Domains anpassen
Nun ändern wir noch die Domains in der Konfiguration. Die Domain unter welcher die LLDAP-Weboberfläche später erreichbar ändert ihr so:
cd /opt/containers/lldap sed -i "s/ldap.deinedomain.de/<DeineDomain>/g" docker-compose.yml Beispiel: sed -i "s/ldap.deinedomain.de/ldap.euredomain.de/g" docker-compose.yml
- LLDAP_LDAP_BASE_DN=dc=deinedomain,dc=de ändert ihr auf die Domain, für welche ihr den LDAP-Server installiert.
5. LLDAP starten
Nun starten wir LLDAP mit folgendem Befehl:
docker compose -f /opt/containers/lldap/docker-compose.yml up -d
Geht anschließend auf eure Homepage ldap.euredomain.de
Dort solltet ihr folgendes sehen:
Hier könnt ihr euch mit den Standard-Benutzerdaten admin und password einloggen.
Sobald ihr eingeloggt seid. ändert ihr natürliche euer Admin-Passwort indem ihr auf den Benutzer admin klickt und danach Modify Password auswählt.
6. (Optional) Einen Read-Only Benutzer anlegen
Wir können für Applikationen, welchen wir nicht erlauben wollen, dass sie in die LDAP-Datenbank “zurückschreiben” können, einen Read-Only Benutzer erstellen.
Dazu klicken wir auf Create a User und füllen für User name readonly (du kannst hier aber auch einen anderen Benutzernamen wählen) aus und geben das gewünschte Passwort und eine E-Mail-Adresse ein (diese ist nicht relevant, wird vom Formular aber benötigt). Anschiessend klicken wir auf Submit.
Anschliessend klicken wir auf den Benutzer readonly und fügen ihn unter Group memberships der Gruppe lldap_strict_readonly hinzu. Das sollte nachher so aussehen.
7. Beispielhafte Konfiguration anhand von Portainer
7.1 LDAP-Benuzer erstellen
Als erstes erstellt ihr über die LLDAP-Weboberfläche einen neuen Benutzer. Diesen könnt ihr beliebig nennen. In diesem Beispiel nenne ich ihn einfach test. Bestätigen mit Submit.
7.2 In Portainer einloggen und die Einstellungen vornehmen
Nun loggt ihr euch mit eurem normalen Admin-Benuter (noch nicht mit einem LDAP-Benutzer) in Portainer ein. Danach geht ihr auf Settings > Authentication und wählt LDAP aus.
Dann scrollt ihr ein Wenig nach unten.
Bei LDAP-Server gebt ihr folgendes ein:
lldap:3890
Als nächstes deaktiviert ihr die Auswahl “Anonymous mode”.
Die Eingabe bei Reader DN hängt davon ab, ob ihr den optionalen Readonly-Benutzer (Schritt 6.) angelegt habt oder nicht.
Wenn ihr keinen Readonly-Benutzer angelegt habt, gebt ihr folgendes ein:
cn=admin,ou=people,dc=deinedomain,dc=de
Wenn ihr einen Readonly-Benutzer erstellt habt, gebt ihr das ein:
cn=readonly,ou=people,dc=deinedomain,dc=de
In beiden Fällen müsst ihr aber eure Domain unter dc=deinedomain,dc=de anpassen.
Dann gebt ihr noch das entsprechende Passwort ein und testet die Verbindung zum LDAP-Server indem ihr auf Test connectivity klickt.
Anschliessend müsst ihr unter User search configurations und Group search configurations noch die Domain anpassen, da wo ou=people,dc=deinedomain,dc=de bzw. ou=groups,dc=deinedomain,dc=de geschrieben steht.
Zur guten Letzt scrollt ihr ganz nach unten und speichert mit Save settings eure Eingaben.
7.3 Benutzer als Administrator festlegen
Der Benutzer (im Beispiel genannt test) ist standardmässig nicht Administrator und kann in Portainer nur sehr wenig tun. Um dies zu ändern gehen wir wie folgt vor.
Als erstes loggen wir uns mit dem neu erstellten user test an, damit dieser in Portainer erstellt wird. Danach melden wir uns gleich wieder ab und loggen uns anschliessend als normaler Administrator an (nicht der LDAP-Administrator).
Nun klickt ihr auf euren Benutzer, in diesem Falle test, und aktiviert die Auswahl Administator im darauffolgenden Fenster.
So, nun ist der Benutzer Administrator und kann in Portainer alles tun, was ein Administrator darf. Um dies zu testen loggen wir uns wieder aus und loggen uns anschliessend als Benutzer test an.
8. Anleitungen zur Integration von LLDAP
Nun geht es darum, weitere Dienste mit LLDAP zu verbinden. Dazu geht ihr einfach auf folgende Seite: https://github.com/lldap/lldap/blob/main/example_configs/. Hier findet ihr detaillierte Konfigurationen für sehr viele Dienste.
Hallo chwonl,
Danke für die Anleitung. Ich wollte schon lange eine zentrale Authentifizierungsquelle für meine Applikationen auf meinem Homeserver umsetzen. Und deine Beschreibung sieht so aus als wäre es damit für viele meiner Services möglich.
Das große ABER:
leider scheitere ich bei dem von dir beschriebenem Beispiel. Das Anmelden eines users über LDAP funktioniert nicht. Portainer reagiert immer mit “Unable to login“.
Beim Anlagen der LDAP config in Portainer ist der Connectivity check erfolgreich. Aber ein login eines neuen, oder auch eines zuvor in Portainer angelgten users schlägt fehl.
Ich habe dabei schon mit und ohne dem “Automatic user provisioning” probiert.
Leider kenne ich mich mit LDAP nicht aus um aus einem DEBUG erkennen zu können wo der Fehler liegen könnte.
Der DEBUG vom login Versuch des users demo02 sieht so aus:
Vielleicht kann mir ja wer auf die Sprünge helfen.
Vielen lieben Dank für die Anleitung!
Vielleicht könnte man hier noch darauf eingehen wie man “LDAPS” aktiviert.
Eine Nextcloud lässt z.B. die Benutzer keine “Passwort Änderungen” vornehmen wenn kein LDAPS genutzt wird.
Beste Grüße
# If using LDAPS, set enabled true and configure cert and key path
# – LLDAP_LDAPS_OPTIONS__ENABLED=true
# – LLDAP_LDAPS_OPTIONS__CERT_FILE=/path/to/certfile.crt
# – LLDAP_LDAPS_OPTIONS__KEY_FILE=/path/to/keyfile.key