Hallo zusammen,
Ich möchte einen LDAP DS 389 Server in einem Container starten und dort meinen ersten User anlegen.
Ich hatte bisher noch so gut wie keine Erfahrung mit LDAP und daher ist dieses Dokument auch an Anfänger gerichtet. Es hat ein paar Tage gedauert, bis ich mit Hilfe von KI und mI (meiner Ingelligenz ;-) einen laufenden Server mit einem User anlegen konnte.
schematische Darstellung eines LDAP Baumes
Folgendes habe ich gemacht:
LDAP Server runter laden und starten
Ich verwende aus Gründen den LDAP Server DS 389 der auf einem RedHat Linux basiert.
Das dazugehörige Docker/Podman Image kann wie folgt heruntergeladen und zum Starten gebracht werden.
podman run -d -p 3389:3389 -p 3636:3636 -e DS_DM_PASSWORD=1234 --name ldap_server 389ds/dirsrv:latest
Die LDAP-Tools sind in dem Image ebenfalls vorhanden. Daher ist es sinnvoll sich auf dieses Linux einzuloggen:
podman exec -it ldap_server bin/bash
Alternativ kann auch der DS-386 von Suse verwendet und mit gewünschten Parameter gestartet werden:
podman run -d
-p 3389:3389
-p 3636:3636
-e DS_DM_PASSWORD=1234
-e DS_SUFFIX=dc=example,dc=com
-e DS_INSTANCE_NAME=localhost
-e DS_INSTANCE_SCRIPT_UPDATES=yes
-e DS_ROOT_DN="cn=Directory Manager"
-e DS_SETUP_DS_SUFFIX=dc=example,dc=com
-e DS_SETUP_DS_DN="cn=Directory Manager"
-e DS_SETUP_DS_PASSWORD=1234
-e DS_SETUP_ADMIN_USER=admin
-e DS_SETUP_ADMIN_PASSWORD=1234
-v ldap_data:/data
--name ldap_server
registry.suse.com/suse/389-ds:latest
Allerdings fehlen in diesem Image wichtige Werkzeuge wie der vi.
Ein paar Tools
Podman
Stoppen des Containers:
podman stop ldap_server
Löschen des Containers (Das Image bleibt erhalten):
podman rm ldap_server
Sobald persistente Daten gebraucht werden, wird dieser Befehl hier interessant:
podman run -d -p 3389:3389 -p 3636:3636 -e DS_DM_PASSWORD=1234 -v ldap_data:/data --name ldap_server 389ds/dirsrv:latest
Linux Befehle
Einrichten und Bearbeiten von Serverinstanzen:
dsidm localhost
Zeigt an, ob der LDAP Server läuft:
dsctl localhost healthcheck
Windows
Es gibt für Windows auch LDAP-Browser. z.B. hier
Base DN erstellen
Ich habe versucht einen User mit ldapadd zu erstellen, erhielt aber immer wieder die Fehlermeldung:
ldap_add: No such object (32)
... was bedeutet, dass ihm ein übergeordnetes Element (oder gar die Datenbank) fehlt.
Nach längerem Suchen (Henne-Ei Problem) bin ich schließlich auf folgende Lösung gestoßen:
dsconf localhost backend create --suffix dc=example,dc=com --be-name userRoot --create-suffix
Parameter-Erklärung:
- --suffix dc=example,dc=com: Definiert die zu erstellende Base-DN
- --be-name userRoot: Gibt dem Backend einen Namen (userRoot ist eine gängige Wahl)
- --create-suffix: Erstellt automatisch die Bas-DN im Verzeichnis
Container erstellen
Benutzer liegen in einem Container. Daher ist dies eine Vorraussetzung, die wir hiermit schaffen. Wir erstellen eine Datei namens container.ldif mit folgendem Inhalt:
dn: ou=users,dc=example,dc=com
objectClass: organizationalUnit
ou: users
dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
ou: groups
Diese Datei fügen wir dann dem LDAP Server zu:
ldapadd -x -H ldap://localhost:3389 -D "cn=Directory Manager" -w 1234 -f container.ldif
User hinzufügen
Nun sind die Vorraussetzungen erfüllt um einen User zu erstellen.
user.ldif:
dn: uid=john.doe,ou=users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
cn: John Doe
sn: Doe
uid: john.doe
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/john.doe
loginShell: /bin/bash
userPassword: {SSHA}passwordhash
ldapadd -x -H ldap://localhost:3389 -D "cn=Directory Manager" -w 1234 -f user.ldif
ldapsearch -x -H ldap://localhost:3389 -D "cn=Directory Manager" -w 1234 -b "dc=example,dc=com"
Userdaten ändern
Ich möchte z.B. das Passwort (auf etwas unkonventionellem Wege) des Users ändern.
Diese Änderungen speichere ich in einer password.ldif Datei ab:
dn: uid=john.doe,ou=users,dc=example,dc=com
changetype: modify
replace: userPassword
userPassword: xxx
Und schicke die Änderung dann an den LDAP Server:
ldapmodify -x -H ldap://localhost:3389 -D "cn=Directory Manager" -w 1234 -f password.ldif
Fazit
Nun habe ich einen lauffähigen LDAP-Server, der von außen gelesen werden kann und auf dem der erste User existiert. Als nächsten Schritt möchte ich einen simplen NGNIX-Webserver erstellen, auf dem sich der User einloggen soll. Danach möchte ich User von dem IGA Server Midpoint exportieren und in LDAP einfügen. Und zuguterletzt soll noch ein Keycloak Server für die Authentifizierung angeschlossen werden. Da habe ich sicherlich noch einiges vor mir ;-)
Quellen für meine Doku: https://fy.blackhats.net.au/blog/2019-07-05-using-389ds-with-docker/
!LOL
MI=Meine Intelligenz als Abgrenzung zur KI. Geil.
Gut, wie du dich da durchgefuchst hast. Gratuliere.
lolztoken.com
Nobody nose.
Credit: mimismartypants
$LOLZ on behalf of hannes-stoffel
(1/6)
Delegate Hive Tokens to Farm $LOLZ and earn 110% Rewards. Learn more.@achimmertens, I sent you an
#hive #posh
Congratulations @achimmertens! You received a personal badge!
You can view your badges on your board and compare yourself to others in the Ranking
Check out our last posts: