Index: network-servers/chapter.xml =================================================================== --- network-servers/chapter.xml +++ network-servers/chapter.xml @@ -5,7 +5,7 @@ $FreeBSD$ $FreeBSDde: de-docproj/books/handbook/network-servers/chapter.xml,v 1.103 2011/12/24 15:51:18 bcr Exp $ - basiert auf: r52450 + basiert auf: r52704 --> Tom Rhodes - Geschrieben von + Ursprünglich beigetragen von + Rocky + Hotas + + Aktualisiert von + + + + + Björn Heidotting @@ -2487,26 +2496,27 @@ LDAP Server &os; 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 übersetzt werden. + Beginnen Sie die Konfiguration mit der Installation des + Ports oder Pakets + net/openldap-server: - Als nächstes muss ein Verzeichnis für Daten sowie ein - Verzeichnis für die Zertifikate erstellt werden: + &prompt.root; pkg install openldap-server - &prompt.root; mkdir /var/db/openldap-data -&prompt.root; mkdir /usr/local/etc/openldap/private + Im + Paket sind eine große Anzahl an Optionen aktiviert. + Mit dem Befehl pkg info openldap-server + können diese überprüft werden. Falls die Optionen nicht + ausreichend sind (weil bspw. SQL-Unterstützung benötigt wird), + sollten Sie in Betracht ziehen, den Port mit dem + entsprechenden Framework neu zu übersetzen. - Kopieren Sie die Konfigurationsdatei der Datenbank: + Während der Installation wird für die Daten das + Verzeichnis /var/db/openldap-data + erstellt. Das Verzeichnis für die Ablage der Zertifikate + muss manuell angelegt werden: - &prompt.root; cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIG + &prompt.root; mkdir /usr/local/etc/openldap/private Im nächsten Schritt wird die Zertifizierungsstelle konfiguriert. Die folgenden Befehle müssen in @@ -2513,9 +2523,11 @@ /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: + keinen direkten Zugriff auf diese Daten haben sollten. + Weitere Informationen über Zertifikate und deren Parameter + finden Sie im . Geben Sie folgenden + Befehl ein, um die Zertifizierungsstelle zu erstellen und + folgen Sie den Anweisungen: &prompt.root; openssl req -days 365 -nodes -new -x509 -keyout ca.key -out ../ca.crt @@ -2536,7 +2548,9 @@ Stellen Sie hierbei sicher, dass Common Name richtig eingetragen wird. - Anschließend muss der Schlüssel signiert werden: + Die Zertifikatsregistrierungsanforderung muss mit dem + Schlüssel der Zertifizierungsstelle unterschrieben werden, um + als gültiges Zertifikat verwendet zu werden: &prompt.root; openssl x509 -req -days 365 -in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserial @@ -2550,179 +2564,367 @@ 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: + sind. - 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 + Der Daemon, auf dem der OpenLDAP-Server läuft, heißt + slapd. Die Konfiguration erfolgt über + slapd.ldif. Die alte + slapd.conf wird von OpenLDAP nicht mehr + verwendet. - Danach bearbeiten Sie - /usr/local/etc/openldap/ldap.conf und - fügen folgende Zeilen hinzu: + Konfigurationsbeispiele + für slapd.ldif finden sich auch in + /usr/local/etc/openldap/slapd.ldif.sample. + Optionen sind in slapd-config(5) dokumentiert. Jeder + Abschnitt in slapd.ldif wird, wie alle + anderen LDAP-Attributgruppen, durch einen DN eindeutig + identifiziert. Achten Sie darauf, dass keine Leerzeilen + zwischen der Anweisung dn: und dem + gewünschten Ende des Abschnitts verbleiben. Im folgenden + Beispiel wird TLS verwendet, um einen sicheren Kanal zu + implementieren. Der erste Abschnitt stellt die globale + Konfiguration dar: - TLS_CACERT /usr/local/etc/openldap/ca.crt -TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3 + # +# See slapd-config(5) for details on configuration options. +# This file should NOT be world readable. +# +dn: cn=config +objectClass: olcGlobal +cn: config +# +# +# Define global ACLs to disable default read access. +# +olcArgsFile: /var/run/openldap/slapd.args +olcPidFile: /var/run/openldap/slapd.pid +olcTLSCertificateFile: /usr/local/etc/openldap/server.crt +olcTLSCertificateKeyFile: /usr/local/etc/openldap/private/server.key +olcTLSCACertificateFile: /usr/local/etc/openldap/ca.crt +#olcTLSCipherSuite: HIGH +olcTLSProtocolMin: 3.1 +olcTLSVerifyClient: never - Kommentieren Sie die folgenden Einträge aus und setzen Sie - sie auf die gewünschten Werte: , - , und - . Setzen Sie bei - und - 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: + Hier müssen die Zertifizierungsstelle, das + Serverzertifikat und die privaten Schlüssel des Servers + angegeben werden. Es wird empfohlen, den Clients die Wahl der + Sicherheits-Chiffre zu überlassen und die Option + olcTLSCipherSuite wegzulassen (inkompatibel + mit anderen TLS-Clients als openssl). + Mit der Option olcTLSProtocolMin benötigt + der Server nur eine minimale Sicherheitsstufe. + Diese Option wird empfohlen. Während die Verfizierung für den + Server verpflichtend ist, ist sie es nicht für den Client: + olcTLSVerifyClient: never. - BASE dc=example,dc=com -URI ldap:// ldaps:// + Der zweite Abschnitt behandelt die Backend-Module und + kann wie folgt konfiguriert werden: -SIZELIMIT 12 -TIMELIMIT 15 + # +# Load dynamic backend modules: +# +dn: cn=module,cn=config +objectClass: olcModuleList +cn: module +olcModulepath: /usr/local/libexec/openldap +olcModuleload: back_mdb.la +#olcModuleload: back_bdb.la +#olcModuleload: back_hdb.la +#olcModuleload: back_ldap.la +#olcModuleload: back_passwd.la +#olcModuleload: back_shell.la -TLS_CACERT /usr/local/etc/openldap/ca.crt -TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3 + Der dritte Abschnitt widmet sich dem Laden der benötigten + ldif-Schemata, die von den Datenbanken verwendet werden + sollen. Diese Dateien sind essentiell. - Anschließend sollte das Standardpasswort für den Server - geändert werden: + dn: cn=schema,cn=config +objectClass: olcSchemaConfig +cn: schema - &prompt.root; slappasswd -h "{SHA}" >> /usr/local/etc/openldap/slapd.conf +include: file:///usr/local/etc/openldap/schema/core.ldif +include: file:///usr/local/etc/openldap/schema/cosine.ldif +include: file:///usr/local/etc/openldap/schema/inetorgperson.ldif +include: file:///usr/local/etc/openldap/schema/nis.ldif - 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 folgt der Abschnitt zur + Frontend-Konfiguration: - Als nächstes bearbeiten Sie - /usr/local/etc/openldap/slapd.conf und - fügen folgende Zeilen hinzu: + # Frontend settings +# +dn: olcDatabase={-1}frontend,cn=config +objectClass: olcDatabaseConfig +objectClass: olcFrontendConfig +olcDatabase: {-1}frontend +olcAccess: to * by * read +# +# Sample global access control policy: +# Root DSE: allow anyone to read it +# Subschema (sub)entry DSE: allow anyone to read it +# Other DSEs: +# Allow self write access +# Allow authenticated users read access +# Allow anonymous users to authenticate +# +#olcAccess: to dn.base="" by * read +#olcAccess: to dn.base="cn=Subschema" by * read +#olcAccess: to * +# by self write +# by users read +# by anonymous auth +# +# if no access controls are present, the default policy +# allows anyone and everyone to read anything but restricts +# updates to rootdn. (e.g., "access to * by * read") +# +# rootdn can always read and write EVERYTHING! +# +olcPasswordHash: {SSHA} +# {SSHA} is already the default for olcPasswordHash - password-hash {sha} -allow bind_v2 + Ein weiterer Abschnitt ist dem Konfigurations-Backend + gewidmet, der einzige Weg, später auf die + OpenLDAP-Serverkonfiguration zuzugreifen, ist als globaler + Superuser. - Das Suffix in dieser Datei muss aus - /usr/local/etc/openldap/ldap.conf - entsprechen. Zudem sollte die Option - ebenfalls gesetzt werden. Ein guter Wert ist beispielsweise - . Bevor die Datei gespeichert - wird, setzen Sie die Passwortausgabe von - slappasswd hinter die Option - . Das Endergebnis sollte in etwa wie - folgt aussehen: + dn: olcDatabase={0}config,cn=config +objectClass: olcDatabaseConfig +olcDatabase: {0}config +olcAccess: to * by * none +olcRootPW: {SSHA}iae+lrQZILpiUdf16Z9KmDmSwT77Dj4U - 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= + Der voreingestellte Benutzername für den Administrator + lautet cn=config. Geben Sie + slappasswd in eine Shell ein, wählen Sie + ein Passwort und verwenden Sie seinen Hash in + olcRootPW. Wenn diese Option jetzt nicht + angegeben ist, kann vor dem Import der + slapd.ldif niemand später den Abschnitt + global configuration ändern. - Aktivieren Sie abschließend - OpenLDAP in - /etc/rc.conf und setzen Sie die - URI: + Der letzte Abschnitt befasst sich mit dem + Datenbank-Backend: - slapd_enable="YES" -slapd_flags="-4 -h ldaps:///" + ####################################################################### +# LMDB database definitions +####################################################################### +# +dn: olcDatabase=mdb,cn=config +objectClass: olcDatabaseConfig +objectClass: olcMdbConfig +olcDatabase: mdb +olcDbMaxSize: 1073741824 +olcSuffix: dc=domain,dc=example +olcRootDN: cn=mdbadmin,dc=domain,dc=example +# Cleartext passwords, especially for the rootdn, should +# be avoided. See slappasswd(8) and slapd-config(5) for details. +# Use of strong authentication encouraged. +olcRootPW: {SSHA}X2wHvIWDk6G76CQyCMS1vDCvtICWgn0+ +# The database directory MUST exist prior to running slapd AND +# should only be accessible by the slapd and slap tools. +# Mode 700 recommended. +olcDbDirectory: /var/db/openldap-data +# Indices to maintain +olcDbIndex: objectClass eq - An dieser Stelle kann der Server gestartet und getestet - werden: + Diese Datenbank enthält den + eigentlichen Inhalt des + LDAP-Verzeichnisses. Neben + mdb sind weitere Versionen + verfügbar. Dessen Superuser, nicht zu verwechseln mit dem + globalen, wird hier konfiguriert: ein Benutzername in + olcRootDN und der Passworthash in + olcRootPW; slappasswd + kann wie zuvor benutzt werden. - &prompt.root; service slapd start + Dieses Repository + enthält vier Beispiele für slapd.ldif. + Lesen Sie diese Seite, um eine bestehende + slapd.conf in + slapd.ldif zu konvertieren. Beachten + Sie, dass dies einige unbrauchbare Optionen + einführen kann. - Wenn alles richtig konfiguriert ist, sollte eine Suche im - Verzeichnis, wie in diesem Beispiel, eine erfolgreiche - Verbindung mit einer Antwort liefern: + Wenn die Konfiguration abgeschlossen ist, muss + slapd.ldif in ein leeres Verzeichnis + verschoben werden. Folgendes ist die empfohlene + Vorgehensweise: - &prompt.root; ldapsearch -Z + &prompt.root; mkdir /usr/local/etc/openldap/slapd.d/ + + Importieren Sie die Konfigurationsdatenbank: + + &prompt.root; /usr/local/sbin/slapadd -n0 -F /usr/local/etc/openldap/slapd.d/ -l /usr/local/etc/openldap/slapd.ldif + + Starten Sie den slapd-Daemon: + + &prompt.root; /usr/local/libexec/slapd -F /usr/local/etc/openldap/slapd.d/ + + Die Option -d kann, wie in slapd(8) + beschrieben, zur Fehlersuche benutzt werden. Stellen Sie + sicher, dass der Server läuft und korrekt arbeitet: + + &prompt.root; ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts # extended LDIF - # # LDAPv3 -# base <dc=example,dc=com> (default) with scope subtree +# base <> with scope baseObject # filter: (objectclass=*) -# requesting: ALL +# requesting: namingContexts +# +# +dn: +namingContexts: dc=domain,dc=example + # search result -search: 3 -result: 32 No such object +search: 2 +result: 0 Success -# numResponses: 1 +# numResponses: 2 +# numEntries: 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: + Dem Server muss noch vertraut werden. Wenn dies noch nie + zuvor geschehen ist, befolgen Sie diese Anweisungen. + Installieren Sie das Paket oder den Port OpenSSL: - &prompt.root; service slapd stop -&prompt.root; /usr/local/libexec/slapd -d -1 - + &prompt.root; pkg install openssl - 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: + Aus dem Verzeichnis, in dem ca.crt + gespeichert ist (in diesem Beispiel + /usr/local/etc/openldap), starten + Sie: - dn: dc=example,dc=com -objectclass: dcObject -objectclass: organization -o: Example -dc: Example + &prompt.root; c_rehash . -dn: cn=Manager,dc=example,dc=com -objectclass: organizationalRole -cn: Manager + Sowohl die CA als auch das Serverzertifikat werden nun in + ihren jeweiligen Rollen korrekt erkannt. Um dies zu + überprüfen, führen die folgenden Befehl aus dem Verzeichnis + der server.crt aus: - 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: + &prompt.root; openssl verify -verbose -CApath . server.crt - &prompt.root; ldapadd -Z -D "cn=Manager,dc=example,dc=com" -W -f import.ldif -Enter LDAP Password: -adding new entry "dc=example,dc=com" + Falls slapd ausgeführt wurde, muss + der Daemon neu gestartet werden. Wie in + /usr/local/etc/rc.d/slapd angegeben, + müssen die folgenden Zeilen in + /etc/rc.conf eingefügt werden, um + slapd beim Booten ordnungsgemäß + auszuführen: -adding new entry "cn=Manager,dc=example,dc=com" + lapd_enable="YES" +slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ +ldap://0.0.0.0/"' +slapd_sockets="/var/run/openldap/ldapi" +slapd_cn_config="YES" - Stellen Sie mit einer Suche auf dem Server sicher, dass - die Daten importiert wurden. Nutzen Sie dazu - ldapsearch: + slapd bietet beim Booten keine + Möglichkeit zur Fehlersuche. Überprüfen Sie dazu + /var/log/debug.log, + dmesg -a und + /var/log/messages. - &prompt.user; ldapsearch -Z -# extended LDIF -# -# LDAPv3 -# base <dc=example,dc=com> (default) with scope subtree -# filter: (objectclass=*) -# requesting: ALL -# + Das folgende Beispiel fügt die Gruppe + team und den Benutzer + john zur + LDAP-Datenbank domain.example + hinzu, die bislang leer ist. Erstellen Sie + zunächst die Datei + domain.ldif: -# example.com -dn: dc=example,dc=com + &prompt.root; cat domain.ldif +dn: dc=domain,dc=example objectClass: dcObject objectClass: organization -o: Example -dc: Example +o: domain.example +dc: domain -# Manager, example.com -dn: cn=Manager,dc=example,dc=com -objectClass: organizationalRole -cn: Manager +dn: ou=groups,dc=domain,dc=example +objectClass: top +objectClass: organizationalunit +ou: groups -# search result -search: 3 -result: 0 Success +dn: ou=users,dc=domain,dc=example +objectClass: top +objectClass: organizationalunit +ou: users -# numResponses: 3 -# numEntries: 2 +dn: cn=team,ou=groups,dc=domain,dc=example +objectClass: top +objectClass: posixGroup +cn: team +gidNumber: 10001 - An dieser Stelle sollte der Server konfiguriert sein und - ordnungsgemäß funktionieren. +dn: uid=john,ou=users,dc=domain,dc=example +objectClass: top +objectClass: account +objectClass: posixAccount +objectClass: shadowAccount +cn: John McUser +uid: john +uidNumber: 10001 +gidNumber: 10001 +homeDirectory: /home/john/ +loginShell: /usr/bin/bash +userPassword: secret + + Weitere Informationen finden Sie in der + OpenLDAP-Dokumentation. Benutzen Sie + slappasswd, um das Passwort + durch einen Hash in + userPassword zu ersetzen. Der in + loginShell angegebene Pfad muss in + allen Systemen existieren, in denen + john sich anmelden darf. Benutzen + Sie schließlich den mdb-Administrator, + um die Datenbank zu ändern: + + &prompt.root; ldapadd -W -D "cn=mdbadmin,dc=domain,dc=example" -f domain.ldif + + Änderungen im Bereich + global configuration können nur vom + globalen Superuser vorgenommen werden. Angenommen die Option + olcTLSCipherSuite: HIGH:MEDIUM:SSLv3 wurde + ursprünglich definiert und soll nun gelöscht werden. + Dazu erstellen Sie zunächst eine Datei mit folgendem + Inhalt: + + &prompt.root; cat global_mod +dn: cn=config +changetype: modify +delete: olcTLSCipherSuite + + Übernehmen Sie dann die Änderungen: + + &prompt.root; ldapmodify -f global_mod -x -D "cn=config" -W + + Geben Sie bei Aufforderung das im Abschnitt + configuration backend gewählte + Passwort ein. Der Benutzername ist nicht erforderlich: + Hier repräsentiert cn=config den DN des zu + ändernden Datenbankabschnitts. Alternativ können Sie mit + ldapmodify eine einzelne Zeile der + Datenbank löschen, mit ldapdelete einen + ganzen Eintrag. + + Wenn etwas schief geht oder der globale Superuser nicht + auf das Konfigurations-Backend zugreifen kann, ist es + möglich, die gesamte Konfiguration zu löschen und neu zu + schreiben: + + &prompt.root; rm -rf /usr/local/etc/openldap/slapd.d/ + + slapd.ldif kann dann bearbeitet und + erneut importiert werden. Bitte folgenden Sie dieser + Vorgehensweise nur, wenn keine andere Lösung verfügbar + ist. + + Dies ist nur die Konfiguration des Servers. Auf demselben + Rechner kann auch ein LDAP-Client mit eigener, separater + Konfiguration betrieben werden.