45.3. Serverkonfiguration mit slapd.conf

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.

45.3.1. Globale Direktiven in slapd.conf

Beispiel 45.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 Beispiel 45.2, „slapd.conf: Include-Direktive für Schemata“ dargestellte Direktive in slapd.conf gibt das Schema an, anhand dessen das LDAP-Verzeichnis organisiert wird. Der Eintrag core.schema ist zwingend erforderlich. Dieser Direktive werden zusätzlich benötigte Schemata angefügt. Die entsprechenden Informationen finden Sie in der vorhandenen Dokumentation zu OpenLDAP.

Beispiel 45.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 45.4. slapd.conf: Zugriffskontrolle

# 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 45.4, „slapd.conf: Zugriffskontrolle“ 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 Zugriffskontrolle in LDAP ist ein hochkomplexer Prozess. Folgende Tipps dienen als Anhaltspunkte:

  • 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. Allgemeine Regeln sollten nach den spezifischeren Regeln angegeben werden – die erste von slapd als gültig eingestufte Regel wird bewertet und alle folgenden Einträge werden ignoriert.

  • Mit who wird festgelegt, wer Zugriff auf die mit what angegebenen Bereich 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 45.2, „Benutzergruppen und ihre Zugriffsberechtigungen“ dargestellten Einträge sind möglich.

    Tabelle 45.2. Benutzergruppen und ihre Zugriffsberechtigungen

    Tag

    Umfang

    *

    Alle Benutzer ohne Ausnahme

    anonymous

    Nicht authentifizierte („anonyme“) Benutzer

    users

    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 45.3, „Zugriffstypen“ angegebenen Optionen.

    Tabelle 45.3. Zugriffstypen

    Tag

    Umfang des Zugriffs

    none

    Kein Zugriff

    auth

    Für die Verbindung zum Server

    compare

    Für Objekt für Vergleichszugriff

    search

    Für den Einsatz von Suchfiltern

    read

    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 45.5, „slapd.conf: Beispiel für die Zugriffskontrolle“ ist ein Beispiel einer einfachen Zugriffskontrolle dargestellt, die mithilfe von regulären Ausdrücken beliebig entwickelt werden kann.

Beispiel 45.5. slapd.conf: Beispiel für die Zugriffskontrolle

access to  dn.regex="ou=([^,]+),dc=suse,dc=de"
by dn.regex="cn=administrator,ou=$1,dc=suse,dc=de" 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.

[Tip]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 ACIs (Access Control Information) zur Verfügung. Mit ACIs können Zugriffinformationen für einzelne Objekte innerhalb des LDAP-Baums gespeichert werden. Diese Art der Zugriffskontrolle 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.

45.3.2. Datenbankspezifische Direktiven in slapd.conf

Beispiel 45.6. slapd.conf: Datenbankspezifische Direktiven

database bdb
checkpoint      1024    5
cachesize       10000
suffix "dc=suse,dc=de"
rootdn "cn=admin,dc=suse,dc=de"
# 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

Der Datenbanktyp, in diesem Fall eine Berkeley-Datenbank, wird in der ersten Zeile dieses Abschnitts festgelegt (siehe Beispiel 45.6, „slapd.conf: Datenbankspezifische Direktiven“). Mit checkpoint wird die Datenmenge (in kb) festgelegt, die im Transaction Log gespeichert wird, bevor die Daten in die tatsächliche Datenbank geschrieben werden. Hiermit wird auch die Zeit (in Minuten) bestimmt, die zwischen zwei Schreibvorgängen vergeht. Mit cachesize wird die Anzahl der im Zwischenspeicher der Datenbank gespeicherten Objekte festgelegt. Mit suffix wird angegeben, für welchen Teil des LDAP-Baums dieser Server verantwortlich sein soll. 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. Das Administratorpasswort wird mit rootpw festgelegt. 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. Die an dieser Stelle für die Datenbank festgelegten benutzerdefinierten Regeln für Access können anstelle der globalen Access-Regeln verwendet werden.

45.3.3. Starten und Anhalten der Server

Nachdem der LDAP-Server vollständig konfiguriert und alle gewünschten Einträge gemäß dem in Abschnitt 45.4, „Datenbehandlung im LDAP-Verzeichnis“ beschriebenen Muster vorgenommen wurden, starten Sie den LDAP-Server als root, indem Sie den Befehl rcldap start eingeben. Durch Eingabe des Befehls rcldap stop können Sie den Server manuell anhalten. Den Status des laufenden LDAP-Servers fragen Sie mit rcldap status ab.

Mit dem in Abschnitt 28.2.3, „Konfigurieren von Systemdiensten (Runlevel) mit YaST“ beschriebenen Runlevel-Editor von YaST kann der Server automatisch beim Booten und Anhalten des Systems gestartet und angehalten werden. Darüber hinaus besteht die Möglichkeit, wie in Abschnitt 28.2.2, „Init-Skripts“ beschrieben, die entsprechenden Verknüpfungen zu den Start- und Anhaltsskripts mit dem Befehl insserv über die Befehlszeile zu erstellen.