Verwalten und Verwenden von LDAP-Servern mit OpenLDAP-Dienstprogrammen

Einführung

Die Verwaltung von LDAP-Systemen scheint schwierig zu sein, wenn Sie die verfügbaren Tools und die für LDAP erforderlichen Informationen und Methoden nicht genau kennen. In diesem Handbuch wird gezeigt, wie die vom OpenLDAP-Team entwickelten LDAP-Tools für die Interaktion mit einem LDAP-Verzeichnisserver verwendet werden.

Voraussetzungen

Zu Beginn sollten Sie Zugriff auf ein System haben, auf dem OpenLDAP installiert und konfiguriert ist. Sie erfahren, wie Sie einen OpenLDAP-Serverhere einrichten. Sie sollten mit der grundlegenden Terminologie vertraut sein, die beim Arbeiten mit einem LDAP-Verzeichnisdienst verwendet wird. This guide können verwendet werden, um sich mit diesen Themen vertraut zu machen.

Installieren der Tools

Die oben genannten Voraussetzungen setzen voraus, dass Sie bereits Zugriff auf ein LDAP-System haben, die in diesem Handbuch beschriebenen OpenLDAP-Tools jedoch möglicherweise noch nicht installiert sind.

Auf einem Ubuntu- oder Debian-System können Sie diese Tools über dieapt-Repositorys installieren. Aktualisieren Sie Ihren lokalen Paketindex und installieren Sie ihn, indem Sie Folgendes eingeben:

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

Unter CentOS oder Fedora können Sie die entsprechenden Dateien mithilfe vonyum abrufen. Installieren Sie sie, indem Sie Folgendes eingeben:

sudo yum install openldap-clients

Sobald Sie die richtigen Pakete installiert haben, fahren Sie unten fort.

Herstellen einer Verbindung mit der LDAP-Instanz

Die meisten OpenLDAP-Tools sind äußerst flexibel und verzichten auf eine präzise Befehlsstruktur, um mit Systemen in verschiedenen Rollen interagieren zu können. Aus diesem Grund muss ein Benutzer eine Vielzahl von Argumenten auswählen, nur um das Minimum auszudrücken, das zum Herstellen einer Verbindung mit einem LDAP-Server erforderlich ist.

In diesem Abschnitt konzentrieren wir uns darauf, die Argumente zu konstruieren, die für die Kontaktaufnahme mit dem Server erforderlich sind, abhängig von der Art der Operation, die Sie ausführen möchten. Die hier diskutierten Argumente werden in einer Vielzahl von Tools verwendet, aber wir werdenldapsearch zu Demonstrationszwecken verwenden.

Angeben des Servers

Für die OpenLDAP-Tools müssen Sie für jeden Vorgang eine Authentifizierungsmethode und einen Serverstandort angeben. Verwenden Sie zum Angeben des Servers das Flag-H, gefolgt vom Protokoll und dem Netzwerkspeicherort des betreffenden Servers.

Für eine einfache, unverschlüsselte Kommunikation lautet das Protokollschemaldap:// wie folgt:

ldapsearch -H ldap://server_domain_or_IP . . .

Wenn Sie mit einem lokalen Server kommunizieren, können Sie den Serverdomänennamen oder die IP-Adresse weglassen (das Schema muss noch angegeben werden).

Wenn Sie LDAP über SSL verwenden, um eine Verbindung zu Ihrem LDAP-Server herzustellen, möchten Sie stattdessen das Schemaldaps://verwenden (beachten Sie, dass dies eine veraltete Methode ist. Das OpenLDAP-Projekt empfiehlt stattdessen die Verwendung eines STARTTLS-Upgrades auf dem normalen LDAP-Port. Erfahren Sie, wie Sie dies einrichtenhere):

ldapsearch -H ldaps://server_domain_or_IP . . .

Diese Protokolle setzen den Standardport voraus (389 für herkömmliches LDAP und636 für LDAP über SSL). Wenn Sie einen nicht standardmäßigen Port verwenden, müssen Sie diesen am Ende mit einem Doppelpunkt und der Portnummer hinzufügen.

Um eine Verbindung zu einem LDAP-Verzeichnis auf dem Server herzustellen, den Sie über Linux IPC (Interprozesskommunikation) abfragen, können Sie das Protokollldapi://verwenden. Dies ist sicherer und für einige Verwaltungsaufgaben erforderlich:

ldapsearch -H ldapi:// . . .

Da dasldapi-Schema eine lokale Verbindung erfordert, müssen wir hier niemals einen Servernamen angeben. Wenn Sie jedoch den Socket-Dateispeicherort in der LDAP-Serverkonfiguration geändert haben, müssen Sie den neuen Socket-Speicherort als Teil der Adresse angeben.

Anonyme Bindung

LDAP erfordert, dass sich Clients identifizieren, damit der Server die Zugriffsebene zum Gewähren von Anforderungen bestimmen kann. Dies funktioniert mithilfe eines LDAP-Mechanismus namens "Bindung", der im Grunde genommen nur ein Begriff für die Zuordnung Ihrer Anforderung zu einer bekannten Sicherheitseinheit ist. Es gibt drei verschiedene Authentifizierungstypen, die LDAP versteht.

Der allgemeinste Authentifizierungstyp, den ein Client verwenden kann, ist eine anonyme Bindung. Dies ist so ziemlich das Fehlen einer Authentifizierung. LDAP-Server können bestimmte Vorgänge als für jedermann zugänglich einstufen (normalerweise ist die öffentlich zugängliche DIT für anonyme Benutzer als schreibgeschützt konfiguriert). Wenn Sie eine anonyme Bindung verwenden, stehen Ihnen diese Vorgänge zur Verfügung.

Die OpenLDAP-Tools setzen standardmäßig die SASL-Authentifizierung voraus (wir werden dies gleich diskutieren). Um eine anonyme Bindung zu ermöglichen, müssen wir das Argument-xangeben. In Kombination mit der Serverspezifikation sieht dies ungefähr so ​​aus:

ldapsearch -H ldap://server_domain_or_IP -x

Wenn Sie dies eingeben, ohne zusätzliche Argumente anzugeben, sollten Sie Folgendes erhalten:

Ausgabe für ldapsearch mit anonymer Bindung

# extended LDIF
#
# LDAPv3
# base <> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

Dies besagt, dass das Tool nicht gefunden hat, wonach wir gesucht haben. Da wir keine Abfrageparameter angegeben haben, wird dies erwartet, aber es zeigt uns, dass unsere anonyme Bindung vom Server akzeptiert wurde.

Einfache Authentifizierung

Die zweite Methode zur Authentifizierung bei einem LDAP-Server ist eine einfache Bindung. Eine einfache Bindung verwendet einen Eintrag auf dem LDAP-Server, um die Anforderung zu authentifizieren. Der DN (Distinguished Name) des Eintrags fungiert als Benutzername für die Authentifizierung. Innerhalb des Eintrags definiert ein Attribut ein Passwort, das bei der Anfrage angegeben werden muss.

Suchen des DIT-Stammeintrags und der RootDN-Bindung

Zur Authentifizierung mithilfe der einfachen Authentifizierung müssen Sie das übergeordnete Element oben in der DIT-Hierarchie kennen, das als Stamm-, Basis- oder Suffixeintrag bezeichnet wird und unter dem alle anderen Einträge platziert sind. Sie müssen auch einen DN kennen, an den Sie binden möchten.

In der Regel wird während der Installation des LDAP-Servers eine erste DIT eingerichtet und konfiguriert, die einen Verwaltungseintrag namens rootDN und ein Kennwort enthält. Zu Beginn ist dies der einzige DN, der für Bindungen konfiguriert ist.

Wenn Sie den Stammeintrag des LDAP-Servers, zu dem Sie eine Verbindung herstellen, nicht kennen, können Sie einen speziellen „Meta“ -Eintrag außerhalb des normalen LDAP-DIT nach Informationen zu den ihm bekannten DIT-Stammeinträgen abfragen (dies wird als Stamm-DSE bezeichnet). . Sie können diesen Eintrag nach den DIT-Namen abfragen, indem Sie Folgendes eingeben:

ldapsearch -H ldap://server_domain_or_IP -x -LLL -s base -b "" namingContexts

Der LDAP-Server sollte die ihm bekannten Stammeinträge zurückgeben, die ungefähr so ​​aussehen:

LDAP-Stammeintragsergebnisse

dn:
namingContexts: dc=example,dc=com

Der hervorgehobene Bereich ist die Wurzel des DIT. Wir können dies verwenden, um nach dem Eintrag zu suchen, an den gebunden werden soll. Der Administratoreintrag verwendet normalerweise die ObjektklassesimpleSecurityObject, um die Möglichkeit zu erhalten, ein Kennwort im Eintrag festzulegen. Damit können wir nach Einträgen mit dieser Klasse suchen:

ldapsearch -H ldap://server_domain_or_IP -x -LLL -b "dc=example,dc=com" "(objectClass=simpleSecurityObject)" dn

Dadurch erhalten Sie eine Liste der Einträge, die diese Klasse verwenden. Normalerweise gibt es nur einen:

simpleSecurityObject-Suchergebnisse

dn: cn=admin,dc=example,dc=com

Dies ist das rootDN-Konto, an das wir binden können. Sie sollten während der Installation des Servers ein Kennwort für dieses Konto konfiguriert haben. Wenn Sie das Passwort nicht kennen, können Siethis guide folgen, um das Passwort zurückzusetzen.

Durchführen der Bindung

Sobald Sie einen Eintrag und ein Kennwort haben, können Sie während Ihrer Anforderung eine einfache Bindung ausführen, um sich beim LDAP-Server zu authentifizieren.

Auch hier müssen wir den LDAP-Serverstandort angeben und das-x-Flag angeben, um anzuzeigen, dass wir die SASL-Authentifizierung nicht verwenden möchten. Um die eigentliche Bindung durchzuführen, müssen wir das Flag-D verwenden, um den DN anzugeben, an den gebunden werden soll, und ein Kennwort mit dem Befehl-w oder-W angeben. Mit der Option-w können Sie als Teil des Befehls ein Kennwort eingeben, während Sie mit der Option-W zur Eingabe des Kennworts aufgefordert werden.

Eine Beispielanforderung, die an den rootDN gebunden ist, sieht folgendermaßen aus:

ldapsearch -H ldap://server_domain_or_IP -x -D "cn=admin,dc=example,dc=com" -W

Wir sollten dasselbe Ergebnis wie bei unserer anonymen Bindung erhalten, was darauf hinweist, dass unsere Anmeldeinformationen akzeptiert wurden. Durch das Binden an einen Eintrag erhalten Sie häufig zusätzliche Berechtigungen, die über eine anonyme Bindung nicht verfügbar sind. Durch das Binden an den rootDN erhalten Sie unabhängig von den Zugriffskontrollen Lese- / Schreibzugriff auf die gesamte DIT.

SASL-Authentifizierung

SASL steht für einfache Authentifizierung und Sicherheitsschicht. Es ist ein Framework für die Verknüpfung von Authentifizierungsmethoden mit Protokollen, um ein flexibles Authentifizierungssystem bereitzustellen, das nicht an eine bestimmte Implementierung gebunden ist. Sie können diewikipedia page überprüfen, um mehr über die verschiedenen verfügbaren Methoden zu erfahren.

Ihr LDAP-Server unterstützt wahrscheinlich nur einen Teil der möglichen SASL-Mechanismen. Um herauszufinden, welche Mechanismen dies zulässt, können Sie Folgendes eingeben:

ldapsearch -H ldap:// -x -LLL -s base -b "" supportedSASLMechanisms

Die angezeigten Ergebnisse unterscheiden sich je nach dem Schema, mit dem Sie die Verbindung hergestellt haben. Für das unverschlüsselteldap://-Schema erlauben die meisten Systeme standardmäßig Folgendes:

ldap:// supportedSASLMechanisms

dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5

Wenn Sie dasldapi://-Schema verwenden, das eine sichere Interprozesskommunikation verwendet, haben Sie wahrscheinlich eine erweiterte Auswahlliste:

ldapsearch -H ldapi:// -x -LLL -s base -b "" supportedSASLMechanisms

ldapi:// supportedSASLMechanisms

dn:
supportedSASLMechanisms: DIGEST-MD5
supportedSASLMechanisms: EXTERNAL
supportedSASLMechanisms: NTLM
supportedSASLMechanisms: CRAM-MD5
supportedSASLMechanisms: LOGIN
supportedSASLMechanisms: PLAIN

Das Konfigurieren der meisten SASL-Authentifizierungsmethoden kann einige Zeit in Anspruch nehmen, weshalb wir hier nicht auf viele Details eingehen. Während die SASL-Authentifizierung im Allgemeinen nicht in den Geltungsbereich dieses Artikels fällt, sollten wir über dieEXTERNAL-Methode sprechen, die für dasldapi://-Schema verfügbar ist.

Der MechanismusEXTERNALgibt an, dass Authentifizierung und Sicherheit auf andere Weise mit der Verbindung verbunden sind. Beispielsweise kann es mit SSL verwendet werden, um Verschlüsselung und Authentifizierung bereitzustellen.

Am häufigsten wird es mit derldapi://-Schnittstelle mit den Root- odersudo-Benutzern verwendet. Daldapi:// Unix-Sockets verwendet, kann der Benutzer, der die Anforderung initiiert, abgerufen und zur Authentifizierung für bestimmte Vorgänge verwendet werden. Das DIT, das LDAP für die Konfiguration verwendet, verwendet diesen Mechanismus, um den Root-Benutzer zum Lesen und Ändern von LDAP zu authentifizieren. Diese Anfragen sehen ungefähr so ​​aus:

sudo ldapsearch -H ldapi:// -Y EXTERNAL . . .

Dies wird verwendet, um die LDAP-Konfiguration zu ändern, die normalerweise in einem DIT gespeichert wird, beginnend mit dem Stammeintrag voncn=config.

Einrichten einer .ldaprc-Datei

Wir haben die Verbindungsinformationen bisher hauptsächlich in der Befehlszeile angegeben. Sie können sich jedoch die Eingabe ersparen, indem Sie einige der allgemeinen Verbindungswerte in eine Konfigurationsdatei einfügen.

Die globale Client-Konfigurationsdatei befindet sich bei/etc/ldap/ldap.conf. Sie möchten jedoch hauptsächlich Änderungen an der Konfigurationsdatei Ihres Benutzers hinzufügen, die sich in Ihrem Ausgangsverzeichnis bei~/.ldaprc befindet. Erstellen und öffnen Sie eine Datei mit diesem Namen in Ihrem Texteditor:

nano ~/.ldaprc

Im Inneren sind die Grundeinstellungen, die Sie wahrscheinlich konfigurieren möchten,BASE,URI undBINDDN:

  • BASE: Der Standard-Basis-DN, mit dem der Eintrag angegeben wird, bei dem die Suche beginnen soll. Dies wird überschrieben, wenn in der Befehlszeile eine andere Suchbasis angegeben ist (mehr dazu im nächsten Abschnitt).

  • URI: Die Adresse, unter der der LDAP-Server erreichbar ist. Dies sollte ein Schema (ldap für reguläres LDAP,ldaps für LDAP über SSL undldapi für LDAP über einen IPC-Socket) gefolgt von Name und Port des Servers enthalten. Der Name kann weggelassen werden, wenn sich der Server auf demselben Computer befindet, und der Port kann weggelassen werden, wenn der Server auf dem Standardport für das ausgewählte Schema ausgeführt wird.

  • BINDDN: Gibt den Standard-LDAP-Eintrag an, an den gebunden werden soll. Dies wird verwendet, um die "Konto" -Informationen für den Zugriff bereitzustellen, den Sie verwenden möchten. Sie müssen weiterhin ein Kennwort in der Befehlszeile angeben.

Dies kümmert sich um die einfachen Authentifizierungsinformationen. Wenn Sie die SASL-Authentifizierung verwenden, überprüfen Sieman ldap.conf, um die Optionen zum Konfigurieren der SASL-Anmeldeinformationen anzuzeigen.

Wenn der Basiseintrag unseres LDAPdc=example,dc=com ist, sich der Server auf dem lokalen Computer befindet und wir diecn=admin,dc=example,dc=com zum Binden verwenden, haben wir möglicherweise eine~/.ldaprc-Datei, die folgendermaßen aussieht:

~/.ldaprc

BASE    dc=example,dc=com
URI     ldap://
BINDDN  cn=admin,dc=example,dc=com

Auf diese Weise können wir eine einfache Suche durchführen, indem wir nur die Nicht-SASL-Authentifizierung angeben und das Kennwort angeben, das dem Administratoreintrag zugeordnet ist. Dies würde eine vollständige Teilbaumsuche des angegebenen Standard-Basis-DN ermöglichen:

ldapsearch -x -w password

Dies kann dazu beitragen, die Verbindungsoptionen für "Boilerplate" zu verkürzen, wenn Sie die LDAP-Dienstprogramme verwenden. In diesem Handbuch werden die Verbindungsinformationen explizit in die Befehle aufgenommen. Wenn Sie die Befehle ausführen, können Sie jedoch jeden Teil entfernen, den Sie in Ihrer Konfigurationsdatei angegeben haben.

Verwenden von ldapsearch zum Abfragen der DIT- und Lookup-Einträge

Nachdem wir uns nun mit der Authentifizierung bei einem LDAP-Server und der Angabe eines LDAP-Servers vertraut gemacht haben, können wir uns ein wenig genauer mit den Tools befassen, die Ihnen zur Verfügung stehen. Bei den meisten unserer Beispiele wird davon ausgegangen, dass diese Vorgänge auf demselben Server ausgeführt werden, auf dem sich der LDAP-Server befindet. Dies bedeutet, dass unsere Hostspezifikation nach dem Schema leer ist. Wir gehen auch davon aus, dass der Basiseintrag der vom Server verwalteten DIT fürdc=example,dc=com ist. Der rootDN istcn=admin,dc=example,dc=com. Lass uns anfangen.

Wir beginnen mitldapsearch, da wir es bisher in unseren Beispielen verwendet haben. LDAP-Systeme sind für Such-, Lese- und Suchvorgänge optimiert. Wenn Sie ein LDAP-Verzeichnis verwenden, besteht der Großteil Ihrer Vorgänge wahrscheinlich aus Suchen oder Nachschlagen. Das Toolldapsearch wird zum Abfragen und Anzeigen von Informationen in einem LDAP-DIT verwendet.

Wir haben einen Teil der Syntax behandelt, die für die Benennung und Verbindung mit dem Server verantwortlich ist. Sie sieht ungefähr so ​​aus:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -W

Damit haben wir das Nötigste, um eine Verbindung zu der auf dem Server ausgeführten LDAP-Instanz herzustellen und uns zu authentifizieren. Wir suchen jedoch nicht wirklich nach etwas. Um mehr zu erfahren, müssen wir die Konzepte der Suchbasis und des Suchbereichs erörtern.

Suche nach Basis und Umfang

In LDAP wird der Ort, an dem eine Suche beginnt, alssearch base bezeichnet. Dies ist ein Eintrag innerhalb eines DIT, von dem aus die Operation beginnt und als Anker fungiert. Wir geben die Suchbasis an, indem wir den Eintragsnamen mit dem Flag-b übergeben.

Um beispielsweise an der Wurzel unsererdc=example,dc=com DIT zu beginnen, können wir diese wie folgt als Suchbasis verwenden:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com"

Dieser Befehl sollte jeden Eintrag unter dem Eintragdc=example,dc=comerzeugen, auf den der Benutzer, an den Sie gebunden haben, Zugriff hat. Wenn wir einen anderen Eintrag verwenden, würde ein anderer Abschnitt des Baums erhalten. Wenn wir zum Beispiel mit dem Administratoreintrag beginnen, erhalten Sie möglicherweise nur den Administratoreintrag selbst:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "cn=admin,dc=example,dc=com"

Suchbasis bei cn = admin, dc = example, dc = com

# extended LDIF
#
# LDAPv3
# base  with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# admin, example.com
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9ejN2UmHoRjdha09tQY96TC9IN0kxYUVCSjhLeXBsc3A=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Wir haben die Basis in diesen Beispielen angegeben, können aber die Art und Weise, in der das Tool nach Ergebnissen sucht, durch Angabe des Suchbereichs weiter beeinflussen. Diese Option wird durch die Option-s festgelegt und kann eine der folgenden sein:

  • sub: Der Standardsuchbereich, wenn kein anderer angegeben ist. Dadurch werden der Basiseintrag selbst und alle Nachkommen im gesamten Baum durchsucht. Dies ist der größte Bereich.

  • base: Hiermit wird nur die Suchbasis selbst durchsucht. Es wird verwendet, um den in der Suchbasis angegebenen und besser als Suche definierten Eintrag zurückzugeben.

  • one: Hiermit werden nur die unmittelbaren Nachkommen / Kinder der Suchbasis durchsucht (die einzelne Hierarchieebene unterhalb der Suchbasis). Dies beinhaltet nicht die Suchbasis selbst und beinhaltet nicht den Teilbaum unter einem dieser Einträge.

  • children: Dies funktioniert genauso wie der Bereich vonsub, enthält jedoch nicht die Suchbasis selbst in den Ergebnissen (durchsucht jeden Eintrag darunter, jedoch nicht die Suchbasis).

Mit dem Flag-s und dem Flag-b können wir beginnen, die Bereiche der DIT zu formen, in die das Werkzeug schauen soll. Zum Beispiel können wir alle untergeordneten Elemente der ersten Ebene unseres Basiseintrags sehen, indem wir den Gültigkeitsbereich vononewie folgt verwenden:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -s one -LLL dn

Wir haben am Ende-LLL dn hinzugefügt, um die Ausgabe ein wenig zu filtern. Wir werden dies später in diesem Artikel weiter diskutieren. Wenn wir dem Baum einige weitere Einträge hinzugefügt hätten, hätte dies möglicherweise zu folgenden Ergebnissen geführt:

Ausgabe

dn: cn=admin,dc=example,dc=com

dn: ou=groups,dc=example,dc=com

dn: ou=people,dc=example,dc=com

Wenn wir alles unter dem Eintragou=peopleehen möchten, können wir dies als Suchbasis festlegen und den Bereichchildrenverwenden:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "ou=people,dc=example,dc=com" -s children -LLL dn

Durch Ändern der Suchbasis und des Suchbereichs können Sie nur die Teile der DIT bearbeiten, an denen Sie interessiert sind. Dadurch wird die Leistung Ihrer Abfrage verbessert, indem nur ein Abschnitt des Baums durchsucht wird, und es werden nur die Einträge zurückgegeben, an denen Sie interessiert sind.

Fremdleistung entfernen

Bevor wir fortfahren, sprechen wir darüber, wie Sie einen Teil der zusätzlichen Ausgabe entfernen können, dieldapsearch erzeugt.

Der Großteil der zusätzlichen Ausgabe wird mit-L Flags gesteuert. Sie können null bis drei-L Flags verwenden, abhängig von der Ausgabestufe, die Sie sehen möchten. Je mehr-L Flags Sie hinzufügen, desto mehr Informationen werden unterdrückt. Es ist möglicherweise eine gute Idee, beim Lernen oder bei der Fehlerbehebung keine Ausgabe zu unterdrücken. Im normalen Betrieb führt die Verwendung aller drei Ebenen jedoch wahrscheinlich zu einer besseren Erfahrung.

Wenn Sie die SASL-Authentifizierung verwenden und beispielsweise die DIT voncn=configändern, können Sie zusätzlich das Flag-Q verwenden. Dadurch wird der stille SASL-Modus aktiviert, in dem alle SASL-bezogenen Ausgaben entfernt werden. Dies ist in Ordnung, wenn Sie die-Y EXTERNAL-Methode verwenden. Seien Sie jedoch vorsichtig, wenn Sie einen Mechanismus verwenden, der zur Eingabe von Anmeldeinformationen auffordert, da dies ebenfalls unterdrückt wird (was zu einem Authentifizierungsfehler führt).

Suchfilter und Ausgabeattributfilter

Um tatsächlich eine Suche durchzuführen, anstatt einfach den gesamten Suchbereich auszugeben, müssen Sie den Suchfilter angeben.

Diese können am Ende der Zeile platziert werden und die Form eines Attributtyps, eines Vergleichsoperators und eines Werts haben. Oft werden sie in Anführungszeichen gesetzt, um die Interpretation durch die Shell zu verhindern. Klammern werden verwendet, um die Grenzen eines Filters von einem anderen zu kennzeichnen. Diese sind bei einfachen Suchvorgängen mit nur einem Attribut optional, bei komplexeren zusammengesetzten Filtern jedoch erforderlich. Wir werden sie hier verwenden, um besser anzuzeigen, wo sich der Suchfilter befindet.

Als Beispiel könnten wir sehen, ob es einen Eintrag in der DIT vondc=example,dc=commit einem Benutzernamen (uid) gibt, das auf "jsmith" gesetzt ist. Dadurch wird jeder Eintrag im Suchbereich nach einem Attribut durchsucht, das auf diesen Wert festgelegt ist:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=jsmith)"

Im obigen Beispiel haben wir den Gleichheitsoperator verwendet, der die exakte Übereinstimmung mit dem Wert eines Attributs überprüft. Es gibt auch verschiedene andere Operatoren, die wie erwartet funktionieren. Um beispielsweise nach Einträgen zu suchen, bei denencontainein Attribut ist, ohne sich um den eingestellten Wert zu kümmern, können Sie den Operator "Präsenz" verwenden, bei dem es sich einfach um ein Gleichheitszeichen mit einem Platzhalter auf der rechten Seite des Vergleichs handelt. Wir könnten nach Einträgen suchen, die ein Passwort enthalten, indem wir Folgendes eingeben:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(userPassword=*)"

Einige nützliche Suchfilter sind:

  • Equality: Verwendet den Operator=, um einen genauen Attributwert abzugleichen.

  • Presence: Verwendet=*, um die Existenz des Attributs unabhängig von seinem Wert zu überprüfen.

  • Greater than or equal: Verwendet den Operator>=, um nach Werten zu suchen, die größer oder gleich dem angegebenen Wert sind.

  • Less than or equal: Verwendet den Operator<=, um nach Werten zu suchen, die kleiner oder gleich dem angegebenen Wert sind.

  • Substring: Verwendet= mit einer Zeichenfolge und dem Platzhalterzeichen* als Teil einer Zeichenfolge. Wird verwendet, um einen Teil des gesuchten Werts anzugeben.

  • Proximity: Verwendet den Operator~=, um ungefähr mit dem auf der rechten Seite übereinzustimmen. Dies wird vom LDAP-Server nicht immer unterstützt (in diesem Fall wird stattdessen eine Suche nach Gleichheit oder Teilzeichenfolge durchgeführt).

Sie können die meisten Suchvorgänge auch annullieren, indem Sie den Suchfilter in zusätzliche runde Klammern setzen, denen das Negationssymbol „!“ Vorangestellt ist. Um beispielsweise nach allen Einträgen für Organisationseinheiten zu suchen, könnten wir diesen Filter verwenden:

"(ou=*)"

Um nach allen Einträgen zu suchen, bei denen es sich umnot-Einträge von Organisationseinheiten handelt, können Sie diesen Filter verwenden:

"(!(ou=*)"

Der Negationsmodifikator kehrt die Bedeutung des folgenden Suchfilters um.

Nach der Filterspezifikation können wir auch Attribut-Ausgabefilter hinzufügen. Dies ist nur eine Liste von Attributen, die Sie für jeden übereinstimmenden Eintrag anzeigen möchten. Standardmäßig wird für jeden übereinstimmenden Eintrag jedes Attribut angezeigt, auf das Ihre Anmeldeinformationen Lesezugriff haben. Wenn Sie einen Attribut-Ausgabefilter festlegen, können Sie genau angeben, welche Art von Ausgabe Sie sehen möchten.

Zum Beispiel können wir nach allen Einträgen suchen, die Benutzer-IDs haben, aber nur die zugehörigencommon name jedes Eintrags anzeigen, indem wir Folgendes eingeben:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn

Dies könnte eine Liste ergeben, die so aussieht:

Ausgabe

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown

Wenn wir auch deren Eintragsbeschreibung sehen möchten, können wir dies einfach zur Liste der anzuzeigenden Attribute hinzufügen:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -b "dc=example,dc=com" -LLL "(uid=*)" cn description

Es würde stattdessen so etwas zeigen:

Ausgabe

dn: uid=bwright,ou=People,dc=example,dc=com
cn: Brian Wright
description: Brian Wright from Marketing.  Brian takes care of marketing, pres
 s, and community.  Ask him for help if you need any help with outreach.

dn: uid=jsmith1,ou=People,dc=example,dc=com
cn: Johnny Smith
description: Johnny Smith from Accounting.  Johnny is in charge of the company
  books and hiring within the Accounting department.

dn: uid=sbrown2,ou=People,dc=example,dc=com
cn: Sally Brown
description: Sally Brown from engineering.  Sally is responsible for designing
  the blue prints and testing the structural integrity of the design.

Wenn kein Attributfilter angegeben ist, werden alle Attribute zurückgegeben. Dies kann mit dem Zeichen "*" explizit angegeben werden. Um Betriebsattribute (spezielle Metadatenattribute, die im Hintergrund für jeden Eintrag verwaltet werden) zurückzugeben, können Sie das spezielle "+" - Symbol verwenden. Um beispielsweise die Betriebsattribute für unseren rootDN anzuzeigen, können Sie Folgendes eingeben:

ldapsearch -H ldap:// -x -D "cn=admin,dc=example,dc=com" -b "dc=example,dc=com" -LLL "(cn=admin)" "+"

Die Ergebnisse würden ungefähr so ​​aussehen:

Ausgabe

dn: cn=admin,dc=example,dc=com
structuralObjectClass: organizationalRole
entryUUID: cdc718a0-8c3c-1034-8646-e30b83a2e38d
creatorsName: cn=admin,dc=example,dc=com
createTimestamp: 20150511151904Z
entryCSN: 20150514191233.782384Z#000000#000#000000
modifiersName: cn=admin,dc=example,dc=com
modifyTimestamp: 20150514191233Z
entryDN: cn=admin,dc=example,dc=com
subschemaSubentry: cn=Subschema
hasSubordinates: FALSE

Zusammengesetzte Suche

Bei der zusammengesetzten Suche werden zwei oder mehr einzelne Suchfilter kombiniert, um genauere Ergebnisse zu erhalten. Suchfilter werden kombiniert, indem sie in andere Klammern mit einem Vergleichsoperator als erstem Element eingeschlossen werden. Dies ist einfacher zu demonstrieren als zu erklären.

Die Vergleichsoperatoren sind das "&" - Zeichen, das als logisches UND fungiert, und das "|" - Zeichen, das ein logisches ODER kennzeichnet. Diese stehen vor den Filtern, deren Beziehungen sie in einem äußeren Satz von Klammern definieren.

Um also nach einem Eintrag zu suchen, der sowohl eine Beschreibung als auch eine E-Mail-Adresse in unserer Domain enthält, könnten wir einen Filter wie diesen erstellen:

"(&(description=*)(mail=*@example.com))"

Damit ein Eintrag zurückgegeben werden kann, müssen beide Attribute definiert sein.

Das ODER-Symbol gibt die Ergebnisse zurück, wenn einer der Unterfilter wahr ist. Wenn wir Einträge ausgeben möchten, für die wir Kontaktinformationen haben, können wir einen Filter wie diesen versuchen:

"(|(telephoneNumber=*)(mail=*)(street=*))"

Hier sehen wir, dass der Operator auf mehr als zwei Unterfilter angewendet werden kann. Wir können diese logischen Konstruktionen auch nach Bedarf verschachteln, um recht komplexe Muster zu erstellen.

Verwenden von ldapmodify und Variationen zum Ändern oder Erstellen von LDAP-Einträgen

Bisher haben wir uns ausschließlich auf den Befehlldapsearchkonzentriert, der zum Nachschlagen, Suchen und Anzeigen von Einträgen und Eintragssegmenten in einem LDAP-DIT hilfreich ist. Dies wird den meisten schreibgeschützten Anforderungen der Benutzer entsprechen, wir benötigen jedoch ein anderes Tool, wenn wir die Objekte in der DIT ändern möchten.

Der Befehlldapmodify manipuliert eine DIT mithilfe von LDIF-Dateien. Weitere Informationen zu LDIF-Dateien und deren Besonderheiten zum Ändern oder Hinzufügen von Einträgen finden Sie unterthis guide.

Das Grundformat vonldapmodify entspricht weitgehend der Syntax vonldapsearch, die wir in diesem Handbuch verwendet haben. Beispielsweise müssen Sie den Server weiterhin mit dem Flag-H angeben, sich mit dem Flag-Y für die SASL-Authentifizierung oder mit dem Flag-x,-D und-[W|w]authentifizieren ) s Flags für die einfache Authentifizierung.

Anwenden von Änderungen aus einer LDIF-Datei

Nachdem Sie diese Boilerplate-Optionen angegeben haben, lesen Sie am häufigsten eine LDIF-Datei ein und wenden Sie sie auf das DIT an. Dies kann mit der Option-f erreicht werden (wenn Sie die Option-f nicht verwenden, müssen Sie eine Änderung im LDIF-Format in der Befehlszeile eingeben). Sie müssen die LDIF-Datei unter Verwendung der in der oben verlinkten Anleitung beschriebenen Syntax selbst erstellen:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Dadurch wird die LDIF-Datei gelesen und die darin angegebenen Änderungen angewendet. Für den Befehlldapmodify sollte für jede LDIF-Änderung einchangetype angegeben werden. Der Befehlldapmodify ist die allgemeinste Form der DIT-Manipulationsbefehle.

Wenn Ihre LDIF-Datei neue Einträge hinzufügt unddoes notchangetype: add für jeden Eintrag enthält, können Sie das Flag-a mitldapmodify oder einfachldapadd verwenden Befehl, der dieses Verhalten grundsätzlich aliasisiert. Zum Beispiel würde eine LDIF-Datei, derenincludeschangetype ist, folgendermaßen aussehen:

LDIF mit Änderungstyp

dn: ou=newgroup,dc=example,dc=com
changetype: add
objectClass: organizationalUnit
ou: newgroup

Um diese Datei zu verarbeiten, können Sie einfachldapmodify verwenden:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Die Datei könnte jedoch auch wie folgt aufgebaut werden:without thechangetype:

LDIF ohne Änderungstyp

dn: ou=newgroup,dc=example,dc=com
objectClass: organizationalUnit
ou: newgroup

In diesem Fall müssten Sie zum Hinzufügen dieses Eintrags zum DIT entweder das Flag-a mitldapmodify oder den Befehlldapadd verwenden. Entweder:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -a -f /path/to/file.ldif

Oder dieses:

ldapadd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -f /path/to/file.ldif

Ähnliche Befehle stehen zum Löschen von Einträgen (ldapdelete) und zum Verschieben von LDAP-Einträgen (ldapmodrdn) zur Verfügung. Mit diesen Befehlen müssen Siechangetype: delete undchangetype: modrdn nicht mehr explizit in den Dateien angeben. Für jedes dieser Formate können Sie das zu verwendende Format festlegen (ob die Änderung in der LDIF-Datei oder in der Befehlszeile angegeben werden soll).

Testen von Änderungen und Behandeln von Fehlern

Wenn Sie eine LDIF-Datei trocken laufen lassen möchten, können Sie die Flags-n und-v verwenden. Hier erfahren Sie, welche Änderung ohne Änderung der tatsächlichen DIT durchgeführt werden würde:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -n -v -f /path/to/file.ldif

Wenn beim Verarbeiten einer LDIF-Datei ein Fehler auftritt, wird der Vorgang normalerweise sofort abgebrochen. Dies ist im Allgemeinen die sicherste Vorgehensweise, da Änderungsanforderungen zu einem späteren Zeitpunkt in der Datei häufig die DIT unter der Annahme ändern, dass die früheren Änderungen korrekt angewendet wurden.

Wenn Sie jedoch möchten, dass der Befehl die Datei durchläuft und die fehlerverursachenden Änderungen überspringt, können Sie das Flag-cverwenden. Sie möchten wahrscheinlich auch das Flag-Sverwenden, um auf eine Datei zu verweisen, in die die Fehler geschrieben werden können, damit Sie die fehlerhaften Anforderungen beheben und erneut ausführen können:

ldapmodify -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w password -c -S /path/to/error_file -f /path/to/file.ldif

Auf diese Weise erhalten Sie ein Protokoll (mit Kommentaren zu den betreffenden Einträgen), das Sie nach der Operation auswerten können.

Verschiedene andere LDAP-Befehle

Die Befehle, die wir bereits behandelt haben, führen die häufigsten LDAP-Vorgänge aus, die Sie täglich ausführen. Es gibt jedoch noch einige weitere nützliche Befehle.

ldappasswd

Wenn einige Ihrer LDAP-Einträge Kennwörter haben, können Sie den Eintrag mit dem Befehlldappasswdändern. Dies funktioniert, indem Sie sich mit dem betreffenden Konto oder einem Administratorkonto authentifizieren und anschließend das neue Kennwort (und optional das alte Kennwort) eingeben.

Das alte Passwort sollte entweder mit dem Flag-a (das alte Passwort wird als nächstes Element inline angegeben), dem Flag-A (das alte Passwort wird angefordert) oder-t Flag (das alte Passwort wird aus der als nächstes Element angegebenen Datei gelesen). Dies ist für einige LDAP-Implementierungen optional, wird jedoch von anderen benötigt.

Das neue Passwort sollte entweder mit dem Flag-s (das neue Passwort wird als nächstes Element inline angegeben), dem Flag-S (das neue Passwort wird angefordert) oder-T Flag (das neue Passwort wird aus der als nächstes Element angegebenen Datei gelesen).

Eine typische Änderung könnte also so aussehen:

ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w oldpassword -a oldpassword -s newpassword

Wenn kein Eintrag angegeben wird, wird der Eintrag, der für die Bindung verwendet wird, geändert. Wenn Sie an einen Administratoreintrag gebunden sind, können Sie andere Einträge ändern, auf die Sie Schreibzugriff haben, indem Sie sie nach dem Befehl bereitstellen.

ldappasswd -H ldap:// -x -D "cn=admin,dc=example,dc=com" -w adminpassword -a oldpassword -s newpassword "uid=user,dc=example,dc=com"

Weitere Informationen zum Ändern und Zurücksetzen von Kennwörtern finden Sie unterthis guide.

ldapwhoami

Mit dem Befehlldapwhoamikönnen Sie feststellen, wie der LDAP-Server Sie nach der Authentifizierung sieht.

Wenn Sie eine anonyme oder einfache Authentifizierung verwenden, sind die Ergebnisse wahrscheinlich nicht allzu nützlich ("anonym" oder genau der Eintrag, an den Sie sich binden). Bei der SASL-Authentifizierung kann dies jedoch Aufschluss darüber geben, wie Ihr Authentifizierungsmechanismus angezeigt wird.

Wenn wir beispielsweise den SASL-Mechanismus-Y EXTERNAL mitsudo verwenden, um Operationen an der DITcn=config auszuführen, können wir mitldapwhoami überprüfen, ob der Authentifizierungs-DN angezeigt wird:

sudo ldapwhoami -H ldapi:// -Y EXTERNAL -Q

ldapwhoami-Ausgabe

dn:gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth

Dies ist kein tatsächlicher Eintrag in unserer DIT, es ist nur, wie die SASL-Authentifizierung in ein Format übersetzt wird, das LDAP verstehen kann. Das Anzeigen des Authentifizierungs-DN kann jedoch zum Erstellen von Zuordnungen und Zugriffsbeschränkungen verwendet werden. Daher sollten Sie wissen, wie Sie diese Informationen abrufen können.

ldapurl

Mit dem Toolldapurlkönnen Sie LDAP-URLs erstellen, indem Sie die verschiedenen an Ihrer Abfrage beteiligten Komponenten angeben. Mit LDAP-URLs können Sie Ressourcen von einem LDAP-Server über eine standardisierte URL anfordern. Dies sind nicht authentifizierte Verbindungen und schreibgeschützt. Viele LDAP-Lösungen unterstützen keine LDAP-URLs mehr zum Anfordern von Ressourcen, sodass deren Verwendung je nach verwendeter Software eingeschränkt sein kann.

Die Standard-LDAP-URL wird mit der folgenden Syntax formatiert:

ldap://host:port/base_dn?attr_to_return?search_scope?filter?extension

Die Komponenten sind wie folgt:

  • base_dn: Der Basis-DN, von dem aus die Suche gestartet werden soll.

  • attr_to_return: Die Attribute der übereinstimmenden Entitäten, an denen Sie interessiert sind. Diese sollten durch Kommas getrennt sein.

  • search_scope: Der Suchbereich. Entweder Base, Sub, One oder Children.

  • filter: Der Suchfilter, mit dem die Einträge ausgewählt werden, die zurückgegeben werden sollen.

  • extension: Die LDAP-Erweiterungen, die Sie angeben möchten. Wir werden diese hier nicht behandeln.

Jedes Element ist in der URL durch ein Fragezeichen getrennt. Sie müssen nicht die Elemente bereitstellen, die Sie nicht verwenden. Da der Elementtyp jedoch durch seine Position in der Zeichenfolge identifiziert wird, müssen Sie für dieses Element das Feld "slot" leer lassen, wodurch Sie mehrere Fragezeichen in erhalten eine Reihe. Sie können die URL stoppen, sobald Sie Ihre Informationen hinzugefügt haben (Sie benötigen keine Fragezeichen am Ende, um nicht verwendete "Slots" darzustellen).

Eine URL könnte beispielsweise so aussehen:

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

Wenn Sie dies in das Toolldapurleingeben, verwenden Sie das Flag-H und setzen die URL in Anführungszeichen:

ldapurl -H "ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)"

Der Befehl würde es folgendermaßen aufteilen:

LDAPURL-Ausgabe

scheme: ldap
host: localhost
port: 389
dn: dc=chilidonuts,dc=tk
selector: dn
selector: ou
scope: sub
filter: (ou=*)

Sie können diese Flags auch verwenden, um den Prozess umzukehren und eine LDAP-URL zusammenzufügen. Diese spiegeln die verschiedenen Komponenten der LDAP-URL wider:

  • -S: Das URL-Schema (ldap,ldaps oderldapi). Dasldap-Schema ist Standard.

  • -h: Der Name oder die Adresse des LDAP-Servers

  • -p: Der LDAP-Server-Port. Der Standardwert hängt vom Schema ab.

  • -b: Der Basis-DN zum Starten der Abfrage

  • -a: Eine durch Kommas getrennte Liste der zurückzugebenden Attribute

  • -s: Der zu verwendende Suchbereich (Basis, Unter, Kinder oder einer)

  • -f: Der LDAP-Filter zur Auswahl der zurückzugebenden Einträge

  • -e: Die anzugebenden LDAP-Erweiterungen

Mit diesen könnten Sie so etwas eingeben:

ldapurl -h localhost -b "dc=example,dc=com" -a dn,ou -s sub -f "(ou=*)"

Der Befehl würde die erstellte URL zurückgeben, die folgendermaßen aussehen würde:

LDAPURL-Ausgabe

ldap://localhost:389/dc=example,dc=com?dn,ou?sub?(ou=*)

Mit dieser Option können Sie URLs erstellen, die mit einem LDAP-Client verwendet werden können, der in der Lage ist, mit diesem Format zu kommunizieren.

ldapcompare

Mit dem Toolldapcomparekann das Attribut eines Eintrags mit einem Wert verglichen werden. Dies wird verwendet, um einfache Assertionsprüfungen durchzuführen, um Daten zu validieren.

Der Prozess umfasst das Binden wie gewohnt, abhängig von den abgefragten Daten, wobei der Eintrags-DN und die zu überprüfende Zusicherung bereitgestellt werden. Die Zusicherung erfolgt durch Angabe eines Attributs und anschließend eines Wertes, der durch ein oder zwei Doppelpunkte getrennt ist. Für einfache Zeichenfolgenwerte sollte ein einzelner Doppelpunkt verwendet werden. Ein Doppelpunkt zeigt an, dass ein Base64-codierter Wert angegeben wurde.

Sie können also behaupten, dass John ein Mitglied der "Powerusers" -Gruppe ist.

ldapcompare -H ldap:// -x "ou=powerusers,ou=groups,dc=example,dc=com" "member:uid=john,ou=people,dc=example,dc=com"

Wenn er in der Gruppe ist, wirdTRUE zurückgegeben. Wenn nicht, gibt der BefehlFALSE zurück. Wenn der zum Binden verwendete DN nicht über ausreichende Berechtigungen zum Lesen des betreffenden Attributs verfügt, wirdUNDEFINED zurückgegeben.

Dies könnte als Grundlage für ein Autorisierungssystem verwendet werden, indem die Gruppenzugehörigkeit überprüft wird, bevor die angeforderten Aktionen ausgeführt werden.

Fazit

Sie sollten nun eine gute Vorstellung davon haben, wie Sie mit einigen LDAP-Dienstprogrammen eine Verbindung zu Ihrem LDAP-Server herstellen, diesen verwalten und verwenden. Andere Clients bieten möglicherweise eine benutzerfreundlichere Schnittstelle zu Ihrem LDAP-System für die tägliche Verwaltung. Diese Tools können Ihnen jedoch dabei helfen, die Seile zu erlernen und einen guten Zugriff auf die Daten und Strukturen Ihres DIT auf niedriger Ebene zu ermöglichen.