Nutzeraccounts mit OpenLDAP zentral verwalten

Aus LinuxUser 09/2014

Nutzeraccounts mit OpenLDAP zentral verwalten

© limbi007, 123rf.com

Eines für alle

Gilt es, mehreren Nutzern das Login an verschiedenen Rechnern oder Anwendungen zu ermöglichen, bietet der Verzeichnisdienst das Mittel der Wahl.

In vielen Organisationen teilen sich Mitarbeiter inzwischen die vorhandene Arbeitsplätze. Auf den zugehörigen Rechnern entsprechende Anwender anzulegen und aktuell zu halten, wird für Admins schnell zu einer wahren Herausforderung. Dazu kommt, dass verschiedene Netzwerkdienste, beispielsweise der Apache Webserver oder der Mailserver Postfix eigene Benutzerverwaltungen erfordern. Pflegen Sie mehrere Nutzeraccounts auf verschiedenen Rechnern, ergeben sich neben den organisatorischen Schwierigkeiten auch Sicherheitsrisiken, etwa dann, wenn Sie Accounts ausgeschiedener Mitarbeiter auf einigen Maschinen vergessen.

LDAP

Dem beugt ein Verzeichnisdienst damit vor, dass er alle Nutzer zentral verwaltet. Hierfür bietet sich beispielsweise das Lightweight Data Access Protocol, kurz LDAP, an. Dabei handelt es sich um einen Verzeichnisdienst, mit dem beispielsweise Organisationen Daten über Nutzer und Geräte Rechner- und plattformübergreifend bereitstellen. Die Daten erlauben sowohl eine rechnerübergreifende Authentifikation, halten aber auch Telefon- und Adressdaten vor.

LDAP wurde 1993 entwickelt um via TCP/IP auf die in den 1980er Jahren aufgekommenen DAP-Datenbanken zuzugreifen. Diese nutzten damals einen X.500-Standard, der alle sieben Schichten des OSI-Referenzmodells umfasste, weshalb es aufwändig zu implementieren war. Ursprünglich konzipierten die Entwickler LDAP für Proxies, um DAP auf verschiedenen Systemen einfacher zugänglich zu machen, später erhielt es ein eigenes Datenbank-Backend, und arbeitete somit ohne DAP-Datenbank. Wie die dies baut auch LDAP seine Strukturen hierarchisch auf, sodass sich diese gut als Baum abbilden lassen. Dank seines objektorientierten Designs erlaubt es der Verzeichnisdienst, problemlos Vererbung und Polymorphie bei der Verwaltung der im LDAP-Baum gespeicherten Verzeichniseinträge zu nutzen.

Die Struktur der LDAP-Verzeichnisse ähnelt auf Lesezugriffe optimierten Dateiverzeichnissen. Wie diese besitzen sie eine Wurzel, unterhalb derer sich Containerobjekte (Organisational Units, OU) und Blattobjekte befinden. Diese OUs dürfen weitere Objekte enthalten und strukturieren so den Directory Information Tree (DIT). Unterhalb eines Blattobjekts erlauben die meisten LDAP-Implementierungen keine weiteren Objekte. Jedes Objekt im DIT verwendet einen eindeutigen Namen (Distinguished Name, DN), und bestimmte Eigenschaften, die Attribute, die Objektklassen und Schemata festelegen.

Je nach Definition müssen oder können Sie Attribute für ein Objekt vergeben. Ein für jedes Objekt zwingendes Attribut heißt Common Name, mit dem LDAP es im DIT erkennt und verwaltet. Ein Beispiel liefert die Objektklasse posixAccount (Listing 1) in der Sie die Attribute cn, uid, uidNumber, gidNumber und homeDirectory vergeben müssen, während userPassword, LoginShell, gecos und description Optionen darstellen.

Listing 1

objectclass (1.3.6.1.1.1.2.0 NAME 'posixAccount'
    DESC 'Abstraction of an account with POSIX attributes'
    SUP top
    AUXILIARY
    MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
    MAY ( userPassword $ loginShell $ gecos $ description )
)

Attribute verwaltet LADP getrennt von Objekten. Die besitzen innerhalb der DIT eindeutige Object Identifier (OID) und Namen. Sie enthalten ferner eine Beschreibung (DESC), eine Angabe zur Gleichheit (EQUALITY) und eine Syntaxbeschreibung in OID-Form.

Listing 2 zeigt beispielhaft das Attribut uidNumber, das auch in der Objektklasse posixAccount zum Einsatz kommt. Sämtliche OIDs finden Sie auf der Webseite von Harald Alvestrand [1] oder im OID Repository [2]. Wenn Sie eigene Attribute und Objektklassen benötigen, beispielsweise weil Sie mit LDAP mehr verwalten möchten als Nutzeraccounts, registrieren Sie bei der IANA [3] kostenlos eine eigene OID beziehungsweise Private Enterprise Number der Form iso.org.dod.internet.private.enterprise (1.3.6.1.4.1.x).

Verwenden Sie keine eindeutige OID, treten eventuell Probleme auf, wenn Sie irgendwann mehrere LDAP-Bäume mit eigenen Objektklassen zusammenführen. Eine genaue Anleitung, wie ein LDAP-Schema aufgebaut ist, finden Sie in den RFCs 4510 bis 4519 [4].

Listing 2

attributetype ( 1.3.6.1.1.1.1.0 NAME 'uidNumber'
  DESC 'An integer uniquely identifying a user in an \
  administrative domain'
  EQUALITY integerMatch
  SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )

OpenLDAP

Zum Verwalten von LDAP-Verzeichnissen stehen mehrere Lösungen bereit, beispielsweise Novells eDirectory, Microsofts Active Directory oder das unter Linux populäre OpenLDAP [5]. Dieses rief Kurt Zeilenga 1998 ins Leben. Kurz darauf kam Howard Chu hinzu; zusammen entwickelten sie Release 2.0, dessen Code-Basis ein an der University of Michigan entwickelter LDAP-Server war. Heute verwaltet das Projekt die OpenLDAP Foundation, dem der Projektgründer vorsitzt. Die Software zählt inzwischen Version 2.4.39.

Server installieren und konfigurieren

OpenLDAP finden Sie in den Repositorien der meisten Distributionen und installieren es mit den Paketwerkzeugen Ihrer Distribution. Unter Debian geben Sie dafür sudo apt-get install slapd ldap-utils ein. Der Installer fragt lediglich das Passwort des LDAP-Administrators ab (Abbildung 1).

Abbildung 1: Mit distributionseigenen Paketwerkzeugen wie apt-get installieren Sie den OpenLDAP-Server in wenigen Minuten. Das Einrichten erweist sich dagegen durchaus als kniffelig.

Abbildung 1: Mit distributionseigenen Paketwerkzeugen wie apt-get installieren Sie den OpenLDAP-Server in wenigen Minuten. Das Einrichten erweist sich dagegen durchaus als kniffelig.

Um später Daten zu ändern tippen Sie dpkg-reconfigure slapd. Das Paket ldap-utils enthält daneben einige Kommandozeilenprogramme, die Sie benötigen, um Verzeichniseinträge zu verwalten. Der Aufruf slapcat gibt den initialen DIT aus (Abbildung 2), das außer der Organisation und dem LDAP-Admin noch nicht viel enthält.

Abbildung 2: Slapcat zeigt den initialen DIT, den Container- und Blattobjekte im Laufe der Zeit zu einem riesigen Baum wachsen lassen.

Abbildung 2: Slapcat zeigt den initialen DIT, den Container- und Blattobjekte im Laufe der Zeit zu einem riesigen Baum wachsen lassen.

Dem helfen Sie mit einer Datei im Lightweight Database Interchange Format (LDIF) ab. In den LDIF-Dateien erzeugen Sie neue Container- oder Blattobjekte und ordnen ihnen Objektklassen und Attribute mit Werten zu. Listing 3 zeigt beispielhaft eine Organisation mit Abteilungen, die Organisational Units (OU), Vorstand und Geschäftsführung sowie einen Nutzer. Ein Objekt beginnt immer mit dem DN, gefolgt von Attributen und Objektklassen. Den Passworhash erhalten Sie mit slappasswd -s <§§I>geheim<§§I>. Viele Stringobjekte speichert LDAP Base64-kodiert ab, sodass Sie keinen Schreck bekommen müssen, wenn Ihnen später statt Beschreibungen und Passwort-Hashs wilde Zeichenungetüme begegnen.

Einzelne LDIF-Dateien übernehmen Sie mit dem Befehl

ldapadd -x -D "dn" -W -f ldif-datei

Der Inhalt der struktur.ldif aus Listing 3 würde etwa mit

ldapadd -x -D "cn=admin,dc=hochdrei,dc=local" -W -f struktur.ldif

seinen Weg ins LDAP-Verzeichnis finden. LDIF-Dateien und einige Skripten erlauben es, beliebig viele Objekte automatisiert zu erzeugen.

Listing 3

# struktur.ldif
# Vorstand
dn: ou=vorstand,dc=hochdrei,dc=local
ou: vorstand
objectclass: top
objectclass: organizationalunit
# Geschäftsführung
dn: ou=gf,dc=hochdrei,dc=local
ou: gf
description: Geschäftsführung
objectclass: top
objectclass: organizationalunit
# user Karl
dn: uid=karl,ou=vorstand,dc=hochdrei,dc=local
uid: karl
cn: Karl Aschnikow
givenName: Karl
sn: Aschnikow
userPassword: {SSHA}lv6ZgRfpIVmBWjps/7B1LoPeZLdyjV7q
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 100
homeDirectory: /home/karl
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: organizationalPerson
objectClass: person

Seit Version 2.3 unterstützt OpenLDAP eine dynamische Konfiguration, welche die meisten Distributionen automatisch aktivieren. Das bedeutet, dass es sämtliche Konfigurationsparameter in einem LDAP-Baum speichert und Sie diese über LDIF-Dateien ändern. Sie bringt den Vorteil mit, dass LDAP auch ohne Server-Neustart Änderungen sofort übernimmt. Es unterstützt zwar noch die statische Konfiguration via slapd.conf, diese gilt aber als überholt verwschwindet in absehbarer Zeit. Der Aufruf ldapsearch -Y EXTERNAL -H ldapi:/// -b "cn=config" gibt den kompletten Konfigurationsbaum aus (Abbildung 3). Hier zeigt sich ein Nachteil der dynamischen Konfiguration, denn sie gestaltet sich augenscheinlich etwas schwieriger als das Editieren einfacher Textdateien. Die Nutzerauthentifizierung sollte jedoch mit allen Distributionen von Hause aus funktionieren.

Abbildung 3: Die dynamischen Konfiguration übernimmt Parameter ohne Neustart des Servers in einem LDAP-Baum.

Abbildung 3: Die dynamischen Konfiguration übernimmt Parameter ohne Neustart des Servers in einem LDAP-Baum.

Clients einrichten

Um von der zentralen Nutzerverwaltung zu profitieren, benötigen Sie nur nur wenige Schritte. Linux nutzt für die Authentifizierung PAM und den Name Service Switch (NSS), um Benutzerdaten aus Datenbanken zu lesen, sodass Sie die entsprechende Pakete einspielen müssen. Unter Debian benötigen Sie dafür libnss-ldapd, libpam-ldapd und, wenn Sie Nutzern ein Abfragen des LDAP-Verzeichnisses gestatten möchten, auch die ldap-utils. Die Installationsroutine fragt alle relevanten Informationen ab, sodass Sie nur darauf achten müssen, dass sie mit denen des Servers übereinstimmen.

Anschließend teilen Sie dem NSS mit, von nun an auch LDAP-Server abzufragen, wenn sich ein Nutzer anmeldet. Dazu ergänzen Sie in der /etc/nsswitch.conf die mit passwd, group und shadow beginnenden Zeilen um ldap (Abbildung 4). Um Abfragen mit Ldapsearch und Konsorten an den Server zu senden, müssen Sie eventuell auch noch die Parameter für TLS_CACERT und URI in der /etc/ldap/ldap.conf anpassen.

Abbildung 4: In der <code srcset=

/etc/nsswitch.conf teilen Sie dem System mit, dass es Nutzerdaten auch in einem LDAP-Verzeichnis zu suchen soll.” width=”300″ height=”182″ /> Abbildung 4: In der /etc/nsswitch.conf teilen Sie dem System mit, dass es Nutzerdaten auch in einem LDAP-Verzeichnis zu suchen soll.

Jetzt können Sie sich anmelden. Falls es nicht gelingt, beobachten Sie beispielsweise mit tail -f /var/log/auth.log die für Authentifizierungen zuständige Logdatei. Es kommt vor, dass auf dem LDAP-Client noch kein Home-Verzeichnis für den User existiert, der sich einloggen möchte. Um es automatisch anzulegen, fügen Sie in der /etc/pam.d/common-session die folgende Zeile hinzu:

session    required   pam_mkhomedir.so skel=/etc/skel/ umask=0027

Arbeiten Ihre Nutzer mit verschiedenen Rechnern möchten deren Daten synchron halten, denken Sie darüber nach, einen NFS-Server ins Netz zu stellen, der die Heimatverzeichnisse bereitstellt.

Sichere Verbindung

Um zu verhindern, dass jemand die im Klartext übermittelten Nutzerdaten im Netz abgreift, gilt es die Verbindung mittels TLS abzusichern. Dazu erzeugen Sie Schlüssel und Zertifikate für den Server (Listing 4) und machen OpenLDAP mittels einer LDIF-Datei (Listing 5) mit ihnen bekannt (ldapmodify -Y EXTERNAL -H ldapi:// -f tls.ldif).

Listing 4

# Gnutls installieren
apt-get install gnutls-bin
mkdir /etc/ldap/certs ; cd /etc/ldap/certs
# ca Key
certtool --generate-privkey --outfile ca.key
# ca certificate
certtool --generate-self-signed --load-privkey ca.key --outfile ca.crt
# Server key
certtool --generate-privkey --outfile server.key
# Server certificate
certtool --generate-certificate --load-privkey server.key --load-ca-certificate ca.crt --load-ca-privkey ca.key --outfile server.crt
chown openldap:openldap *
chmod 444 *

Listing 5

# tls.ldif
dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/certs/ca.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/certs/server.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/certs/server.key
-
# tls erzwingen
add: add: olcSecurity
olcSecurity: tls=1
-
add: olcSecurity
olcSecurity: ssf=256

Hinterlegen Sie danach auf den Clients das CA-Zertifikat und geben Sie ihnen vor, TLS zu nutzen. Dazu passen Sie die /etc/nslcd.conf an, indem sie die Option ssl auskommentieren, auf start_tls setzen und hinter tls_cacertfile den Pfad zum CA-Zertifikat eintragen. Danach starten Sie den Nslcd neu. Bevor der LDAP-Verkehr auch verschlüsselt reibungslos läuft, erfordern die Einträge URI und TLS_CACERT in der /etc/ldap/ldap.conf eventuell etwas Aufmerksamkeit.

LDAP nutzen

Danach suchen Sie etwa Nutzer mit dem Aufruf ldapsearch -ZZ -x -LLL "<§§I>uid=karl<§§I>". -ZZ sorgt für Verschlüsselung, mit -x entfällt die SASL-Bindung an einen bestimmten Nutzer und -LLL unterdrückt Kommentare. Die Eingabe von ldapsearch -DD -x -LLL objectClass=posixAccount gibt alle Objekte aus, die welche die Klasse posixAccount geerbt haben. Der Schalter + an den Ldapsearch-Befehl angehängt, fördert Interessantes zu Tage.

Mit der Eingabe von

ldappasswd -ZZ -D "cn=admin,dc=hochdrei,dc=local" "uid=karl,ou=vorstand,dc=hochdrei,dc=local" -W -S

setzen Sie beispielsweise für den Nutzer karl aus der Abteilung vorstand ein neues Passwort. Möchte Karl es selbst ändern, erledigt er das mit

<C>ldappasswd -ZZ -D "uid=karl,ou=vorstand,dc=hochdrei,dc=local" -W -S<C>

Änderungen erfolgen entweder interaktiv oder mittels den bereits vorgestellten LDIF-Dateien. Möchten Sie beispielsweise nur ein Attribut ändern, könnte das wie in Listing 6 erfolgen, das die Organisation um die Attribute für Ort, Postanschrift und Postleitzahl ergänzt. Bei mehreren Attributen und Objekten kommt wohl niemand an den LDIF-Dateien vorbei, zumal Sie damit auch Fehler leichter ausgebügeln.

Listing 6

ldapmodify -ZZ -D "cn=admin,dc=hochdrei,dc=local" -W
dn: dc=hochdrei,dc=local
changetype: modify
add: l
l: Potsdam
-
add: postalcode
postalcode: 14482
-
add: postalAddress
postalAddress: Schulstraße 9[Strg]+[d]

Mit Ldapdelete befördern Sie Einträge ins Nirvana. Für den Beispielnutzer karl lautet der Aufruf

ldapdelete -ZZ -D "cn=admin,dc=hochdrei,dc=local" "uid=karl,ou=vorstand,dc=hochdrei,dc=local" -W"

Möchten Sie OpenLDAP-Verzeichnisse per grafischer Oberfläche verwalten, bietet sich der LDAP Account Manager [6], GOsa [7] oder Jxplorer [8] an.

Fazit

Geht es darum, zentrale Strukturen zu verwalten, bietet OpenLDAP bietet erhebliches Potential. Vor allem in der zentralen Nutzerveraltung spielt der Verzeichnisdienst seine Stärken aus, denn es gibt kaum eine Anwendung oder Programmiersprache ohne LDAP-Schnittstellen. Mailserver, CMS, Blog- und ERP-Systeme: LDAP-Verzeichnisse übernehmen auf Wunsch fast überall die Authentifizierung. Daneben eignet sich LDAP aber auch, um Geräte, Adressen, Inventar und alle möglichen anderen Dinge zu verwalten.

Zwar erklärt sich der komplexe Verzeichnisdienst nicht von selbst, sodass Sie mehr als ein Wochenende brauchen, um sich in die Materie einzuarbeiten. Es zu wagen lohnt sich vor allem dann, wenn Sie Netzwerke mit mehr als fünf Rechnern administrieren. 

Infos

[1] Object Identifier Registry von Harald Alvestrand: http://www.alvestrand.no/objectid/

[2] OID Repository: http://www.oid-info.com

[3] IANA Private Enterprise Number (PEN) Request Template: http://pen.iana.org/pen/PenApplication.page

[4] RFC 4510 (LDAP): Technical Specification Road Map: http://tools.ietf.org/html/rfc4510

[5] OpenLDAP: http://www.openldap.org

[6] LDAP Account Manager: https://www.ldap-account-manager.org/lamcms/

[7] GOsa: https://oss.gonicus.de/labs/gosa/

[8] Jxplorer: http://jxplorer.org

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 09/2014 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben