LDAP einrichtung für Interface

NacKteOmA

New Member
Hallo

Ich möchte gerade gerne einen LDAP Server aufsetzen. Installiert habe ich unteranderem OpenLDAP und SLDAP. Wie ich richtig verstanden habe sind beides LDAP Server richtig? Wenn dann würde ich gern mit SLDAP arbeiten, denn unteranderem sollen Passwörter via SSL verschlüsselt werden (die Config von OpenLDAP sieht doch sehr "schlicht" aus) und nicht in Klartext durchs Netzwerk gejagt werden.

LDAP möchte ich zur Authentifizierung nutzen. Es soll zur Verwaltung der einzelnen Webinterfaces dienen, die man ja zu tausenden leider hat und wenn man jemand weiteres Zugriff geben möchte muss man überall wieder einen Benutzer anlegen und alles weitere, wenn man das bei 50 Stück machen möchte nervt es natürlich ;)

Es sind vorwiegend PHP Interfaces mit eigenen Login oder PHP Seiten die via Htaccess Auth gesichert sind.

Das Problem ist die schlechte Dokumentation. Ich verstehe leider nicht wofür z.B. in SLDAP diese "Schematabellen" sind, auch nicht wie ich Nutzer anlegen kann und den entsprechenden Ordnern/Zugriffe setzen kann. In manchen Tutorials habe ich auch was von einer Datenbank gelesen obwohl ich selbst die ganze Zeit am rätseln bin ob LDAP Server eine eigene Datenbank besitzen.

Könnt ihr mir dort bei der Konfiguration etwas helfen (allgemeine Basics) oder ein gutes Tutorial/HowTo empfehlen? Wenn möglich natürlich gern auf Deutsch.

Wie gesagt leider gute hilfe über Googeln habe ich so nicht gefunden, viele waren sehr allgemein und haben im Grunde nur die "Baumstruktur" erklärt und die einzelnen Kürzel wie "uid" und ähnliches, aber selten wie man es direkt einrichtet.

OS des LDAP Servers: Gentoo 64bit
OS der Server auf dennen die Interface liegen: fast ausschließlich Gentoo

Über Hilfe freu ich mich natürlich immer :)
 
Installiert habe ich unteranderem OpenLDAP und SLDAP. Wie ich richtig verstanden habe sind beides LDAP Server richtig?
slapd ist der LDAP-Server von OpenLDAP.

Wenn dann würde ich gern mit SLDAP arbeiten, denn unteranderem sollen Passwörter via SSL verschlüsselt werden (die Config von OpenLDAP sieht doch sehr "schlicht" aus) und nicht in Klartext durchs Netzwerk gejagt werden.
Das kann der slapd.

In manchen Tutorials habe ich auch was von einer Datenbank gelesen obwohl ich selbst die ganze Zeit am rätseln bin ob LDAP Server eine eigene Datenbank besitzen.
Natürlich müssen LDAP-Server ihre Daten irgendwo speichern. Damit haben sie per Definition eine Datenbank. LDAP ist lediglich ein Protokoll.

OpenLDAP unterstützt verschiedene Backends, in denen der DIT gespeichert werden kann, u. a. BerkleyDB und relationale Datenbanken à la MySQL.

Könnt ihr mir dort bei der Konfiguration etwas helfen (allgemeine Basics) oder ein gutes Tutorial/HowTo empfehlen?
http://www.openldap.org/doc/admin24/
http://www.zytrax.com/books/ldap/
 
Schnelle Anleitung:

Installiere OpenLDAP. Der slapd sollte dabei sein, sonst ist was kaputt/falsch oder Du hast das falsche Paket erwischt (bei manchen Distributionen gibt es getrennte Client- und Server-Pakete - in dem Fall bitte beide installieren).

Konfiguriere den slapd. Die Konfigurationsdatei liegt normalerweise unter /etc/openldap/slapd.conf. Eine grundlegende Konfiguration könnte etwa so aussehen:

Code:
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema

pidfile	 /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

modulepath	/usr/libexec/openldap
moduleload	back_bdb
moduleload	back_hdb
moduleload	memberof
moduleload	refint

TLSCertificateFile    /etc/ssl/server-cert.pem
TLSCertificateKeyFile /etc/ssl/server-key.pem
TLSCACertificateFile  /etc/ssl/root.pem
TLSVerifyClient       allow

access to attrs=userPassword
  by self write
  by * auth

access to *
  by users read
  by anonymous auth

backend hdb
sizelimit unlimited
database hdb
cachesize 10000
suffix "dc=my-domain,dc=tld"
rootdn "cn=ldapadmin,dc=my-domain,dc=tld"
rootpw {SSHA}abcdef
directory /var/openldap/data
index objectClass eq
overlay memberof

Den Wert für rootpw kannst Du mit dem Tool slappasswd generieren. Pfade bitte natürlich anpassen, ggf. eigene Zertifikate generieren (TLS ist in jedem Fall zu empfehlen).

Die o. g. Konfiguration enthält schon einige wichtige Sachen, wie z. B. das MemberOf-Overlay und das Schema für InetOrgPerson.

Den slapd starten - zum Beispiel mit folgendem Befehl:
Code:
slapd -h ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap:/// ldaps:/// -u ldap -g ldap

Lade Dir zu Hause ein Admin-Tool herunter. Ich selbst bevorzuge Apache Directory Studio, aber es gibt natürlich auch noch andere Alternativen. Konfiguriere dieses Tool so, dass es sich mit Deinem LDAP-Server verbindet (TLS) und sich mit dem in der slapd-Konfiguration hart verdrahteten Admin-User authentifiziert. Nun kannst Du bequem weitere Objekte in Deinen DIT einbauen - OUs, User, Gruppen, ...

Wenn Du mehr Wissen erwerben möchtest, empfehle ich Dir den Erwerb eines Buches - OpenLDAP 2.4 von Oliver Liebel und John Martin Ungar beispielsweise ist ein gutes deutsches Buch, das auch die aktuelle Version von OpenLDAP abdeckt. Außerdem kann man sich da natürlich einiges an Hintergrundwissen anlesen, was man in Tutorials eben nicht findet (z. B. Kapitel zum DIT-Design, Aufbau eines ausfallsicheren LDAP-Verzeichnisses, Backend-Tuning, etc.).

Ergänzend zu Roger Wilco:
Wenn man OpenLDAP produktiv einsetzt, will man entweder das BDB oder das etwas modernere HDB Backend einsetzen. MySQL als Backend ist totaler Krampf und nicht gerade performant. Das LDIF-Backend ist hingegen sehr nützlich, wenn man selbst mit der Entwicklung eigener Schemata experimentiert - für den Produktiveinsatz ist aber auch dieses nicht zu empfehlen.
 
So ich melde mich wieder, habe mir unteranderem das hier erwähnte Apache Directory Studio installiert. Die Basis des LDAP Servers scheint zu laufen, also er startet und ist über den Rootuser (der in der config konfigurierte User) erreichbar.

Ich möchte jetzt schlicht folgende Struktur anlegen

"o" (Organisation)
"ou" (OrganisationUnit) und noch 2-3 ou's

darunter User mit PW (was muss ich dafür anlegen? Person richtig? Es gibt ja auch noch OrganisationPerson)

Ich wollte dann schlicht und einfach danach wieviel bzw. wo die Person Zugriff hat diese einfach in die entsprechende "ou" stecken und bei den Interfacen entsprechenden die "ou" abfragen um zu checken "darf er rein oder nicht". Würde das funktionieren?

Beim Anlegen von z.B. "o" Organisation über Directory Studio bekomme ich leider einen Fehler "LDAP: error code 53 - modify upon the root DSE not supported"

Er sagt ich darf auf "root ebene" sowas nicht ausführen, aber was muss ich dann machen :confused: ich komme dort nicht richtig weiter.
 
Du musst erst mal den DIT initial einrichten, damit er zu Deiner Konfiguration passt. Das machst Du am einfachsten über die Kommandozeile. Lege Dir eine Datei "root.ldif" an, mit folgendem Inhalt:

Code:
dn: dc=domain,dc=tld
objectClass: dcObject
objectClass: Organization
dc: domain
o: Deine Organisation

dn: cn=ldapadmin,dc=domain,dc=tld
objectClass: organizationalRole
cn: ldapadmin

Danach liest Du die Datei so ein (auf dem Server):

Code:
ldapadd -x -W -D cn=ldapadmin,dc=domain,dc=tld -f root.ldif

Anschließend besitzt Dein DIT auch tatsächlich einen Root-Knoten mit dem DN dc=domain,dc=tld (natürlich durch Deine eigenen Bezeichnungen Deiner (LDAP)-Domäne ersetzen). Unterhalb dieses Knotens kannst Du jetzt mit Apache Directory Studio weitere Objekte anlegen, z. B. vom Typ organizationalUnit (ou).

HTH
 
Ich wollte dann schlicht und einfach danach wieviel bzw. wo die Person Zugriff hat diese einfach in die entsprechende "ou" stecken und bei den Interfacen entsprechenden die "ou" abfragen um zu checken "darf er rein oder nicht". Würde das funktionieren?

Das würde grundsätzlich funktionieren, ist aber eigentlich nicht im Sinne des Erfinders. Hintergrund: Der Check bestünde darin, den DN des Users zu prüfen bzw. zu prüfen, ob ein User mit entsprechender DN (z. B. uid=user,ou=kindergarten,dc=domain,dc=tld für die OU "kindergarten") überhaupt existiert. Das macht LDAP-Abfragen unnötig kompliziert.

Eleganter löst man das über Gruppen. Dazu musst Du einfach nur Gruppen (objectClass: groupOfNames) anlegen, in denen Du die berechtigten Mitglieder einträgst (deren physische Position im DIT ist dabei egal, da der Eintrag über den DN erfolgt). So kannst Du einen User schon mal in mehrere Gruppen stecken und musst User nicht duplizieren und synchron halten, wenn ein User mehere Zugriffe bekommen soll.

Gruppenmitgliedschaften kann man dann über das in o. g. Konfiguration bereits aktivierte MemberOf-Overlay abfragen. Der folgende Filter prüft beispielsweise auf Existenz des User-Objekts und die Mitgliedschaft in der Gruppe "kindergarten":

Code:
(&(uid=<user-id>)(objectClass=inetOrgPerson)(memberOf=cn=kindergarten,dc=domain,dc=tld))
 
Last edited by a moderator:
Danke euch schon mal für die Hilfe. Ihr habt mir bisher schon großartig geholfen. Habe nun erfolgreich mein rootverzeichniss angelegt, endlich kommt man mal vorran.

Ich suche momentan noch das Modul "memberof". Unter meinem Ordner usr/lib64/openldap/openldap finde ich leider keiner "memberof.so" alles viele andere wie "ldap.so" und co findet man dort, leider kein memberof.so. Wo könnte ich mir diese besorgen? Emerge kannte diese kleine .so leider nicht.

Leider bin ich noch nicht so Gentoo erfahren, vielleicht konnte ich Emerge auch einfach nicht richtig bedienen :rolleyes:
 
groupOfNames bzw. groupOfUniqueNames (je nachdem, was für dich eher passt) sind in core.schema enthalten. Das musst du natürlich für deinen DIT laden.

Eine Erweiterung oder ein Overlay für OpenLDAP ist dafür nicht notwendig.
 
Die Overlays sind in der aktuellen OpenLDAP-Version nicht mehr als dynamische Bibliotheken enthalten (*.so-Dateien) - in dieser Form liegen nur noch die verschiedenen Backends vor. Aus historischen Gründen werden die mitgelieferten Overlays jedoch immer noch mit der moduleload-Direktive in der slapd.conf aktiviert.
 
Back
Top