lug-in.de
Linux User Group Ingolstadt e.V.
Startseite
Der Verein
Technikecke
Mailingliste
Kalender
Impressum

Login

Wie installiert man einen LDAP-Server mit OpenLDAP Server

Konventionen:

Zeichen

Bedeutung

$

Symbolisiert die Konsoleneingabeaufforderung mit root-Rechten

\<TAB\>

Stellt ein besonderes Zeichen dar, hier das Tabulatorzeichen. Die Backslash-Zeichen(\) wurden wegen Formatierungsproblemen des MoinMoin-Wikisystems hinzugefügt. Man kann sich diese also getrost wegdenken.

" "

Umschliesst eine Zeichenkette, dient zur korrekten Identifizierung einer Zeichenkette

" " " "

Gemeint sind hier genau zweimal das doppelte Hochkommatazeichen (ASCII-Zeichen 22), das erste und das letzte Hochkommata dient nur der Identifizierung der Zeichenkette.

Sinn eines LDAP-Servers

In großen IT- und Serverumgebungen, arbeiten viele Benutzer von verschiedenen Rechnersystemen aus. Außerdem kommt es oft vor, dass sich Benutzer auf jedem Rechner anmelden können müssen. Um dies sicherzustellen, könnte auf jedem Rechner ein Benutzerkonto von jedem Benutzer dafür anlegen. Dank der Erfindung von Verzeichnisservern und des Netzwerkes, kann man auch einfach einen LDAP-Server einrichten, die Benutzer nur einmal, zentral in dortigem Verzeichnis eintragen und man erreicht den selben Effekt, sogar mit positiven Nebeneffekten. Zum Beispiel muss man bei einer Änderung des Passwortes nur ein Passwort ändern und nicht das Passwort auf jedem Rechner. Das spart nicht nur Zeit sondern verhindert eine unnötige redundante Speicherung sowie unnötige Komplexität der IT-Umgebung. Hier werde ich erklären, wie man so einen LDAP-Server unter Debian-basierten Systemen installiert. Dazu wird nur ein Internetzugang, ein Texteditor (z. B. vim, emacs, nano, ...) und Zugang zu Administratorrechten benötigt.

Installation des OpenLDAP Servers

Die Installation des OpenLDAP Serverpakets (im Repository unter "slapd" benannt) kann man durch aptitude erledigen:

$ aptitude install slapd

Hinweis: Sollte slapd vor nicht installiert gewesen sein, dann wird man nach der Installation nach dem Administratorpasswort in einem Textinterface gefragt. Diese Abfrage kann übersprungen werden.

Nach der Installation wird der slapd sogleich gestartet. Dies stört die Einrichtung unseres LDAP-Servers, deshalb muss der Server beendet werden:

$ /etc/init.d/slapd stop

Generierung eines TLS-Serverzertifikats für verschlüsselten Datenverkehr

Da in diesem LDAP-Verzeichnis auch Benutzerdaten gespeichert werden sollen, wäre es dämlich, den Datenverkehr zwischen dem LDAP-Server einem Client nicht zu verschlüsseln. Nein, es wäre sogar schlicht und einfach dumm, denn es wäre ohne große Umstände möglich, sich vertrauliche Benutzerdaten anzueignen und damit in das Clientsystem zu gelangen. Aus diesem Grund soll auf TLS-Funktionalitäten (TransportLayerSecurity, Nachfolger von SSL) nicht verzichtet werden.

Dafür brauchen wir erst ein Zertifikat. Dieses kann wie folgt generiert werden (benötigt openssl):

$ openssl req -new -x509 -nodes -out /etc/ldap/slapcert.pem -keyout /etc/ldap/slapdkey.pem

Sobald dieses Kommando ausgeführt wurde, werden Informationen zum Server und zum Aussteller abgefragt. Besonders wichtig ist der so genannte Common Name(CN), denn der muss genauso lauten wie der komplette Servername, inklusive des Domainnamens. Also zum Beispiel: "ldap.ich.de" oder "ldap.local". Wenn Sie nicht wissen, wie der komplette Name ihres Rechners im Netzwerk lautet, können Sie ihn mit dem Befehl

$ hostname --fqdn

auf der Konsole ausgeben lassen.

Durch den oberen Befehl wurden zwei Dateien unter "/etc/ldap/" erzeugt:

Zertifikatdatei, dass den öffentlichen Schlüssel enthält, mit dem sich Clients mit dem LDAP-Server verbinden können.

Schlüsseldatei: Enhält den geheimen Schlüssel, den der Server zum Entschlüsseln des Datenverkehrs vom Client benötigt.

Damit der LDAP-Server "slapd" diese Schlüsseldateien benutzt, wird im Abschnitt 4.3 die serverseitige Konfiguration für TLS in der Konfigurationsdatei von OpenLDAP vorgenommen.

Passwort des LDAP-Administrators für die Konfigurationsdatei aufbereiten

Das Passwort für den LDAP-Administrator ist in der Konfigurationsdatei gespeichert. Es ist jedoch durch eine Hash-Funktion verschlüsselt. Diese Hash-Funktion wird mit "slappasswd" wie folgt angewendet, um das Passwort zu verbergen:

slappasswd wird ohne Parameter aufgerufen und liest das Passwort von der Tastatur ein. Das Passwort muss man zweimal hintereinander angeben. Danach wird auf der Konsole eine Zeichenkette in folgender Form ausgegeben: '{SSHA}...'

Das '...' steht für mehrere ASCII-Zeichen, die für den Menschen kein lesbares Wort ergeben und die Ausgabe der Hash-Funktion darstellen.

Schritt 1: Aufruf v. slappasswd:

$ slappasswd >> /etc/ldap/slapd.conf

Hier wird die Ausgabe von slappasswd (also das gehashte Passwort) gleich in die Konfigurationsdatei umgeleitet. WICHTIG sind hierbei die doppelten Umleitungspfeile '>>', damit der vorige Inhalt der Datei nicht überschrieben wird. Wurde versehentlich nur ein Pfeil '>' getippt, dann muss das Paket slapd nochmal installiert werden.

Schritt 2: erste Eingabe Passwort

New password:

Hinweis:

Das Passwort wird während der Eingabe nicht angezeigt, auch nicht als *, ?, oder ein ähnliches Zeichen.

Schritt 3: zweite Eingabe Passwort

Re-enter password:

Editieren der Konfigurationsdatei des OpenLDAP Servers

Die Konfigurationsdatei des OpenLDAP-Servers ist unter /etc/ldap/slapd.conf gespeichert. Hier müssen diverse Änderungen vorgenommen werden. Verwenden Sie hierzu einen Texteditor ihrer Wahl, den sie gut bedienen können.

Schritt 1: Datenbanksuffix angeben

Die Zeile 56 beginnt mit dem Wort "suffix". Rechts durch ein Tabulatorzeichen getrennt steht in doppelten Hochkommata der Name der Datenbank und das Suffix für alle Einträge der Datenbank.

Der Name muss in folgendes geändert werden: "dc=lug-in,dc=de"

Die Zeile sieht dann so aus: "suffix<TAB>"dc=lug-in,dc=de""

Schritt 2: Administratorkonto und -passwort festlegen

Als nächstes ist es notwendig das Administratorkonto und sein Passwort festzulegen. Ändern Sie Zeile 60 "# rootdn ..." wie folgt:

original Zeile 60: "# rootdn "cn=admin,dc=..."" nach Änderung: "rootdn "cn=admin,dc=lug-in,dc=de""

Es empfiehlt sich, direkt danach das gehashte Passwort anzugeben: "rootpw<TAB>"

Nach dem Tabulatorzeichen muss nun das in Schritt 3 gehashte Passwort eingetragen werden.

Zeile 61 sieht danach ungefähr so aus: "rootpw<TAB>{SSHA}..."

"..." steht wie oben für ASCII-Zeichen, die für den Menschen kein lesbares Wort ergeben. Hinweis: Beachten Sie bitte, dass hier keine Hochkommata verwendet werden.

Schritt 3: TLS einrichten

Damit der LDAP Server TLS Funktionen bereitstellen kann, müssen die in Schritt 2 erzeugten Dateien, dem LDAP-Server bekannt gemacht werden. Dies erreicht man durch zwei Anweisungen, in der Konfigurationsdatei. Nach der Anweisung "directory" in Zeile 63 wird nun Folgendes eingefügt:

TLSCertificateFile<TAB>/etc/ldap/slapdcert.pem
TLSCertificateKeyFile<TAB>/etc/ldap/slapdkey.pem

Die erste Anweisung definiert den Pfad zum Zertifikat, die Zweite den zum Schlüssel. Die leere Zeile am Anfang ist aus Gründen der Übersichtlichkeit eine gute Arbeitsweise und daher zu empfehlen.

Schritt 4: Zugriffskontolllisten (ACLs anpassen)

Im unteren Abschnitt werden ACL (access control lists) für den Zugriff auf die Datenbank definiert. Hier steht noch der alte Name für das Administratorkonto in Zeile 107 und in Z. 126. Diese müssen auf den aktuellen Namen geändert werden:

Anstatt "cn=admin, dc=...", muss dort

Beseitigen der Initialdatenbank

Standardmäßig wir die Datenbank unter /var/lib/openldap initialisiert. Da diese jedoch einen ungültigen Inhalt besitzt (wegen der Änderung des Suffix), muss diese gelöscht und neu aufgebaut werden.

Schritt 1: Löschen

$ rm -f /var/lib/openldap/*

Schritt 2: Neuinitialisieren

Es müssen am Anfang min. zwei Einträge in der Datenbank vorhanden sein:

dc=lug-in,dc=de das root-Objekt der Datenbank (alle anderen Einträge sind Untereinträge dieses Eintrages)

cn=admin,dc=lug-in,dc=de Benutzereintrag des Administratorkontos

Um diese Einträge in die Datenbank zu schreiben, legen Sie zunächst eine Datei namens "initialcontent.ldif" mit folgendem Inhalt an:

dn: dc=lug-in,dc=de
objectClass: top
objectClass: dcObject
objectClass: organization
o: Linux User Group Ingolstadt

dn: cn=admin,dc=lug-in,dc=de
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {SSHA}...
description: LDAP administrator

Hinweis: In Zeile 11 "userPassword: {SSHA}..." muss anstatt "{SSHA}..." das gehashte Passwort von vorher eingefügt werden. Es muss identisch mit dem sein, dass in der Konfigurationsdatei /etc/ldap/slapd.conf in der Zeile von "rootpw" steht.

Die gerade erstelle LDIF-Datei kann nun mit "slapadd" direkt in die Datenbank geschrieben werden:

$ slapadd -l initialcontent.ldif

Überprüfen Sie das Ergebnis, indem Sie sich mit dem folgenden Kommando den Inhalt der Datenbank ausgeben lassen:

$ slapcat

Startoptionen für den OpenLDAP Server "slapd" anpassen

Da der LDAP-Server standartmäßig nicht mit verschlüsseltem Datenverkehr arbeitet, müssen wir das Startkommando von "slapd" ändern. Das Startkommando und weitere Optionen steht in der Datei "/etc/default/slapd". Wichtig zu wissen ist, dass diese Datei vom direkt vom Init-Skript verwendet wird, d.h. "/etc/default/slapd" ist wie "/etc/init.d/slapd" ein Shellskript. Zu ändern ist Zeile 24:

Original:

# SLAPD_SERVICES="ldap://127.0.0.1 ldaps:/// ldapi:///"

Nach Änderung:

SLAPD_SERVICES="ldap://127.0.0.1 ldaps:////"

Testen des LDAP-Servers

Gestartet werden kann der LDAP-Server zu Testzwecken mit folgendem Kommando:

$ slapd -h ldaps:/// -d 9

Sollte der Server sich nicht beenden, dann ist alles gut gelaufen! Herzlichen Glückwunsch! Hat er sich beendet, dann wars nicht so glücklich. In diesem Fall hilft das Internet bestimmt weiter (siehe Links weiter unten). Im Weiteren wird davon ausgegangen, dass hier alles gut gelaufen ist.

Ob wir wirklich einen Server mit SSL/TLS Fähigkeiten installiert haben und wie diese genau aussehen kann sieht man nach der Ausführung dieses Befehls (benötigt gnutls-bin):

$ gnutls-cli-debug localhost -p 636

Anstatt "localhost" kann auch der Name des Rechners im Netzwerk angegeben werden. Nun sieht man eine Auflistung aller Berschlüsselungsfähigkeiten des Servers.

Installation und Einrichtung von LAM (LDAP Account Manager)

LDAP Account Manager (kurz LAM) ist eine Web-Oberfläche zum Verwaltung von Benutzerkonteneinträgen in LDAP-Datenbanken, dass sehr großen Wert auf einfache Bedienung und Flexibilität setzt. Es ist in der Standarddistribution von Debian enthalten und benötigt deshalt kaum Aufwand zum Einrichten.

Schritt 1: Installation des Pakets

$ aptitude install ldap-account-manager

Schritt 2: Einrichten von LAM

In der Datei "/etc/php5/apache2/php.ini" müssen noch ein paar Einstellungen vorgenommen werden. Öffnen Sie diese Datei mit Administratorrechten in einem Texteditor und suchen Sie die Zeile "memory_limit = 16M". Ändern Sie den Wert "16M" in "64M". Damit wird der maximale Speicherverbrauch eines PHP-Skripts auf 64 Megabyte erhöht. Speichern Sie die geänderte Datei ab und schließen Sie sie.

Die nächste Datei, die geändert werden muss heißt "/etc/ldap-account-manager/config.cfg". In dieser Datei steht das "Masterpasswort", für die Administrationsoberfläche von lam. Im Texteditor geöffnet, kann man bei Administratorrechten das Passwort ändern, indem man in der 2ten Zeile den Wert "lam" ändert. !! Ich möchte an dieser Stelle dringend empfehlen, das Passwort zu ändern!! Es wäre sonst ein leichtes Spiel für Angreifer in das System einzudringen !!

Zusätzlich muss die Datei "/usr/share/ldap-account-manager/config/lam.conf" wie folgt beschrieben geändert werden:

Zu änderndes Dateifragment im Originalzustand:

types: suffix_user: ou=People,dc=my-domain,dc=com
types: attr_user: #uid;#givenName;#sn;#uidNumber;#gidNumber
types: modules_user: inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount

types: suffix_group: ou=group,dc=my-domain,dc=com
types: attr_group: #cn;#gidNumber;#memberUID;#description
types: modules_group: posixGroup,sambaGroupMapping

types: suffix_host: ou=machines,dc=my-domain,dc=com
types: attr_host: #cn;#description;#uidNumber;#gidNumber
types: modules_host: account,posixAccount,sambaSamAccount

types: suffix_smbDomain: ou=domains,dc=my-domain,dc=com
types: attr_smbDomain: sambaDomainName:Domain name;sambaSID:Domain SID
types: modules_smbDomain: sambaDomain

richtige, geänderte Version:

types: suffix_user: ou=People,<ihr "Tree suffix">
types: attr_user: #uid;#givenName;#sn;#uidNumber;#gidNumber
types: modules_user: inetOrgPerson,posixAccount,shadowAccount,sambaSamAccount

types: suffix_group: ou=group,<ihr "Tree suffix">
types: attr_group: #cn;#gidNumber;#memberUID;#description
types: modules_group: posixGroup,sambaGroupMapping

types: suffix_host: ou=machines,<ihr "Tree suffix">
types: attr_host: #cn;#description;#uidNumber;#gidNumber
types: modules_host: account,posixAccount,sambaSamAccount

types: suffix_smbDomain: ou=domains,<ihr "Tree suffix">
types: attr_smbDomain: sambaDomainName:Domain name;sambaSID:Domain SID
types: modules_smbDomain: sambaDomain

Ersetzen Sie hierbei <ihr "Tree suffix"> durch ihre Werte, die in der LDAP-Datenbank stehen. Sie erhalten ihr Tree Suffix durch folgenden Befehl als Ausgabe auf der Konsole:

$ slapcat | grep 'dn: dc' | sed 's/dn: //'

Nachdem die Änderung in "lam.conf" gespeichert wurde, kann mit der Einrichtung mittles der Weboberfläche beginnen. Starten Sie einen Webbrowser wie Mozilla Firefox und geben Sie "http://localhost/lam/" als Webadresse ein. Sie sollten jetzt das Anmeldeformular von LAM sehen. Klicken Sie nun auf den Link "LAM configuration" auf der rechten oberen Ecke. Danach auf "Edit server profiles". Nachdem Sie das vorher festgelegte Masterpasswort eingegeben haben, haben Sie die Möglichkeit, diverse Einstellungen durchzuführen. Passen Sie "Server address" und "Tree Suffix" jeweils auf geltende Werte an. Das richtige "Tree suffix" erhalten Sie bei einem Aufruf von "slapcat" mit Administratorrechten. Ändern Sie auch die Zeitzone (hier "Time zone") und Standartsprache (hier "Default language"). Damit LAM Zugriff auf den LDAP-Server erhält, müssen Sie zusätzlich den richtigen, kompletten Namen des LDAP-Administrators angeben. Sobald Sie die Änderungen vorgenommen haben bestätigen Sie mit einem Klick auf "Ok".

TODO: Vervollständigen

$ /etc/init.d/slapd start