OpenLDAP Server Installation Konfiguration
OpenLDAP Server Installation und Konfiguration auf Ubuntu
Was ist LDAP?
LDAP (Lightweight Directory Access Protocol, RFC 4511) ist ein offenes Protokoll für den Zugriff auf Verzeichnis-Services. Es speichert Informationen über Benutzer, Gruppen, Geräte und andere Ressourcen in einer hierarchischen Baumstruktur und ermöglicht zentrale Benutzerverwaltung und Single-Sign-On (SSO). OpenLDAP ist die am weitesten verbreitete Open-Source LDAP-Implementierung.
Anwendungsfälle für LDAP
- Zentrale Benutzerverwaltung: Ein Directory für alle Systeme, Anwendungen und Services
- Single-Sign-On (SSO): Einmaliges Anmelden für multiple Services und Anwendungen
- Active Directory Alternative: Open-Source Lösung als Alternative zu Microsoft Active Directory
- Linux System Integration: PAM-basierte User Authentifizierung auf Linux-Systemen
- Email-Server Integration: Outlook, Postfix, Dovecot und andere nutzen LDAP für Adressen
- VoIP/Telefon-Systeme: Viele IP-PBX-Systeme integrieren mit LDAP für Verzeichnisse
- WiFi Access Control: RADIUS mit LDAP Backend für WiFi-Authentifizierung
LDAP-Grundkonzepte und Terminologie
LDAP verwendet eine hierarchische Baumstruktur zum Speichern von Daten:
- DN (Distinguished Name): Eindeutiger vollständiger Name eines Objekts im Baum (z.B. cn=John Doe,ou=People,dc=example,dc=com)
- DC (Domain Component): Komponente der Domain (dc=example, dc=com - entspricht example.com)
- OU (Organizational Unit): Abteilung, Kategorie oder Container (ou=People, ou=Groups, ou=Departments)
- CN (Common Name): Der tatsächliche Name des Objekts (z.B. cn=John Doe oder cn=admin-group)
- Schema: Definition von erlaubten Attributen und Objektklassen (z.B. inetOrgPerson, groupOfNames)
- Attributes: Spezifische Daten-Felder (z.B. mail, phoneNumber, loginShell)
- ObjectClass: Art des Objekts (z.B. person, organizationalUnit, groupOfNames)
Installation von slapd und ldap-utils
Aktualisieren Sie die Paketlisten und installieren Sie OpenLDAP Server und Tools:
sudo apt update sudo apt install -y slapd ldap-utils
Der slapd-Service wird automatisch installiert und gestartet. Die ldap-utils enthalten client-seitige Tools zur Verwaltung.
Initiale Konfiguration mit dpkg-reconfigure
Führen Sie die interaktive Konfiguration aus:
sudo dpkg-reconfigure slapd
Folgende Fragen werden gestellt:
Omit OpenLDAP server configuration? [no] → no DNS domain name: example.com Organization name: Example Inc. Administrator password: [enter password twice] Database backend to use: [MDB] Do you want the database to be removed when slapd is purged? [yes] → no (Backups wegen!) Move old database? [yes] → yes
Nach der Konfiguration wird ein initialer LDAP-Verzeichnis mit Basis-DN "dc=example,dc=com" erstellt.
Überprüfung der Installation
Überprüfen Sie, ob der LDAP-Server läuft:
sudo systemctl status slapd
Überprüfen Sie die aktuellen Verzeichnis-Inhalte:
sudo slapcat
Dies zeigt alle Einträge in LDIF-Format (LDAP Data Interchange Format).
Suche durchführen mit ldapsearch:
ldapsearch -x -b dc=example,dc=com -H ldap:///
Dies zeigt alle LDAP-Einträge in Ihrer Basis-DN.
Schritt 1: Organizational Units (OUs) erstellen
Erstellen Sie eine LDIF-Datei zur Strukturierung des Verzeichnisses:
sudo nano /tmp/create_ous.ldif
Fügen Sie folgende Inhalte hinzu:
dn: ou=People,dc=example,dc=com objectClass: organizationalUnit ou: People description: Users dn: ou=Groups,dc=example,dc=com objectClass: organizationalUnit ou: Groups description: Groups dn: ou=Services,dc=example,dc=com objectClass: organizationalUnit ou: Services description: Service Accounts
Importieren Sie die OUs in das LDAP-Verzeichnis:
sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f /tmp/create_ous.ldif
Geben Sie das Admin-Passwort ein, das Sie bei der dpkg-reconfigure gesetzt haben.
Schritt 2: Benutzer (Users) anlegen
Erstellen Sie eine LDIF-Datei mit Benutzerinformationen:
sudo nano /tmp/create_users.ldif
dn: uid=jdoe,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: jdoe
cn: John Doe
sn: Doe
givenName: John
mail: jdoe@example.com
loginShell: /bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/jdoe
userPassword: {SSHA}HASHED_PASSWORD_HERE
dn: uid=asmith,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: asmith
cn: Alice Smith
sn: Smith
givenName: Alice
mail: asmith@example.com
loginShell: /bin/bash
uidNumber: 10002
gidNumber: 10002
homeDirectory: /home/asmith
userPassword: {SSHA}HASHED_PASSWORD_HERE
Passwörter hashen
Generieren Sie sichere SSHA-Hashes für die Passwörter:
slappasswd -h {SSHA}
Geben Sie das gewünschte Passwort ein und erhalten Sie einen Hash. Ersetzen Sie HASHED_PASSWORD_HERE mit diesem Hash.
Importieren Sie die Benutzer:
sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f /tmp/create_users.ldif
Schritt 3: Gruppen erstellen
Erstellen Sie LDIF-Datei für Gruppen:
sudo nano /tmp/create_groups.ldif
dn: cn=developers,ou=Groups,dc=example,dc=com objectClass: groupOfNames cn: developers description: Development Team member: uid=jdoe,ou=People,dc=example,dc=com member: uid=asmith,ou=People,dc=example,dc=com dn: cn=admin,ou=Groups,dc=example,dc=com objectClass: groupOfNames cn: admin description: System Administrators member: uid=jdoe,ou=People,dc=example,dc=com
Importieren Sie die Gruppen:
sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f /tmp/create_groups.ldif
Schritt 4: Benutzer verändern und aktualisieren
Um einen Benutzer zu modifizieren, erstellen Sie eine LDIF-Datei mit Änderungen:
sudo nano /tmp/modify_user.ldif
dn: uid=jdoe,ou=People,dc=example,dc=com changetype: modify replace: mail mail: john.doe@newcompany.com
Wenden Sie die Änderungen an:
sudo ldapmodify -x -D cn=admin,dc=example,dc=com -W -f /tmp/modify_user.ldif
Schritt 5: Benutzer löschen
Löschen Sie einen Benutzer aus dem Verzeichnis:
sudo ldapdelete -x -D cn=admin,dc=example,dc=com -W "uid=jdoe,ou=People,dc=example,dc=com"
Schritt 6: Beispiele für LDAP-Suchen
Suchen Sie nach allen Benutzern in der People-OU:
ldapsearch -x -b ou=People,dc=example,dc=com
Suchen Sie nach einem spezifischen Benutzer:
ldapsearch -x -b ou=People,dc=example,dc=com "(uid=jdoe)"
Suchen Sie nach Benutzern mit bestimmtem Namen:
ldapsearch -x -b ou=People,dc=example,dc=com "(cn=John*)"
Suchen Sie nach Gruppen:
ldapsearch -x -b ou=Groups,dc=example,dc=com "(objectClass=groupOfNames)"
Suchen Sie nach Benutzern in einer bestimmten Gruppe:
ldapsearch -x -b ou=People,dc=example,dc=com "memberOf=cn=developers,ou=Groups,dc=example,dc=com"
Schritt 7: TLS/SSL Konfiguration
Für produktive Umgebungen sollten Sie TLS/SSL aktivieren:
SSL-Zertifikat generieren
Verwenden Sie Let's Encrypt oder generieren Sie ein selbstsigniertes Zertifikat:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/ldap/private/ldap-server.key \ -out /etc/ldap/certs/ldap-server.crt
Setzen Sie korretto Berechtigungen:
sudo chown openldap:openldap /etc/ldap/private/ldap-server.key sudo chmod 600 /etc/ldap/private/ldap-server.key
LDAP-Konfiguration für TLS anpassen
Bearbeiten Sie /etc/ldap/ldap.conf:
sudo nano /etc/ldap/ldap.conf
Fügen Sie hinzu:
TLS_CACERT /etc/ldap/certs/ldap-server.crt
Modifizieren Sie die slapd-Konfiguration:
sudo nano /etc/ldap/slapd.d/cn=config/olcDatabase=\{1\}mdb.ldif
Oder verwenden Sie ldapmodify:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// <Konfigurieren Sie slapd für LDAPS (LDAP über TLS) auf Port 636. Bearbeiten Sie /etc/default/slapd:
sudo nano /etc/default/slapdÄndern Sie SLAPD_SERVICES zu:
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"Starten Sie slapd neu:
sudo systemctl restart slapdTesten Sie LDAPS-Verbindung:
ldapsearch -x -b dc=example,dc=com -H ldaps://localhost:636Schritt 8: PAM LDAP konfigurieren für Linux-Systeme
Um LDAP-Benutzer auf Linux-Systemen anmelden zu können, installieren Sie PAM-LDAP:
sudo apt install -y libpam-ldapd nslcdKonfigurieren Sie nslcd:
sudo dpkg-reconfigure nslcdBeantworten Sie die Fragen: - LDAP server: ldap://ldap.example.com - LDAP base: dc=example,dc=com - Welche Services sollen nslcd verwenden: [Enter für alle]
Aktivieren Sie PAM-LDAP Module:
sudo pam-auth-updateWählen Sie "LDAP authentication" aus der Liste.
Überprüfen Sie /etc/nsswitch.conf:
sudo nano /etc/nsswitch.confEs sollte enthalten:
passwd: files ldap group: files ldap shadow: files ldapSchritt 9: Testen der LDAP-Login
Testen Sie, ob LDAP-Benutzer sich anmelden können:
sudo su - jdoeDies sollte den jdoe-Benutzer von LDAP authentifizieren und anmelden. Das Home-Directory wird automatisch erstellt (wenn pam_mkhomedir konfiguriert ist).
Überprüfen Sie /var/log/auth.log auf Login-Versuche:
sudo tail -f /var/log/auth.log | grep ldapSchritt 10: LDAP-Backup und Wiederherstellung
Backup erstellen
Sicherung des gesamten LDAP-Verzeichnisses:
sudo slapcat -l /backups/ldap-backup.ldifOder erstellen Sie ein Backup der Konfiguration:
sudo slapcat -b cn=config -l /backups/ldap-config-backup.ldifWiederherstellung aus Backup
Stoppen Sie slapd und löschen Sie die alte Datenbank:
sudo systemctl stop slapd sudo rm -rf /var/lib/ldap/*Stellen Sie aus der LDIF-Datei wieder her:
sudo slapadd -l /backups/ldap-backup.ldifSetzen Sie Berechtigungen:
sudo chown -R openldap:openldap /var/lib/ldap/Starten Sie slapd:
sudo systemctl start slapdSchritt 11: LDAP Account Policies (ppolicy)
Implementieren Sie Passwort-Policies mit dem ppolicy-Overlay:
Erstellen Sie eine Policy-LDIF:
sudo nano /tmp/ppolicy.ldifdn: cn=default,ou=policies,dc=example,dc=com objectClass: device objectClass: pwdPolicy cn: default pwdMaxAge: 7776000 pwdInHistory: 5 pwdMinLength: 8 pwdExpireWarning: 604800 pwdLockout: TRUE pwdLockoutDuration: 1800 pwdMaxFailure: 5 pwdMustChange: TRUE pwdAllowUserChange: TRUEImportieren Sie die Policy:
sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f /tmp/ppolicy.ldifFehlerbehebung
Error 32: No such object
Der Basis-DN existiert nicht. Überprüfen Sie:
sudo slapcat | head -20Stellen Sie sicher, dass die dc=example,dc=com-Struktur existiert.
Error 49: Invalid credentials
Passwort oder DN ist falsch. Überprüfen Sie: - Korrekte Admin-DN: cn=admin,dc=example,dc=com - Korrektes Passwort - User existiert mit ldapsearch
Error 34: Invalid DN syntax
DN hat falsche Syntax. Überprüfen Sie auf Tippfehler in LDIF-Dateien.
LDAP Server antwortet nicht
sudo systemctl status slapd sudo tail -f /var/log/syslog | grep slapdVergleich: OpenLDAP vs Active Directory vs Kanidm
Feature OpenLDAP Microsoft Active Directory Kanidm Lizenzskosten Kostenlos (Open Source) Teuer (Pro Benutzer) Kostenlos (Open Source) OS-Support Linux, Unix, macOS, BSD Windows Server nur Linux, Linux-fokussiert Komplexität Setup Moderat Komplex Einfach LDAP Support Native (ist LDAP) LDAP kompatibel LDAP API verfügbar OAuth2/OIDC Via Keycloak/etc Ja (mit Extra-Config) Native Scalability Gut Excellent Gut (modern) Best für Linux/Unix-Umgebungen Windows-dominierte Umgebungen Modern Hybrid-Cloud Umgebungen Zusammenfassung
Sie haben nun einen vollständigen OpenLDAP Server mit Benutzern, Gruppen und Policies konfiguriert. OpenLDAP ist eine mächtige und flexible Lösung für zentrale Benutzerverwaltung, besonders in Linux/Unix-Umgebungen. Die Kombination mit Keycloak oder anderen SSO-Systemen ermöglicht moderne OAuth2/SAML-Integration mit Legacy-Anwendungen.
Wichtige nächste Schritte: - TLS/SSL aktivieren für Produktionsumgebungen - Regelmäßige Backups durchführen - PAM-LDAP auf allen Clients konfigurieren - Mit Keycloak/FreeIPA für erweiterte SSO-Features integrieren