26.7 Manuelles Konfigurieren eines LDAP-Servers

Das installierte System enthält unter /etc/openldap/slapd.conf eine vollständige Konfigurationsdatei für den LDAP-Server. Die einzelnen Einträge und die erforderlichen Anpassungen werden hier kurz beschrieben. Einträge, denen ein Rautenzeichen (#) vorangestellt wurde, sind nicht aktiv. Dieses Kommentarzeichen muss entfernt werden, um sie zu aktivieren.

26.7.1 Globale Direktiven in slapd.conf

Beispiel 26-2 slapd.conf: Include-Direktive für Schemata

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/rfc2307bis.schema
include         /etc/openldap/schema/yast.schema

Diese erste in dargestellte Direktive in slapd.confBeispiel 26-2 gibt das Schema an, anhand dessen das LDAP-Verzeichnis organisiert wird. Der Eintrag core.schema ist erforderlich. Dieser Direktive werden zusätzliche erforderliche Schemata angefügt. Weitere Information erhalten Sie in der im Lieferumfang enthaltenen OpenLDAP-Dokumentation.

Beispiel 26-3 slapd.conf: pidfile und argsfile

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args

Diese beiden Dateien enthalten die PID (Prozess-ID) und einige Argumente, mit denen der slapd-Prozess gestartet wird. Hier müssen keine Änderungen vorgenommen werden.

Beispiel 26-4 slapd.conf: Zugriffssteuerung

# Sample Access Control
#       Allow read access of root DSE
# Allow self write access
#       Allow authenticated users read access
#       Allow anonymous users to authenticate
# access to dn="" by * read
  access to * by self write
              by users read
              by anonymous auth
#
# if no access controls are present, the default is:
#       Allow read by all
#
# rootdn can always write!

In Beispiel 26-4 ist der Ausschnitt der Datei slapd.conf dargestellt, mit dem die Zugriffsberechtigungen für das LDAP-Verzeichnis auf dem Server gesteuert werden. Die hier im globalen Abschnitt von slapd.conf vorgenommenen Einträge sind gültig, sofern keine benutzerdefinierten Zugriffsregeln im datenbankspezifischen Abschnitt festgelegt werden. Durch diese Regeln würden die globalen Deklarationen außer Kraft gesetzt. Wie hier dargestellt, verfügen alle Benutzer über Lesezugriff auf das Verzeichnis, nur der Administrator (rootdn) hat jedoch Schreibberechtigung für dieses Verzeichnis. Die Zugriffssteuerung in LDAP ist ein hochkomplexer Prozess. Folgende Tipps dienen als Unterstützung:

  • Jede Zugriffsregel weist folgende Struktur auf:

    access to <what> by <who> <access>
  • what ist ein Platzhalter für das Objekt oder Attribut, auf das Zugriff gewährt wird. Einzelne Verzweigungen des Verzeichnisses können explizit mit separaten Regeln geschützt werden. Darüber hinaus besteht die Möglichkeit, Bereiche des Verzeichnisbaums mit einer Regel durch die Verwendung regulärer Ausdrücke zu verarbeiten. slapd wertet alle Regeln in der Reihenfolge aus, in der sie in der Konfigurationsdatei angegeben sind. Allgemeinere Regeln müssen nach spezifischeren Regeln aufgelistet werden - slapd wendet nur die erste passende Regel an und ignoriert alle folgenden Regeln.

  • Mit who wird festgelegt, wer Zugriff auf die mit what angegebenen Bereiche erhalten soll. Hier können reguläre Ausdrücke verwendet werden. Auch hier bricht slapd die Bewertung nach der ersten Übereinstimmung ab, sodass die spezifischeren Regeln vor den allgemeineren Regeln angegeben werden sollten. Die in Tabelle 26-2 dargestellten Einträge sind möglich.

    Tabelle 26-2 Benutzergruppen und ihre Zugriffsberechtigungen

    Tag

    Scope

    *

    Alle Benutzer ohne Ausnahme

    anonymous

    Nicht authentifizierte (anonyme) Benutzer

    Benutzer

    Authentifizierte Benutzer

    self

    Mit dem Zielobjekt verbundene Benutzer

    dn.regex=<regex>

    Alle Benutzer, die mit dem regulären Ausdruck übereinstimmen

  • Mit access wird der Zugriffstyp angegeben. Verwenden Sie die in Tabelle 26-3 angegebenen Optionen.

    Tabelle 26-3 Zugriffstypen

    Tag

    Umfang des Zugriffs

    Keine

    Kein Zugriff

    auth

    Für die Verbindung zum Server

    compare

    Für Objekt für Vergleichszugriff

    Suchen

    Für den Einsatz von Suchfiltern

    Lesen

    Lesezugriff

    write

    Schreibzugriff

    slapd vergleicht das vom Client angeforderte Zugriffsrecht mit den in slapd.conf gewährten Rechten. Dem Client wird Zugriff gewährt, wenn in den Regeln ein höheres als das angeforderte Recht oder gleichwertiges Recht festgelegt ist. Wenn der Client ein höheres Recht als die in den Regeln deklarierten Rechte anfordert, wird ihm der Zugriff verweigert.

In Beispiel 26-5 ist ein Beispiel für eine einfache Zugriffssteuerung dargestellt, die mithilfe von regulären Ausdrücken beliebig entwickelt werden kann.

Beispiel 26-5 slapd.conf: Beispiel für Zugriffskontrolle

access to  dn.regex="ou=([^,]+),dc=example,dc=com" 
by dn.regex="cn=Administrator,ou=$1,dc=example,dc=com" write  
by user read 
by * none

Mit dieser Regel wird festgelegt, dass nur der jeweilige Administrator Schreibzugriff auf einen einzelnen ou-Eintrag erhält. Alle anderen authentifizierten Benutzer verfügen über Lesezugriff und alle sonstigen Benutzer haben kein Zugriffsrecht.

TIPP: Festlegen von Zugriffsregeln

Falls keine access to-Regel oder keine passende by-Direktive vorhanden ist, wird der Zugriff verweigert. Nur explizit deklarierte Zugriffsrechte werden erteilt. Wenn gar keine Regeln deklariert sind, wird das Standardprinzip mit Schreibzugriff für den Administrator und Lesezugriff für alle anderen Benutzer angewendet.

Detaillierte Informationen hierzu und eine Beispielkonfiguration für LDAP-Zugriffsrechte finden Sie in der Online-Dokumentation zum installierten openldap2-Paket.

Neben der Möglichkeit, Zugriffsberechtigungen über die zentrale Serverkonfigurationsdatei (slapd.conf) zu verwalten, stehen Zugriffssteuerungsinformationen (ACI, Access Control Information) zur Verfügung. Mit ACI können Zugriffsdaten für einzelne Objekte innerhalb des LDAP-Baums gespeichert werden. Diese Art der Zugriffssteuerung wird noch selten verwendet und von Entwicklern als experimentell betrachtet. Weitere Informationen hierzu erhalten Sie unter http://www.openldap.org/faq/data/cache/758.html.

26.7.2 Datenbankspezifische Direktiven in slapd.conf

Beispiel 26-6 slapd.conf: Datenbankspezifiische Direktiven

database bdb
suffix "dc=example,dc=com" 
checkpoint      1024    5
cachesize       10000
rootdn "cn=Administrator,dc=example,dc=com" 
# Cleartext passwords, especially for the rootdn, should 
# be avoided.  See slappasswd(8) and slapd.conf(5) for details. 
# Use of strong authentication encouraged.
rootpw secret 
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended. 
directory /var/lib/ldap 
# Indices to maintain 
index   objectClass     eq
overlay ppolicy
ppolicy_default "cn=Default Password Policy,dc=example,dc=com"
ppolicy_hash_cleartext
ppolicy_use_lockout

In der ersten Zeile dieses Abschnitts wird der Datenbanktyp, in diesem Fall eine Berkeley-Datenbank, festgelegt (siehe Beispiel 26-6).

suffix geben Sie an, für welchen Teil des LDAP-Baums der Server verantwortlich sein soll. Mit

checkpoint legen Sie die Datenmenge (in KB) fest, die im Transaktionsprotokoll gespeichert wird, bevor die Daten in die tatsächliche Datenbank geschrieben werden sowie die Zeit (in Minuten) zwischen zwei Schreibvorgängen. Mit

cachesize legen Sie die Anzahl der im Cache der Datenbank gespeicherten Objekte fest.

Mit dem darauf folgenden rootdn wird festgelegt, wer für diesen Server über Administratorrechte verfügt. Der hier angegebene Benutzer muss nicht über einen LDAP-Eintrag verfügen und nicht als regulärer Benutzer vorhanden sein.

rootpw stellt das Admininistratorpasswort ein. Anstelle von secret kann hier auch der mit slappasswd erstellte Hash-Wert des Administratorpassworts eingegeben werden.

Die directory-Direktive gibt das Verzeichnis im Dateisystem an, in dem die Datenbankverzeichnisse auf dem Server gespeichert sind.

Die letzte Direktive, index objectClass eq veranlasst die Wartung eines Indizes aller Objektklassen. Attribute, nach denen die Benutzer am häufigsten suchen, können hier je nach Erfahrung hinzugefügt werden.

overlay ppolicy fügt einen Layer der Passwortsteuermechnismen hinzu. ppolicy_default gibt den DN des pwdPolicy-Objekts an, der verwendet werden soll, wenn für einen gegebenen Benutzereintrag keine spezifische Richtlinie festgelegt wurde. Wenn für einen Eintrag keine spezifische Richtlinie und kein Standardwert vorgegeben ist, werden keine Richtlinien durchgesetzt. ppolicy_hash_cleartext gibt an, dass unverschlüsselte Passworter in Hinzufüge- oder Bearbeitungsanforderungen vor dem Speichern in die Datenbank verschlüsselt werden. Bei Verwendung dieser Option wird empfohlen, allen Verzeichnisbenutzern den Zugriff zum Vergleichen, Suchen und Lesen des Attributs userPassword zu verweigern, da ppolicy_hash_cleartext das Informationsmodell X.500/LDAP verletzt. ppolicy_use_lockout sendet einen spezifischen Fehlercode, wenn ein Client versucht, sich bei einem gesperrten Konto anzumelden. Wenn Ihre Site für Sicherheitsprobleme anfällig ist, deaktivieren Sie diese Option, da der Fehlercode Angreifern nützliche Informationen zur Verfügung stellt.

Die an dieser Stelle für die Datenbank festgelegten benutzerdefinierten Regeln für Access können anstelle der globalen Access-Regeln verwendet werden.

26.7.3 Starten und Anhalten der Server

Nachdem der LDAP-Server vollständig konfiguriert und alle gewünschten Einträge gemäß dem in Abschnitt 26.8, Manuelles Verwalten von LDAP-Daten beschriebenen Schema vorgenommen wurden, starten Sie den LDAP-Server als root, indem Sie den Befehl rcldap start eingeben. Um den Server manuell zu stoppen, geben Sie den Befehl rcldap stop ein. Fragen Sie den Status des laufenden LDAP-Servers mit rcldap status ab.

Mit dem in Abschnitt 14.2.3, Konfigurieren von Systemdiensten (Runlevel) mit YaSTbeschriebenen Runlevel-Editor von YaST kann der Server beim Booten und Stoppen des Systems automatisch gestartet bzw. angehalten werden. Darüber hinaus besteht die Möglichkeit, wie in Abschnitt 14.2.2, Init-Skripten beschrieben, die entsprechenden Verknüpfungen zu den Start- und Anhaltskripten mit dem Befehl insserv über die Kommandozeile zu erstellen.