25.4. Datenbehandlung im LDAP-Verzeichnis

In OpenLDAP stehen eine Reihe von Werkzeugen für die Datenverwaltung im LDAP-Verzeichnis zur Verfügung. Die vier wichtigsten Werkzeuge für Hinzufüge-, Lösch-, Such- und Änderungsvorgänge im Datenbestand werden im Folgenden kurz beschrieben.

25.4.1. Einfügen von Daten in ein LDAP-Verzeichnis

Sobald die Konfiguration des LDAP-Servers in /etc/openldap/lsapd.conf richtig und einsatzbereit ist (sie enthält die richtigen Einträge für suffix, directory, rootdn, rootpw und index), fahren Sie mit der Eingabe von Datensätzen fort. In OpenLDAP steht hierfür der Befehl ldapadd zur Verfügung. Wenn möglich, sollten Sie aus praktischen Gründen die Objekte als Bundle in der Datenbank hinzufügen. Zu diesem Zweck kann LDAP das LDIF-Format (LDAP Data Interchange Format) verarbeiten. Bei einer LDIF-Datei handelt es sich um eine einfache Textdatei, die eine beliebige Anzahl an Attribut-Wert-Paaren enthalten kann. In den in slapd.conf deklarierten Schemadateien finden Sie die verfügbaren Objektklassen und Attribute. Die LDIF-Datei zur Erstellung eines groben Framework für das Beispiel in Abbildung 25.1, „Struktur eines LDAP-Verzeichnisses“ würde der Datei in Beispiel 25.7, „Beispiel für eine LDIF-Datei“ ähneln.

Beispiel 25.7. Beispiel für eine LDIF-Datei

# The SUSE Organization
dn: dc=suse,dc=de
objectClass: dcObject
objectClass: organization
o: SUSE AG dc: suse

# The organizational unit development (devel)
dn: ou=devel,dc=suse,dc=de
objectClass: organizationalUnit
ou: devel

# The organizational unit documentation (doc)
dn: ou=doc,dc=suse,dc=de
objectClass: organizationalUnit
ou: doc

# The organizational unit internal IT (it)
dn: ou=it,dc=suse,dc=de
objectClass: organizationalUnit
ou: it
[Important]Codierung von LDIF-Dateien

LDAP arbeitet mit UTF-8 (Unicode). Umlaute müssen richtig kodiert werden. Verwenden Sie einen Editor mit UTF-8-Unterstützung, wie beispielsweise Kate oder neuere Versionen von Emacs. Ansonsten sollten Sie Umlaute und andere Sonderzeichen vermeiden oder recode verwenden, um die Eingabe in UTF-8 neu zu kodieren.

Speichern Sie die Datei mit der Erweiterung .ldif und geben Sie sie mit folgendem Befehl an den Server weiter:

ldapadd -x -D <dn of the administrator> -W -f <file>.ldif

-x deaktiviert in diesem Fall die Authentifizierung mit SASL. -D deklariert den Benutzer, der den Vorgang aufruft. Der gültige DN des Administrators wird hier so eingegeben, wie er in slapd.conf konfiguriert wurde. Im aktuellen Beispiel lautet er cn=admin,dc=suse,dc=de. Mit -W wird die Passworteingabe in der Befehlszeile (unverschlüsselt) umgangen und eine separate Passworteingabeaufforderung aktiviert. Das Passwort wurde zuvor in slapd.conf mit rootpw festgelegt. Mit -f wird der Dateiname weitergegeben. Detaillierte Informationen zum Ausführen von ldapadd erhalten Sie in Beispiel 25.8, „ldapadd mit example.ldif“.

Beispiel 25.8. ldapadd mit example.ldif

ldapadd -x -D cn=admin,dc=suse,dc=de -W -f example.ldif 

Enter LDAP password: 
adding new entry "dc=suse,dc=de" 
adding new entry "ou=devel,dc=suse,dc=de" 
adding new entry "ou=doc,dc=suse,dc=de" 
adding new entry "ou=it,dc=suse,dc=de"

Die Benutzerdaten einzelner Personen können in separaten LDIF-Dateien vorbereitet werden.In Beispiel 25.9, „LDIF-Daten für Tux“ wird dem neuen LDAP-Verzeichnis Tux hinzugefügt.

Beispiel 25.9. LDIF-Daten für Tux

# coworker Tux
dn: cn=Tux Linux,ou=devel,dc=suse,dc=de
objectClass: inetOrgPerson
cn: Tux Linux
givenName: Tux
sn: Linux
mail: tux@suse.de
uid: tux
telephoneNumber: +49 1234 567-8

Eine LDIF-Datei kann eine beliebige Anzahl an Objekten enthalten. Es können ganze Verzeichnisverzweigungen oder nur Teile davon in einem Vorgang an den Server weitergegeben werden, wie im Beispiel der einzelnen Objekte dargestellt. Wenn bestimmte Daten relativ häufig geändert werden müssen, wird eine detaillierte Unterteilung der einzelnen Objekte empfohlen.

25.4.2. Ändern von Daten im LDAP-Verzeichnis

Mit dem Werkzeug ldapmodify kann der Datenbestand geändert werden. Am einfachsten können Sie dies durch die Änderung der entsprechenden LDIF-Datei und der Weiterleitung der geänderten Datei an den LDAP-Server erreichen. Wenn Sie die Telefonnummer des Kollegen Tux von +49 1234 567-8 in +49 1234 567-10 ändern möchten, bearbeiten Sie die LDIF-Datei, wie in Beispiel 25.10, „Geänderte LDIF-Datei tux.ldif“ angegeben.

Beispiel 25.10. Geänderte LDIF-Datei tux.ldif

# coworker Tux
dn: cn=Tux Linux,ou=devel,dc=suse,dc=de 
changetype: modify
replace: telephoneNumber 
telephoneNumber: +49 1234 567-10

Importieren Sie die geänderte Datei mit folgendem Befehl in das LDAP-Verzeichnis:

ldapmodify -x -D cn=admin,dc=suse,dc=de -W -f tux.ldif

Alternativ können Sie die zu ändernden Attribute direkt an ldapmodify weitergeben. Die entsprechende Vorgehensweise wird nachfolgend beschrieben:

  1. Starten Sie ldapmodify und geben Sie Ihr Passwort ein:

    ldapmodify -x -D cn=admin,dc=suse,dc=de -W 
    Enter LDAP password:
    
  2. Geben Sie die Änderungen ein und halten Sie sich dabei genau in die unten angegebene Syntax-Reihenfolge:

    dn: cn=Tux Linux,ou=devel,dc=suse,dc=de
    changetype: modify
    replace: telephoneNumber
    telephoneNumber: +49 1234 567-10

Detaillierte Informationen zu ldapmodify und der zugehörigen Syntax finden Sie auf der Manualpage ldapmodify(1).

25.4.3. Suchen und Lesen von Daten in einem LDAP-Verzeichnis

Mit ldapsearch steht in OpenLDAP ein Befehlszeilenwerkzeug zum Suchen von Daten innerhalb eines LDAP-Verzeichnisses und zum Lesen von Daten aus dem Verzeichnis zur Verfügung. Eine einfache Abfrage weist folgende Syntax auf:

ldapsearch -x -b dc=suse,dc=de "(objectClass=*)"

Mit der Option -b wird die Suchbasis festgelegt – der Abschnitt des Baums, in dem die Suche durchgeführt werden soll. Im aktuellen Fall lautet er dc=suse,dc=de. Wenn Sie eine feiner abgestufte Suche in speziellen Unterabschnitten des LDAP-Verzeichnisses durchführen möchten (beispielsweise nur innerhalb der Abteilung devel), geben Sie diesen Abschnitt mit -b an ldapsearch weiter. Mit -x wird die Aktivierung der einfachen Authentifizierung angefordert. (objectClass=*) deklariert, dass alle im Verzeichnis enthaltenen Objekte gelesen werden sollen. Diese Befehlsoption kann nach der Erstellung eines neuen Verzeichnisbaums verwendet werden, um zu prüfen, ob alle Einträge richtig aufgezeichnet wurden und ob der Server wie gewünscht reagiert. Weitere Informationen zur Verwendung von ldapsearch finden Sie auf der entsprechenden Manualpage (ldapsearch(1)).

25.4.4. Löschen von Daten in einem LDAP-Verzeichnis

Mit ldapdelete werden unerwünschte Einträge gelöscht. Die Syntax ist ähnlich wie die der oben beschriebenen Befehle. Wenn Sie beispielsweise den vollständigen Eintrag für Tux Linux löschen möchten, erteilen Sie folgenden Befehl:

ldapdelete -x -D cn=admin,dc=suse,dc=de -W cn=Tux \
Linux,ou=devel,dc=suse,dc=de