Das Lightweight Directory Access Protocol (LDAP) ist ein Protokoll der Anwendungsschicht, das verwendet wird um Objekte mithilfe eines verteilten Verzeichnisdienstes abzurufen, zu verändern und zu authentifizieren. Betrachten Sie es als ein Telefonbuch, das homogene Informationen in mehreren hierarchischen Ebenen speichert. Es wird in Active Directory und OpenLDAP-Netzwerken eingesetzt, in denen Benutzer unter Verwendung eines einzigen Kontos auf diverse interne Informationen zugreifen. Beispielsweise kann E-Mail-Authentifizierung, Abfrage von Kontaktinformationen und Website-Authentifizierung über ein einzelnes Benutzerkonto aus der Datenbank des LDAP-Servers erfolgen.
Dieser Abschnitt enthält eine kompakte Anleitung, um einen LDAP-Server auf einem FreeBSD-System zu konfigurieren. Es wird vorausgesetzt, dass der Administrator bereits einen Plan erarbeitet hat, der verschiedene Punkte umfasst, unter anderem die Art der zu speichernden Informationen, für was die Informationen verwendet werden, welche Benutzer Zugriff auf die Informationen haben und wie die Informationen vor unbefugtem Zugriff geschützt werden.
LDAP verwendet mehrere Begriffe die Sie verstehen sollten bevor Sie die Konfiguration beginnen. Alle Verzeichniseinträge bestehen aus einer Gruppe von Attributen. Jede Attributgruppe enthält einen eindeutigen Bezeichner, der als distinguished name (DN) bekannt ist. Dieser setzt sich normalerweise aus mehreren anderen Attributen, wie dem Relative Distinguished Name (RDN) zusammen. Wie bei Verzeichnissen gibt es auch hier absolute und relative Pfade. Betrachten Sie DN als absoluten Pfad und RDN als relativen Pfad.
Beispielsweise könnte ein LDAP-Eintrag
wie folgt aussehen. Dieses Beispiel sucht nach dem Eintrag
für das angegebene Benutzerkonto (uid
),
Organisationseinheit (ou
und Organisation
(o
):
%
ldapsearch -xb "uid=
# extended LDIF # # LDAPv3 # base <uid=trhodes,ou=users,o=example.com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # trhodes, users, example.com dn: uid=trhodes,ou=users,o=example.com mail: trhodes@example.com cn: Tom Rhodes uid: trhodes telephoneNumber: (123) 456-7890 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries:1trhodes
,ou=users
,o=example.com
"
Die Einträge in diesem Beispiel zeigen die Werte für die
Attribute dn
, mail
,
cn
, uid
und
telephoneNumber
. Das Attribut
cn
ist der RDN.
Weitere Informationen über LDAP und dessen Terminologie finden Sie unter http://www.openldap.org/doc/admin24/intro.html.
FreeBSD integriert keinen LDAP-Server. Beginnen Sie die Konfiguration durch die Installation des Ports oder Pakets net/openldap24-server. Da der Port viele konfigurierbare Optionen hat, ist es empfehlenswert zu prüfen, ob die Installation des Pakets ausreichend ist. Wenn Sie irgendwelche Optionen ändern möchten, ist es besser den Port zu übersetzen. In den meisten Fällen sollten die Standardwerte ausreichend sein. Wenn Sie jedoch SQL-Unterstützung benötigen, muss diese Option aktiviert und der Port nach den Anweisungen in Abschnitt 5.5, „Benutzen der Ports-Sammlung“ übersetzt werden.
Als nächstes muss ein Verzeichnis für Daten sowie ein Verzeichnis für die Zertifikate erstellt werden:
#
mkdir /var/db/openldap-data
#
mkdir /usr/local/etc/openldap/private
Kopieren Sie die Konfigurationsdatei der Datenbank:
#
cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG
Im nächsten Schritt wird die Zertifizierungsstelle
konfiguriert. Die folgenden Befehle müssen in
/usr/local/etc/openldap/private
ausgeführt werden. Dies ist wichtig, da die
Dateiberechtigungen restriktiv gesetzt werden und Benutzer
keinen direkten Zugriff auf diese Daten haben sollten. Geben
Sie folgenden Befehl ein, um die Zertifizierungsstelle zu
erstellen und folgen Sie den Anweisungen:
#
openssl req -days
365
-nodes -new -x509 -keyout ca.key -out ../ca.crt
Diese Einträge sind frei wählbar,
mit Ausnahme von
Common Name. Hier muss etwas anderes als
der Hostname des Systems eingetragen werden. Wenn ein
selbstsigniertes Zertifikat verwendet wird, stellen Sie dem
Hostnamen einfach das Präfix CA
für die
Zertifizierungsstelle voran.
Die nächste Aufgabe besteht darin, einen Zertifikatsregistrierungsanforderung (CSR) sowie einen privaten Schlüssel zu erstellen. Geben Sie folgenden Befehl ein und folgen Sie den Anweisungen:
#
openssl req -days
365
-nodes -new -keyout server.key -out server.csr
Stellen Sie hierbei sicher, dass
Common Name
richtig eingetragen wird.
Anschließend muss der Schlüssel signiert werden:
#
openssl x509 -req -days
365
-in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserial
Der letzte Schritt für die Erstellung der Zertifikate besteht darin, die Client-Zertifikate zu erstellen und zu signieren:
#
openssl req -days
365
-nodes -new -keyout client.key -out client.csr#
openssl x509 -req -days 3650 -in client.csr -out ../client.crt -CAkey ca.key
Achten Sie wieder auf das Attribut
Common name
. Stellen Sie außerdem sicher,
dass bei diesem Verfahren acht (8) neue Dateien erzeugt worden
sind. Der nächste Schritt besteht darin,
/usr/local/etc/openldap/slapd.conf
zu
editieren und folgende Optionen hinzuzufügen:
TLSCipherSuite HIGH:MEDIUM:+SSLv3 TLSCertificateFile /usr/local/etc/openldap/server.crt TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key TLSCACertificateFile /usr/local/etc/openldap/ca.crt
Danach bearbeiten Sie
/usr/local/etc/openldap/ldap.conf
und
fügen folgende Zeilen hinzu:
TLS_CACERT /usr/local/etc/openldap/ca.crt TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3
Kommentieren Sie die folgenden Einträge aus und setzen Sie
sie auf die gewünschten Werte: BASE
,
URI
, SIZELIMIT
und
TIMELIMIT
. Setzen Sie bei
URI
ldap://
und
ldaps://
ein. Fügen Sie danach zwei Einträge
ein, die auf die Zertifizierungsstelle verweisen. Wenn Sie
fertig sind, sollten die Einträge wie folgt aussehen:
BASE dc=example,dc=com URI ldap:// ldaps:// SIZELIMIT 12 TIMELIMIT 15 TLS_CACERT /usr/local/etc/openldap/ca.crt TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3
Anschließend sollte das Standardpasswort für den Server geändert werden:
#
slappasswd -h "{SHA}" >> /usr/local/etc/openldap/slapd.conf
Dieser Befehl wird nach einem Passwort fragen und, wenn
der Prozess nicht fehlschlägt, ein Passwort-Hash an das
Ende von slapd.conf
hinzufügen. Es
werden verschiedene Hash-Formate unterstützt. Weitere
Informationen hierzu finden Sie in der Manualpage von
slappasswd
.
Als nächstes bearbeiten Sie
/usr/local/etc/openldap/slapd.conf
und
fügen folgende Zeilen hinzu:
password-hash {sha} allow bind_v2
Das Suffix in dieser Datei muss BASE
aus
/usr/local/etc/openldap/ldap.conf
entsprechen. Zudem sollte die Option rootdn
ebenfalls gesetzt werden. Ein guter Wert ist beispielsweise
cn=Manager
. Bevor die Datei gespeichert
wird, setzen Sie die Passwortausgabe von
slappasswd
hinter die Option
rootpw
. Das Endergebnis sollte in etwa wie
folgt aussehen:
TLSCipherSuite HIGH:MEDIUM:+SSLv3 TLSCertificateFile /usr/local/etc/openldap/server.crt TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key TLSCACertificateFile /usr/local/etc/openldap/ca.crt rootpw {SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=
Aktivieren Sie abschließend
OpenLDAP in
/etc/rc.conf
und setzen Sie die
URI:
slapd_enable="YES" slapd_flags="-4 -h ldaps:///"
An dieser Stelle kann der Server gestartet und getestet werden:
#
service slapd start
Wenn alles richtig konfiguriert ist, sollte eine Suche im Verzeichnis, wie in diesem Beispiel, eine erfolgreiche Verbindung mit einer Antwort liefern:
#
ldapsearch -Z
# extended LDIF # # LDAPv3 # base <dc=example,dc=com> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # search result search: 3 result: 32 No such object # numResponses: 1
Wenn der Befehl fehlschlägt, aber die Konfiguration
richtig aussieht, stoppen Sie den
slapd
-Dienst. Starten Sie anschließend
den Dienst mit
Debugging-Optionen:
#
service slapd stop
#
/usr/local/libexec/slapd -d -1
Sobald der Dienst antwortet, kann das Verzeichnis mit dem
Befehl ldapadd
bestückt werden. In diesem
Beispiel gibt es eine Datei mit einer Liste von Benutzern, die
diesem Verzeichnis hinzugefügt werden. Die Einträge sollten
das folgende Format haben:
dn: dc=example
,dc=com
objectclass: dcObject objectclass: organization o:Example
dc:Example
dn: cn=Manager
,dc=example
,dc=com
objectclass: organizationalRole cn:Manager
Um diese Datei zu importieren, geben Sie den Dateinamen an. Bei dem folgenden Befehl werden Sie wieder zur Eingabe des Passworts aufgefordert, das Sie zuvor eingegeben haben. Die Ausgabe sollte wie folgt aussehen:
#
ldapadd -Z -D "cn=
Enter LDAP Password: adding new entry "dc=example,dc=com" adding new entry "cn=Manager,dc=example,dc=com"Manager
,dc=example
,dc=com
" -W -fimport.ldif
Stellen Sie mit einer Suche auf dem Server sicher, dass
die Daten importiert wurden. Nutzen Sie dazu
ldapsearch
:
%
ldapsearch -Z
# extended LDIF # # LDAPv3 # base <dc=example,dc=com> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # example.com dn: dc=example,dc=com objectClass: dcObject objectClass: organization o: Example dc: Example # Manager, example.com dn: cn=Manager,dc=example,dc=com objectClass: organizationalRole cn: Manager # search result search: 3 result: 0 Success # numResponses: 3 # numEntries: 2
An dieser Stelle sollte der Server konfiguriert sein und ordnungsgemäß funktionieren.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.