LDAP (Lightweight Directory Access Protocol) ist ein standardisiertes Netzwerkprotokoll zur Abfrage und Verwaltung von Informationen in einem [[verzeichnisdienst|Verzeichnisdienst]]. Es wurde entwickelt, um den Zugriff auf Verzeichnisse effizienter und plattformunabhängig zu gestalten. LDAP wird häufig für die Verwaltung von Benutzerkonten, Authentifizierung, Autorisierung und allgemeine Verzeichnisinformationen verwendet.
[[active_directory|Active Directory]] ist die Windows Implementierung von LDAP. OpenLDAP ist die Linux Implementierung von LDAP.
JExplorer ist ein LDAP Browser in [[coding:java|Java]].
LDAP verwendet das Client-Server-Modell, bei dem ein LDAP-Client Anfragen an einen LDAP-Server sendet und der Server die entsprechenden Antworten zurückgibt. Der Server speichert die Daten in einem hierarchischen Verzeichnisbaum, der als Directory Information Tree (DIT) bezeichnet wird. Jeder Eintrag im Baum wird als Distinguished Name (DN) bezeichnet und enthält Attribute, die Informationen über den Eintrag enthalten.
Die LDAP-Architektur besteht aus folgenden Komponenten:
* **LDAP-Client**: Ein LDAP-Client ist eine Anwendung oder ein System, das LDAP-Anfragen an einen LDAP-Server sendet. Der Client kann verschiedene Operationen wie das Suchen, Hinzufügen, Ändern oder Löschen von Einträgen im Verzeichnis durchführen.
* **LDAP-Server**: Der LDAP-Server ist die Softwarekomponente, die die LDAP-Anfragen empfängt, verarbeitet und die entsprechenden Antworten zurücksendet. Der Server speichert die Verzeichnisdaten und ermöglicht den Zugriff und die Verwaltung dieser Daten über das LDAP-Protokoll.
* **Verzeichnis**: Das Verzeichnis enthält die gespeicherten Daten, die über LDAP abgefragt und verwaltet werden können. Die Daten sind in einem hierarchischen Baumstrukturformat organisiert, wobei jeder Eintrag im Baum als Distinguished Name (DN) identifiziert wird.
* **Schema**: Das Schema definiert die Struktur und die Attribute, die für die Einträge im Verzeichnis verwendet werden können. Es legt fest, welche Informationen gespeichert werden können und welche Attribute erforderlich oder optional sind.
LDAP unterstützt verschiedene Operationen zum Abfragen und Verwalten des Verzeichnisses. Hier sind einige der grundlegenden Operationen, die mit LDAP durchgeführt werden können:
* **Bind**: Der Bind-Vorgang wird verwendet, um sich beim LDAP-Server zu authentifizieren und eine Sitzung zu etablieren. Der Client sendet seine Anmeldeinformationen an den Server, der dann überprüft, ob sie gültig sind.
* **Search**: Die Search-Operation wird verwendet, um nach Einträgen im Verzeichnis zu suchen, die bestimmte Kriterien erfüllen. Der Client gibt die Suchkriterien an, wie z.B. den DN-Pfad, Attribute oder Filter, um die gewünschten Einträge zu finden.
* **Add**: Die Add-Operation wird verwendet, um einen neuen Eintrag im Verzeichnis hinzuzufügen. Der Client sendet die Daten für den neuen Eintrag an den Server, der diese Informationen validiert und den Eintrag entsprechend erstellt.
* **Modify**: Die Modify-Operation wird verwendet, um vorhandene Einträge im Verzeichnis zu ändern. Der Client gibt die zu ändernden Attribute und ihre neuen Werte an, und der Server aktualisiert den Eintrag entsprechend.
* **Delete**: Die Delete-Operation wird verwendet, um einen Eintrag aus dem Verzeichnis zu löschen. Der Client gibt den DN des zu löschenden Eintrags an, und der Server entfernt den Eintrag aus dem Verzeichnis.
[[https://www.forumsys.com/2022/05/10/online-ldap-test-server/|Online LDAP Testserver]]
{{domain-tree-forrest.jpg}}
=====Tools=====
* adcli info servername
* samba-tool spn list servername$
* ldap-utils (ldapsearch, ldapadd, ldapremove,..)
====ldapsearch====
Objekte suchen
ldapsearch -x -h ldap://dc.domain.local -D "administrator@domain.local" -w "password" -b "ou=users,dc=mydomain,dc=com" -s sub "(objectClass=user)"
# sub: search filter for e.g (cn=Em Brain) (mail=*) (sn=*)
====ldapadd====
Objekte erstellen
# new_user.ldif
dn: cn=Max Mustermann,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
cn: Max Mustermann
sn: Mustermann
givenName: Max
mail: max.mustermann@example.com
userPassword: somesecretpassword
ldapadd -x -H ldap://dc.dom.local -D "administrator" -w "password" -f new_user.ldif
====ldapmodify====
Objekte bearbeiten
ldapmodify -x -H ldap://dc.dom.local -D -w -f template.ldif
===add attribute===
dn: cn=Max Mustermann,ou=Users,dc=example,dc=com
changetype: modify
add: title
title: IT Administrator
===edit attribute===
dn: cn=Max Mustermann,ou=Users,dc=example,dc=com
changetype: modify
replace: telephoneNumber
telephoneNumber: +49 123 456789
===delete object===
dn: ou=othergroup,dc=dom,dc=local
changetype: delete
=====PHP LDAP Funktionen=====
ldap_8859_to_t61 -- Übersetzt 8859 Zeichen nach t61 Zeichen
ldap_add -- Einträge einem LDAP Verzeichnis hinzufügen
ldap_bind -- Bindung zu einem LDAP Verzeichnis
ldap_close -- Verbindung zum LDAP Server schliessen
ldap_compare -- Vergleicht gefundenen Wert eines Merkmal in einem Eintrag, der durch Angabe von dn bestimmt wird.
ldap_connect -- Verbindung zu einem LDAP Server
ldap_count_entries -- Zählt die Anzahl der Einträge bei einer Suche
ldap_delete -- Löscht einen Eintrag aus einem Verzeichnis
ldap_dn2ufn -- Konvertiert DN in ein benutzerfreundliches Namensformat
ldap_err2str -- Konvertiert eine LDAP Fehlernummer in einen Fehlertext
ldap_errno -- Liefert die LDAP Fehlernummer des letzten LDAP Kommandos
ldap_error -- Liefert die LDAP Fehlermeldung des letzten LDAP Kommandos
ldap_explode_dn -- Aufteilung eines DN in seine Bestandteile
ldap_first_attribute -- Liefert das erste Merkmal
ldap_first_entry -- Liefert die Kennung des ersten Ergebnisses
ldap_first_reference -- Liefert die erste Referenz
ldap_free_result -- Gibt den belegten Speicher wieder frei
ldap_get_attributes -- Liefert Merkmale eines Suchergebnis-Eintrags
ldap_get_dn -- Liefert den DN eines Ergebnis-Eintrags
ldap_get_entries -- Liefert alle Ergebnis-Einträge
ldap_get_option -- Liefert den aktuellen Wert für eine gegebene Option
ldap_get_values -- Liefert alle Werte eines Ergebnis-Eintrags
ldap_get_values_len -- Liefert alle binären Werte eines Ergebnis-Eintrags
ldap_list -- Einstufige Suche
ldap_mod_add -- Hinzufügen von Merkmalswerten zu aktuellen Merkmalen
ldap_mod_del -- Löschen von Merkmalswerten aktueller Merkmale
ldap_mod_replace -- Ersetzen von Merkmalswerten mit neuen Merkmalswerten
ldap_modify -- Verändern eines LDAP-Eintrags
ldap_next_attribute -- Liefert das nächste Merkmal im Ergebnis
ldap_next_entry -- Liefert den nächsten Eintrag des Ergebnisses
ldap_next_reference -- Holt die nächste Referenz
ldap_parse_reference -- Gewinnt Informationen aus einem Referenz-Eintrag
ldap_parse_result -- Gewinnt Informationen aus einem Ergebnis
ldap_read -- Lesen eines Eintrags
ldap_rename -- Verändert den Namen eines Eintrags
ldap_search -- Suche im LDAP Baum
ldap_set_option -- Setzt den Wert der gegebenen Option
ldap_set_rebind_proc -- Set a callback function to do re-binds on referral chasing.
ldap_sort -- Sortiert LDAP Ergebniseinträge
ldap_start_tls -- Startet TLS
ldap_t61_to_8859 -- Übersetzt t61 Zeichen nach 8859 Zeichen
ldap_unbind -- Unbind von einem LDAP Verzeichnis
=====Links=====
* https://www.selflinux.org/selflinux/html/ldap04.html
* https://www.openldap.org/doc/
* https://www.ip-insider.de/was-ist-ldap-lightweight-directory-access-protocol-a-581204/
* https://docs.huihoo.com/ubuntu/11.10/serverguide/openldap-server.html
* https://www.youtube.com/watch?v=NcvIqK4G_fQ
* https://www.youtube.com/watch?v=kSCx3tzC0cA