https://www.geeksforgeeks.org/ldap-full-form/

Lesezeit: 10 Minuten



LDAP: Der Schlüssel zur effizienten Benutzerverwaltung

Hey Techies! Heute tauchen wir in die faszinierende Welt von LDAP ein. Egal ob du ein Neuling oder ein erfahrener Sys-Admin bist, dieser Post wird dir helfen, LDAP und insbesondere OpenLDAP besser zu verstehen. Also, schnall dich an und lass uns loslegen!

Am Ende des Beitrags finest du eine PDF-Anleitung zum Aufsetzen eines LDAP Services und eines NextCloud Services, sowie die Verwendung des LDAP im NextCloud.


Was zum Teufel ist LDAP?

LDAP steht für Lightweight Directory Access Protocol.
Klingt kompliziert?
Keine Sorge, es ist einfacher als du denkst!
Stell dir LDAP wie ein digitales Telefonbuch vor, nur viel cooler und vielseitiger[1].

LDAP ist ein Protokoll, das den Zugriff auf Verzeichnisdienste ermöglicht.
Es speichert Informationen über Benutzer, Gruppen und andere Objekte in einer hierarchischen Struktur. Das Beste daran? Es ist leichtgewichtig und schnell – genau das, was wir in der modernen IT-Welt brauchen[1].

OpenLDAP, die Open-Source-Implementierung von LDAP, nutzt standardmäßig den Port 389 für unverschlüsselte Verbindungen und 636 für SSL/TLS-verschlüsselte Verbindungen.
Merke dir diese Ports – sie könnten bei der Fehlerbehebung nützlich sein!


Wann und wo solltest du LDAP einsetzen?

LDAP glänzt in Umgebungen, wo du eine zentralisierte Benutzerverwaltung brauchst.
Hier sind einige Szenarien, in denen LDAP wie ein Superheld einspringen kann:

  1. Unternehmensnetzwerke: Verwalte Benutzerkonten, Gruppen und Berechtigungen für alle deine Mitarbeiter an einem zentralen Ort.
  2. Single Sign-On (SSO): Ermögliche deinen Benutzern, sich mit einem einzigen Satz von Anmeldeinformationen bei verschiedenen Diensten anzumelden.
  3. E-Mail-Systeme: Integriere LDAP mit deinem E-Mail-Server für eine einfachere Verwaltung von E-Mail-Adressen und Verteilerlisten.
  4. Webanwendungen: Nutze LDAP zur Authentifizierung und Autorisierung in deinen webbasierten Anwendungen.
  5. VPNs: Verwende LDAP zur Authentifizierung von VPN-Benutzern[3].

LDIF: Das Schweizer Taschenmesser der LDAP-Konfiguration

LDIF (LDAP Data Interchange Format) ist ein Standardformat für den Import und Export von Verzeichnisdaten in LDAP-Systemen.
LDIF-Dateien sind Textdateien, die Verzeichniseinträge und deren Attribute in einem menschenlesbaren Format darstellen.

Wichtige Eigenschaften von LDIF-Dateien:
Binäre Daten:
Für binäre Attribute wird eine spezielle Notation verwendet, meist mit Base64-Kodierung.
Struktur:
Jeder Eintrag beginnt mit einem DN (Distinguished Name) und wird gefolgt von Attribut-Wert-Paaren.
Syntax:

  • Jede Zeile enthält ein Attribut und seinen Wert, getrennt durch einen Doppelpunkt.
  • Mehrzeilige Werte beginnen mit einem Leerzeichen in den Folgezeilen.
  • Leere Zeilen trennen Einträge voneinander.

Kommentare:
Zeilen, die mit '#' beginnen, sind Kommentare und werden ignoriert.

Eine typische LDIF-Datei für Benutzer könnte so aussehen (Für LDAP Struktur einen Abschnitt weiter):

dn: uid=johndoe,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: johndoe
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 10000
gidNumber: 5000
userPassword: {SSHA}hashed_password_here
loginShell: /bin/bash
homeDirectory: /home/johndoe
mail: [email protected]

Jede Zeile repräsentiert ein Attribut und seinen Wert. Der „dn“ (Distinguished Name) ist wie die Adresse des Eintrags im LDAP-Baum[4].
Hier siehst du was die einzelnen gezeigten Standart-Attribute darstellen:

1. `dn: uid=johndoe,ou=People,dc=example,dc=com`
- Dies ist der Distinguished Name (DN) des Eintrags. Er definiert die eindeutige Position des Eintrags im LDAP-Verzeichnisbaum.
2. `objectClass: inetOrgPerson`
- Definiert den Eintrag als Person mit Internet-spezifischen Attributen.
3. `objectClass: posixAccount`
- Fügt POSIX-spezifische Attribute hinzu, die für Unix/Linux-Systeme relevant sind.
4. `objectClass: shadowAccount`
- Ermöglicht die Verwendung von Shadow-Passwort-Feldern.
5. `uid: johndoe`
- Die eindeutige Benutzer-ID für diesen Eintrag.
6. `sn: Doe`
- Der Nachname (surname) des Benutzers.
7. `givenName: John`
- Der Vorname des Benutzers.
8. `cn: John Doe`
- Der vollständige Name (Common Name) des Benutzers.
9. `displayName: John Doe`
- Der Name, der für Anzeigezwecke verwendet wird.
10. `uidNumber: 10000`
- Die numerische Unix-Benutzer-ID.
11. `gidNumber: 5000`
- Die numerische Unix-Gruppen-ID.
12. `userPassword: {SSHA}hashed_password_here`
- Das verschlüsselte Passwort des Benutzers (SSHA-Hash).
13. `loginShell: /bin/bash`
- Die Standard-Shell für den Benutzer bei der Anmeldung.
14. `homeDirectory: /home/johndoe`
- Das Home-Verzeichnis des Benutzers.
15. `telephone: 49176500000`
- Die Telefonnummer des Benutzers.
16. `mail: [email protected]`
- Die E-Mail-Adresse des Benutzers.

LDIF-Dateien werden häufig verwendet für:

  • Massenimport von Benutzern und Gruppen
  • Backup und Wiederherstellung von LDAP-Daten
  • Übertragung von Daten zwischen verschiedenen LDAP-Servern
  • Dokumentation der Verzeichnisstruktur

WICHTIG: Deaktivierte Benutzer

In openLDAP sowie Active Directory gibt es kein direktes Attribut welches festlegt ob ein Benutzer aktiviert oder deaktiviert ist.
Oft wird ein benutzerdefiniertes Attribut wie „accountStatus“ verwendet.
Einige Systeme verwenden ein boolesches Attribut wie „enabled“ oder „disabled“.
Andere nutzen ein Attribut wie „accountStatus“ mit Werten wie „active“ oder „inactive“.
Manche implementieren eine Gruppe für deaktivierte Benutzer.


LDAP Struktur in LDIF Format

Gerne stelle ich dir ein Beispiel für eine LDAP-Struktur in einer LDIF-Datei vor, die importiert werden kann. Hier ist ein Beispiel für eine einfache Organisationsstruktur:

# Basis-DN für die Organisation
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
dc: example
o: Example Inc.
# Organisationseinheit für Benutzer
dn: ou=Users,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Users
# Organisationseinheit für Gruppen
dn: ou=Groups,dc=example,dc=com
objectClass: top
objectClass: organizationalUnit
ou: Groups
# Eine Beispielgruppe
dn: cn=Developers,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: groupOfNames
cn: Developers
member: uid=johndoe,ou=Users,dc=example,dc=com

Erklärung des Aufbaus und der Attribute:

  1. Basis-DN (Distinguished Name):
  • dn: dc=example,dc=com : Dies ist der Wurzeleintrag der LDAP-Struktur.
  • objectClass : Definiert die Typen des Eintrags (top, dcObject, organization).
  • dc : Domain Component, Teil des DNS-Namens.
  • o : Organisationsname.
  1. Organisationseinheiten:
  • dn: ou=Users,dc=example,dc=com und dn: ou=Groups,dc=example,dc=com Definieren Unterstrukturen für Benutzer und Gruppen.
  • objectClass: organizationalUnit : Kennzeichnet diese Einträge als Organisationseinheiten.
  • ou : Der Name der Organisationseinheit.
  1. Beispielgruppe:
  • dn: cn=Developers,ou=Groups,dc=example,dc=com : Eindeutiger Identifier für die Gruppe.
  • objectClass: groupOfNames : Definiert den Eintrag als Gruppe.
  • cn : Common Name, hier der Gruppenname.
  • member : Verweist auf Mitglieder der Gruppe durch ihre DNs.

Jeder Eintrag beginnt mit einem dn (Distinguished Name), der seine eindeutige Position in der LDAP-Hierarchie angibt. Die objectClass-Attribute definieren, welche anderen Attribute für den Eintrag erlaubt oder erforderlich sind.

Diese LDIF-Datei kann mit einem LDAP-Verwaltungstool wie ldapadd importiert werden, um die beschriebene Struktur in einem LDAP-Verzeichnis zu erstellen.
Siehe dazu unten Nützliche Linux-Befehle für LDAP-Verwaltung.


Benutzerattribute: Die Bausteine deines LDAP-Verzeichnisses

In LDAP kannst du eine Vielzahl von Attributen für Benutzer definieren.
Hier sind einige gängige Attribute:

  • uid: Eindeutige Benutzer-ID
  • cn: Common Name (oft der vollständige Name)
  • sn: Nachname
  • givenName: Vorname
  • mail: E-Mail-Adresse
  • userPassword: Passwort (verschlüsselt)
  • objectClass: Definiert die Art des Objekts und welche Attribute es haben kann
  • homeDirectory: Home-Verzeichnis des Benutzers
  • loginShell: Standard-Shell für den Benutzer

Du kannst auch benutzerdefinierte Attribute hinzufügen, um spezifische Informationen zu speichern, die für deine Organisation relevant sind[1][4].


OpenLDAP unter Linux: Tipps und Tricks

Beim Aufsetzen von OpenLDAP unter Linux gibt es einige Dinge zu beachten:

  1. Installation: Beginne mit der Installation des OpenLDAP-Pakets. Auf Ubuntu oder Debian würdest du beispielsweise Folgendes ausführen:

sudo apt-get update
sudo apt-get install slapd ldap-utils

  1. Konfiguration: Verwende das dpkg-reconfigure Tool, um die grundlegende Konfiguration durchzuführen. Dazu gehört auch die Anmeldedaten des Admin Accounts festzulegen.
    Verwende diesen Befehl:

sudo dpkg-reconfigure slapd

  1. Sicherheit: Aktiviere SSL/TLS für verschlüsselte Verbindungen. Erstelle dazu ein selbstsigniertes Zertifikat oder verwende ein von einer Zertifizierungsstelle ausgestelltes Zertifikat.
  2. Schemas: Wähle die richtigen Schemas für deine Bedürfnisse. Das „inetOrgPerson“ Schema ist ein guter Ausgangspunkt für die meisten Organisationen.
  3. Indizes: Konfiguriere Indizes für häufig abgefragte Attribute, um die Leistung zu verbessern.
  4. Backups: Richte regelmäßige Backups ein. Das slapcat Tool ist dafür sehr nützlich.
  5. Monitoring: Überwache deinen LDAP-Server auf Performance und Fehler. Tools wie OpenLDAP Monitor können dabei helfen

Gruppen und Benutzerattribute: Ordnung ins Chaos bringen

Bei der Erstellung von Gruppen und Benutzerattributen solltest du Folgendes beachten:

  1. Namenskonventionen:
    • Etabliere klare Namenskonventionen für Benutzer und Gruppen.
  2. Gruppenhierarchie:
    • Plane deine Gruppenhierarchie sorgfältig. Verschachtelte Gruppen können die Verwaltung vereinfachen.
  3. Minimale Berechtigungen:
    • Folge dem Prinzip der geringsten Privilegien. Gib Benutzern nur die Berechtigungen, die sie wirklich benötigen.
  4. Standardattribute:
    • Definiere ein Set von Standardattributen, die für alle Benutzer erforderlich sind.
  5. Benutzerdefinierte Attribute:
    • Füge benutzerdefinierte Attribute hinzu, um organisationsspezifische Informationen zu speichern.
  6. ACLs:
    • Konfiguriere Access Control Lists (ACLs), um den Zugriff auf sensible Attribute zu beschränken.

LDAP in Nextcloud einbinden

Die Integration von LDAP in Nextcloud ermöglicht eine nahtlose Benutzerverwaltung.
Bedenke: Die Admin-Anmeldedaten hast du beim einrichten des LDAP Services selbst festgelegt!
Hier sind die Schritte zur Einbindung:

  1. Installiere die LDAP-App in Nextcloud über den App-Store.
  2. Gehe zu „Einstellungen“ > „LDAP/AD-Integration“.
  3. Konfiguriere die Verbindung zum LDAP-Server:
  • Server: ldap://your-ldap-server
  • Port: 389 unverschlüsselt (oder 636 für LDAPS verschlüsselt)
  • Benutzer-DN: cn=admin,dc=example,dc=com
  • Passwort: Dein LDAP-Admin-Passwort
  1. Definiere die Basis-DN: dc=example,dc=com
  2. Konfiguriere die Benutzer- und Gruppenfilter:
  • Benutzerfilter: (&(objectClass=inetOrgPerson)(memberOf=cn=nextcloud-users,ou=groups,dc=example,dc=com))
  • Gruppenfilter: (&(objectClass=groupOfNames)(cn=nextcloud-*))

Teste die Verbindung und speichere die Einstellungen.
Dannach solltest du dich mit einem Benutzer deines LDAP Services anmelden können.
Bedenke, dass du dafür die Struktur und die Benutzer im LDAP importiert haben musst!


Benutzer-Initialpasswörter mit Python generieren (SSHA)

Hier ist ein Python-Skript, das SSHA-verschlüsselte Passwörter für LDAP-Benutzer generiert:

import os
import base64
import hashlib

def generate_ssha_password(password):
salt = os.urandom(4)
sha = hashlib.sha1(password.encode('utf-8'))
sha.update(salt)
digest = sha.digest()
b64_digest = base64.b64encode(digest + salt)
return "{SSHA}" + b64_digest.decode('utf-8')

# Beispielverwendung
password = "mein_sicheres_passwort"
ssha_password = generate_ssha_password(password)
print(f"SSHA-Passwort: {ssha_password}")

Dieses Skript erzeugt SSHA-Hashes, die du direkt in LDIF-Dateien für den Import in dein LDAP-Verzeichnis verwenden kannst.


SSHA-Passwörter in LDAP

SSHA (Salted Secure Hash Algorithm) ist eine Methode zur sicheren Speicherung von Passwörtern in LDAP-Verzeichnissen. Es handelt sich um eine Erweiterung des SHA-1-Algorithmus mit einem zusätzlichen Salt.Funktionsweise:

  1. Generierung:
    • Ein zufälliges Salt wird generiert (typischerweise 4-8 Bytes).
    • Das Passwort wird mit dem Salt kombiniert.
    • Der SHA-1-Hash wird über die Kombination aus Passwort und Salt berechnet.
    • Der resultierende Hash wird mit dem Salt konkateniert.
    • Das Ergebnis wird Base64-kodiert.
  2. Speicherung:
    • Im LDAP-Verzeichnis wird das Passwort als {SSHA}base64_encoded_hash_and_salt gespeichert.
  3. Authentifizierung:
    • Wenn ein Benutzer sein Passwort eingibt, extrahiert der LDAP-Server das Salt aus dem gespeicherten Hash.
    • Der Server kombiniert das eingegebene Passwort mit dem extrahierten Salt.
    • Ein neuer Hash wird aus dieser Kombination generiert.
    • Der neue Hash wird mit dem gespeicherten Hash verglichen.
  4. Sicherheit:
    • Das Salt verhindert, dass identische Passwörter den gleichen Hash erzeugen.
    • Rainbow-Table-Angriffe werden durch das Salt erschwert.
  5. Entschlüsselung:
    • SSHA-Passwörter werden nicht entschlüsselt. Stattdessen wird bei jeder Authentifizierung der oben beschriebene Prozess durchgeführt.
    • Es ist ein Einweg-Hashing-Verfahren, das keine Rückumwandlung in Klartext ermöglicht.

Beispiel eines SSHA-Passworts in LDAP:

textuserPassword: {SSHA}aaaa2bbbbbcccccdddddeeeeefffff=

Vorteile von SSHA:

  • Erhöhte Sicherheit gegenüber unsalted Hashes
  • Relativ schnelle Berechnung für Authentifizierungszwecke
  • Weit verbreiteter Standard in LDAP-Implementierungen

Es ist wichtig zu beachten, dass moderne Sicherheitsstandards noch stärkere Hashing-Algorithmen wie bcrypt, Argon2 oder PBKDF2 empfehlen, die speziell entwickelt wurden, um Brute-Force-Angriffe zu erschweren. Einige neuere LDAP-Implementierungen unterstützen diese fortschrittlicheren Methoden zusätzlich zu SSHA.


Nützliche Linux-Befehle für LDAP-Verwaltung

LDAP-Struktur importieren

ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f structure.ldif

Benutzer importieren

ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f users.ldif

Benutzer suchen

ldapsearch -x -LLL -b "dc=example,dc=com" "(uid=johndoe)"
ODER
ldapsearch -x -H ldap://LDAP-SERVER-IP -b "dc=example,dc=com" "(uid=USERNAME)"

Benutzer modifizieren

ldapmodify -x -D "cn=admin,dc=example,dc=com" -W -f modify_user.ldif

LDAP-Baum anzeigen

ldapsearch -x -LLL -b "dc=example,dc=com" -s sub "(objectclass=*)"
ODER
ODER
ldapsearch -x -H ldap://LDAP-SERVER-IP -b "dc=example,dc=com" "(objectClass=person)"

Benutzer löschen

ldapdelete -x -D "cn=admin,dc=example,dc=com" -W "uid=johndoe,ou=people,dc=example,dc=com"

Diese Befehle helfen dir bei der Verwaltung deines LDAP-Verzeichnisses.
Denk daran, "dc=example,dc=com" und andere Werte entsprechend deiner LDAP-Konfiguration anzupassen.


Anleitung für ‚openLDAP‘ und ‚NextCloud‘ auf Linux Ubuntu


Fazit

LDAP und insbesondere OpenLDAP sind mächtige Werkzeuge für die Benutzerverwaltung in Netzwerken jeder Größe. Mit dem richtigen Setup und einer durchdachten Struktur kann LDAP deine IT-Verwaltung erheblich vereinfachen.

Denk daran: Eine gute LDAP-Implementierung ist wie ein gut organisierter Werkzeugkasten – alles hat seinen Platz, und du findest schnell, was du brauchst. Also, ran an die Tasten und fang an, deinen LDAP-Service aufzubauen!

Hast du schon Erfahrungen mit LDAP gemacht? Welche Herausforderungen sind dir begegnet? Lass es uns in den Kommentaren wissen!


Verweise:
[1] https://www.fortinet.com/de/resources/cyberglossary/ldap-authentication
[2] https://www.elektronik-kompendium.de/sites/net/0905021.htm
[3] https://www.redhat.com/de/topics/security/what-is-ldap-authentication
[4] https://de.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol
[5] https://www.atera.com/de/blog/was-ist-ldap/
[6] https://contabo.com/blog/de/ldap-management-grundlagen/
[7] https://www.pingidentity.com/de/resources/identity-fundamentals/authentication-authorization-protocols/ldap.html
[8] https://www.ip-insider.de/was-ist-ldap-lightweight-directory-access-protocol-a-581204/
[9] https://nextberry.de/ldap-benutzer-und-gruppen-backend-in-nextcloud-integration-und-vorteile-fuer-unternehmen-und-privatnutzer/
[10] https://www.youtube.com/watch?v=cTomV_Mnr8E
[11] https://wiki.linuxmuster.net/community/anwenderwiki:nextcloud:nextcloud-ldap
[12] https://docs.linuxmuster.net/de/latest/external-services/nextcloud/authentication.html
[13] https://help.nextcloud.com/t/app-ldap-kann-ich-nicht-aktivieren/155107
[14] https://help.nextcloud.com/t/der-benutzer-backend-speicherort-ist-database-anstelle-ldap/149764
[15] https://contabo.com/blog/de/ldap-management-grundlagen/
[16] https://www.youtube.com/watch?v=4PFOeieaQHY

By w0lfzk1nd

I am not a god, a legend or something else. Just a guy that loves Computers and Wolves.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert