Archiv der Kategorie: LDAP

Active Directory LDAPS Zugriff mit ldapsearch unter Linux

Mit dem Befehl ldapsearch kann man LDAP-Abfragen an einen LDAP-Server stellen und damit Verzeichnisinformationen ermitteln. Da die meisten Active Directory keine anonyme Anfragen erlauben, benötigt man ein Dienstkonto im Active Directory, das die nötigen Rechte für die erforderlichen LDAP-Anfragen besitzt.

Der grundsätzliche Syntax einer LDAP-Abfrage mit ldapsearch lautet:

ldapsearch -x -D „USERNAME@ADDOMAIN“ -w „DIENSTKONTOPASSWORT“ -b „searchbase“ -H LDAPSERVERURL „FILTER“ PROPERTY1 PROPERTY2 PROPERTYN

-x = Use simple authentication instead of SASL
-D = Use the Distinguished Name binddn to bind to the LDAP directory
-w = Use passwd as the password for simple authentication
-b = Use searchbase as the starting point for the search instead of the default
-H = Specify URI(s) referring to the ldap server(s)

FILTER = Die eigentliche LDAP-Abfrage
PROPERTYX = Propertys der Objekte, die im Ergebnis angezeigt werden sollen

Beispiel:

ldapsearch -x -D „ldap@domain.local“ -w „badladappasswort“ -b „dc=domain,dc=local“ -H „ldaps://dc.domain.local:636“ „(sn=USERNAME)“ description dn

Obige Abfrage ermittelt die description und den dn des Accounts USERNAME.

Um bei ldapsearch nicht immer alle Parameter für die Verbindung angeben zu müssen, kann man in seinem Homeverzeichnis eine Datei namens .ldaprc anlegen.

#Beispielinhalt:
URI ldaps://dc.domain.local:636 #Liste mit LDAP Servern (Parameter -H)
BASE dc=domain,dc=local #Search Base DN (Parameter -b)
BINDDN ldap@domain.local #Dienstkonto für die LDAP Verbindung (Parameter -D)
TLS_CACERT /etc/ssl/certs/rootca.pem #CA Zertifikat der Root CA des DC SSL Zertifikats

Um nicht jedes Mal das Passwort für die Verbindung LDAP-Verbindung angeben zu müssen, kann man eine Datei mit dem Passwort erstellen und diese bei ldapsearch mit der Option -y angeben.

Die Passwortdatei muss man zwingend ohne Steuerzeichen erstellen. Dies gelingt z.B. mit dem Befehl echo und dem Parameter -n.

echo -n DIENSTKONTOPASSWORT > .ldappasswd

So sieht nun der verkürzte Syntax der ldapsearch Anfrage aus:

ldapsearch -x -y ./.ldappasswd „(sn=USERNAME)“ description dn

ldapsearch -y schlägt mit der Fehlermeldung „ldap_bind: Invalid credentials (49)“ fehl

Bei dem Programm ldapsearch kann man mit der Option -y eine Datei angeben, aus der ldapsearch das Passwort für die Verbindung zum LDAP Server ausliest. Obwohl das Passwort in der Datei korrekt war, lieferte ldapsearch immer den Fehler „ldap_bind: Invalid credentials (49)“. Nach einigem Suchen fand ich die Lösung.

ldapsearch kommt nicht damit zurecht, wenn ein Zeilenendzeichen oder Zeilenumbruch die Zeile in der Passwortdatei begrenzt. Diese werden bei der Authentifizierung als Passwortbestandteil gesehen, was die Authentifizierung natürlich fehlschlagen lässt.

echo PASSWORT > .ldappasswd

erzeugt eine Datei, die die Fehlermeldung “ldap_bind: Invalid credentials (49)” liefert, wenn man sie mit der ldapsearch -y Option benutzt, obwohl PASSWORT das korrekte Passwort für die LDAP Verbindung ist.

Die Lösung für das Problem ist das Löschen der Steuerzeichen mit dem tr Kommando.

echo PASSWORT | tr -d ‚\n\r‘ > .ldappasswd

Alternativ kann man auch die -n Option (do not output the trailing newline) bei dem Echo Befehl benutzen:

echo -n PASSWORT > .ldappasswd

Nun funktioniert die Datei mit der ldapsearch Option -y ohne Fehlermeldung.