Benutzer-Werkzeuge

Webseiten-Werkzeuge


 [[anwenderwiki:scripting:ldapsearch]] 

LDAP-Abfragen mit ldapsearch und anderen Tools

Mit ldapsearch kann man einen Ldap-Server abfragen. Hilfreich ist dies etwa beim Anbinden einer externen Webanwendung an den LMN-Server, so kann man testen, ob der Server erreichbar ist und Abfragen von dem entsprechenden Server beantwortet. Auch beim Testen von Filtern und Benutzernamen samt zugehöriger Passwörter ist ldapsearch eine Hilfe. Und nicht zuletzt kann man mit ldapsearch natürlich auch das machen, wofür es eigentlich gedacht ist: Abfragen durchführen, zum Beispiel um skriptbasiert alle E-Mail-Adressen aus dem Ldap zu holen.

Auf dieser Seite wird die grundlegende Verwendung insbesondere mit einem LMN-Server erklärt, es finden sich Beispiele zur Filtern und eine Hilfestellung, wie man die zum Teil base64-kodierte Ausgabe von ldapsearch dekodieren kann.

Installation

Sofern das Tool noch fehlt, kann man es bei debianbasierten Systemen mit folgendem Befehl nachinstallieren:

sudo apt install ldap-utils

Grundlegende Parameter

Achtung, in diesem Abschnitt stehen keine funktionierenden Beispiele, nur Codeschnipsel!

Ldap-Server

Den zu kontaktierenden Ldap-Server gibt man mit der Option -H an:

ldapsearch -H "ldap://localhost"
ldapsearch -H "ldaps://server.meine-schule.de"

Im ersten Beispiel wird das einfache Ldap-Protokoll über Port 389 verwenden, im zweiten findet die Anfrage verschlüsselt per Ldaps über Port 636 statt.

Benutzerdaten – Bind-User

Je nach Konfiguration kann man den Server auch anonym abfragen (LMN 6.2) oder mit einen Benutzernamen („Bind-User“) samt Passwort (bei der LMN 7 nur mit Bind-User). Abhängig vom Benutzer hat man Zugriff auf unterschiedliche Teile des Ldap-Baumes.

Den Benutzernamen gibt man mit der Option -D an, das Passwort mit -w. Alternativ kann man auch mit -W ein Passwort interaktiv eingeben. Zusätzlich muss man mit -x diese einfache Authentifizierung einschalten:

LMN 6.2

ldapsearch -x -w ""
ldapsearch -x -w "geheim123!" -D "uid=username,ou=accounts,dc=meine-schule,dc=de"
ldapsearch -x -W -D "cn=admin,dc=meine-schule,dc=de"

Das erste Beispiel ist eine anonyme Abfrage, beim zweiten Beispiel wird ein normaler Useraccount verwendet und das Passwort direkt angegeben. Im dritten Beispiel wird der Datenbank-Administrator verwendet. Hier wird man nach dem Passwort gefragt – es steht in der Datei /etc/ldap/slapd.conf (Attribut „rootpw“).

LMN 7

Bei der LMN 7 kann man den LDAP nicht anonym abfragen. Hier gibt es den „global-binduser“, er hat Vollzugriff auf den gesamten Ldap-Baum. Sein Passwort steht in der Datei /etc/linuxmuster/.secret/global-binduser.

ldapsearch -x -w "geheim123!" -D "cn=global-binduser,ou=Management,ou=GLOBAL,dc=meine-schule,dc=de"
ldapsearch -x -W -D "cn=global-binduser,ou=Management,ou=GLOBAL,dc=meine-schule,dc=de"

Im ersten Beispiel wird das Passwort direkt übergeben, im zweiten wird man nach dem Passwort gefragt.

Es ist nicht zu empfehlen, wie im ersten Beispiel das Passwort im Klartext beim Befehl einzugeben. Stattdessen sollte man mit -y eine Datei angeben, in der das Passwort steht:

ldapsearch -x -y "/etc/linuxmuster/.secret/global-binduser" "cn=global-binduser,ou=Management,ou=GLOBAL,dc=meine-schule,dc=de"

Achtung, die Datei darf wirklich nur das Passwort enthalten, auch keinen Zeilenumbruch am Ende!

Search-Base

Die LDAP-Datenbank ist wie ein Baum aufgebaut. Die Search-Base gibt an, bei welcher Verzweigung die Suche beginnen soll. So kann man die Suche auf Teilbäume beschränken oder natürlich auch die gesamte Datenbank durchsuchen.

Hier ein paar Beispiele:

# Kompletter LDAP-Baum (LMN 6 und 7)
ldapsearch -b "dc=meine-schule,dc=de"

# Nur Gruppen suchen (LMN 6 - Klassen, Projekte ...)
ldapsearch -b "ou=groups,dc=meine-schule,dc=de"

# Nur Projekte suchen (LMN 7)
ldapsearch -b "ou=projects,ou=default-school,ou=schools,dc=meine-schule,dc=de"

Die Search-Base für die gesamte Datenbank hängt dabei von der bei der Installation verwendeten Domain ab. Die Beispiele hier beziehen sich auf die Domain „meine-schule.de“. Wenn der FQDN des Servers beispielsweise server.intern.meine-schule.de ist, dann wäre die Search-Base für die gesamte Datenbank dc=intern,dc=meine-schule,dc=de. Standard bei der LMN 7 ist dc=schule,dc=lan.

Bei einer bestehenden Installation kann man die Basis des LDAP-Baumes so herausfinden:

LMN 6: grep BASE /etc/ldap/ldap.conf LMN 7: samba-tool domain info 127.0.0.1 | grep Domain

Bei der LMN 7 muss man die Domain noch mit dc=… umschreiben.

Mit diesen Parametern können wir nun ldapsearch verwenden.

Filter

ldapsearch kennt zwei unterschiedliche Arten von Filtern: Suchfilter und Ausgabefilter. Mithilfe von Suchfiltern gibt man an, welche Objekte gefunden werden sollen, z. B. ein bestimmter User, alle Mitglieder der 10a oder auch „nur Gruppen“. Mit Ausgabefiltern kann man die Ausgabe auf bestimmte Attribute beschränken, beispielsweise von allen Usern nur den Loginnamen ausgeben.

Suchfilter

Suchfilter werden in Klammern angegeben:

ldapsearch ... "(uid=mu*)"

Hier werden nur Objekte gefunden, bei denen die uid mit „mu“ beginnt.

Man kann die folgenden logischen Operatoren verwenden: & für „und“, | für „oder“ und ! für „nicht“. Die Operatoren werden dabei vorangestellt:

ldapsearch ... "(&(gidNumber=10000)(uid=mu*))"

Nun werden bei der LMN 6 nur noch Lehreraccounts gefunden (Gruppe 10000), die mit „mu“ beginnen.

Ausgabefilter

Um nur einzelne Attribute auszugeben, zählt man sie ganz zuletzt des Befehls auf:

ldapsearch ... "(gidNumber=10000)" uid cn

Hier werden von allen Lehrerinnen und Lehrern Name und Login ausgegeben.

Beispiele

Alle Beispiele hier beziehen sich auf die LDAP-Base dc=schule,dc=lan – dies muss man gegebenenfall anpassen

LMN 6.2

Den gesamten LDAP-Baum ausgeben:

ldapsearch -x -w "" -H "ldap://localhost" -b "dc=schule,dc=lan"

Alle Gruppen ausgeben (komplett):

ldapsearch -x -w "" -H "ldap://localhost" -b "ou=groups,dc=schule,dc=lan"

Alle Gruppen und ihre Anzahl ausgeben (nur die Namen):

ldapsearch -x -w "" -H "ldap://localhost" -b "ou=groups,dc=schule,dc=lan" | grep 'numE\|^cn'

Alle User in „Accounts“ und ihre Anzahl ausgeben (diesmal den vollen dn):

ldapsearch -x -w "" -H "ldap://localhost" -b "ou=accounts,dc=schule,dc=lan" | grep 'numE\|^dn'

Alle Informationen zu einem User ausgeben:

ldapsearch -x -w "" -H "ldap://localhost" -b "dc=schule,dc=lan" "(uid=loginname)"
ldapsearch -x -W -H "ldap://localhost" -b "dc=schule,dc=lan" -D "cn=admin,dc=schule,dc=lan" "(uid=loginname)"

Man beachte die unterschiedliche Ausgabe: Bei einer anonymen Abfrage fehlen z. B. die Passwort-Hashes.

LMN 7

Bei der LMN 7 muss man einen Binduser angeben. Der „global-binduser“ hatt Vollzugriff, sein Passwort (im Beispiel geheim123!) muss man anpassen. Man findet es in der Datei /etc/linuxmuster/.secret/global-binduser.

Den gesamten LDAP-Baum ausgeben:

ldapsearch -x -w "geheim123!" -H "ldap://localhost" -D "cn=global-binduser,ou=Management,ou=GLOBAL,dc=schule,dc=lan" -b "dc=schule,dc=lan"

Alle Klassen ausgeben (komplett):

ldapsearch -x -w "geheim123!" -H "ldap://localhost" -D "cn=global-binduser,ou=Management,ou=GLOBAL,dc=schule,dc=lan" -b "ou=students,ou=default-school,ou=schools,dc=schule,dc=lan" "(objectClass=group)"

Alle Projekte und ihre Anzahl ausgeben (nur die Namen):

ldapsearch -x -w "geheim123!" -H "ldap://localhost" -D "cn=global-binduser,ou=Management,ou=GLOBAL,dc=schule,dc=lan" -b "ou=projects,ou=default-school,ou=schools,dc=schule,dc=lan" "(objectClass=group)"  | grep '^cn\|numE'

Alle SuS und ihre Anzahl ausgeben (diesmal den vollen dn):

ldapsearch -x -w "geheim123!" -H "ldap://localhost" -D "cn=global-binduser,ou=Management,ou=GLOBAL,dc=schule,dc=lan" -b "ou=students,ou=default-school,ou=schools,dc=schule,dc=lan" "(objectClass=user)" | grep '^dn\|numE'

Alle LuL und ihre Anzahl ausgeben (diesmal den vollen dn):

ldapsearch -x -w "geheim123!" -H "ldap://localhost" -D "cn=global-binduser,ou=Management,ou=GLOBAL,dc=schule,dc=lan" -b "ou=teachers,ou=default-school,ou=schools,dc=schule,dc=lan" "(objectClass=user)" | grep '^dn\|numE'

Ausgabe dekodieren (LMN 7)

Bei der LMN 7 werden Werte, die Umlaute enthalten oder aus anderen Gründen nicht oder nicht eindeutig auf der Konsole ausgegeben werden können (z. B. Bilder – es reicht aber auch schon ein führendes Leerzeichen) im Format Base64 kodiert.

Das Skript decode-ldapsearch dekodiert bei dieser Ausgabe:

  • Umlaute in Namen und anderen Feldern
  • Windows-/Samba SIDs (Feld objectSid)
  • Windows-/Samba GUIDs (Feld objectGUID, Ausgabe als HEX-Wert)
  • DNS-Einträge (Feld dnsRecord)
  • Sonstige nicht-darstellbare Felder als HEX-Wert (dnsProperty, auditingPolicy)

Installation

Nach dem Herunterladen installiert man das Skript wie folgt:

unzip decode-ldapsearch.zip
sudo cp decode-ldapsearch /usr/local/bin
sudo chmod 0755 /usr/local/bin/decode-ldapsearch

Verwendung

Man verwendet das Skript als Pipe für ldapsearch, also zum Beispiel:

ldapsearch -x -w "geheim123!" -H "ldap://localhost" -D "cn=global-binduser,ou=Management,ou=GLOBAL,dc=schule,dc=lan" -b "dc=schule,dc=lan" | decode-ldapsearch

Weitere Tools

LMN 6

Schnell und einfach zu bedienen sind:

smbldap-usershow username
smbldap-groupshow gruppenname
 [[anwenderwiki:scripting:ldapsearch]] anwenderwiki/scripting/ldapsearch.txt · Zuletzt geändert: 2020/09/17 05:31 von jrichter