LDAP Server
Inhaltsverzeichnis
- 1 Anmerkung
- 2 Version und Voraussetzungen
- 3 Quellen
- 4 Installation
- 5 Konfiguration
- 6 Tuning des LDAP-Servers
- 7 Replikation von zwei LDAP-Server
- 8 TLS
- 9 Schema
- 10 LDAP-Inhalte
- 11 Log Dateien der DB löschen
- 12 LDAP-Backup und Recovery
- 13 LDAP-Abfragen
- 14 LDAP Benutzer und Gruppen anlegen
- 15 LDAP-Client Software zur Abfrage des LDAP-Servers
Anmerkung
Hier ist die Installation und Grundkonfiguration eines LDAP-Servers dokumentiert. Es sollen sich Benutzer an Linuxbasierte Desktop-Clients anmelden können. Im Verzeichnis werden Daten über Benutzer, Gruppen und deren Atribute bereit gestellt
Version und Voraussetzungen
Linux: Debian Linux Sarge
LDAP: SLAPD 2.2.23 (Stable)
Verwaltung: phpLdapAdmin 0.9.5-3sarge2
Quellen
Doku von OpenLdap.org
Linux LDAP HOWTO
Installation
# apt-get update
Ldap-Server-Programme
# apt-get install slapd libldap-2.2-7 libldap2 ldap-utils ldapdiff nscd
Ldap-Client-Programme
# apt-get install libnss-ldap libpam-ldap ldap-utils nscd
Berkeley v4.2 Database Utilities
# apt-get install db4.2-util libdb4.2 libdb4.3
Verwaltungstool für das LDAP-Verzeichnis
# apt-get install php4-ldap phpldapadmin
Bei der Installation des LDAP-Servers werden verschiedene Fragen getsellt. Sie können aber auch später in den Konfigurationsdateien, die im folgenden beschrieben werden, angepasst werden.
Konfiguration
slapd.conf
Diese Datei ist für die Konfiguration des LDAP-Server zuständig In der Datei /etc/ldap/slapd.conf habe ich zei Änderunegn vorgenommen
Anpassen des Suffix suffix "dc=MyDomain,dc=de" Anpassen der RootDN rootdn "cn=admin,dc=MyDomain,dc=de"
Später werden hier noch die SSL-Zertifikate angegeben. Dies aber weiter unten.
lapd.conf
Der LDAP-Server erwartet die Datei unter /etc/ldap/ldap.conf während der LDAP-Client sie unter /etc/ldap.conf erwartet. Mit einem Link kann man sich die Doppelarbeit ersparen.
# ln -s /etc/ldap/ldap.conf /etc/ldap.conf
In der ldap.conf habe ich folgende Anpassungen vorgenommen
Root-Verzeichnis des LDAP-Zweiges BASE dc=MyDomain, dc=de URI des LDAP-Servers und Protokoll (ldap://) URI ldap://fai-sarge.MyDomain.de Hostname des LDAP-Server HOST fai-sarge.MyDomain.de
libnss-ldap.conf
Diese Datei wird für den LDAP-Nameservice benötigt Folgende Einstellungen habe ich hier vorgenommen:
Hostname des LDAP-Servers HOST ldap.MyDomain.de Root-Verzeichnis des LDAP-Servers base dc=MyDomain,dc=de URI des LDDAP-Serves uri ldap://127.0.0.1/ Version des LDAP-Protokolls ldap_ version 3
pam_ldap.conf
Diese Datei wird für die PAM-Module benötigt, sofern eine Authentifizierung mittels LDAP geschehen soll. Folgende einträge habe ich vorgenommen:
Da die Einträge oben schon öfters erklärt sind, diesmal ohne Kommentar ;-) HOST ldap.MyDomain.de base dc=MyDomain,dc=de uri ldap://ldap.MyDomain.de/ ldap_version 3 rootbinddn cn=admin,dc=MyDomain,dc=de pam_password crypt
Tuning des LDAP-Servers
Informationen über das Tuning findet man in der MAN von:
- slapd-dbd
- slapd.conf
/etc/ldap/slapd.conf
# Specific Backend Directives for bdb: # Backend specific directives apply to this backend until another # 'backend' directive occurs backend bdb checkpoint 512 30 sizelimit unlimited timelimit unlimited
Index erstellen
# Indexing options for database #1 index objectClass eq index uid pres,eq index uidnumber pres,eq
Der folgende Index wird bei der Verwendung von syncrepl benötigt.
index entryCSN,entryUUID eq
Um den Index zu erstellen, muss der LDAP-Server angehalten werden.
# /etc/init.d/slapd stop
Jetz den Index erstellen:
# slapindex
Die Indexdateien werden in Verzeichnis /var/lib/ldap/ angelegt.
Slapindex erstellt die Indexdateien mit den Rechten des Benutzers, der slapindex aufruft.
Deshalb müssen hier mittels chown die Rechte auf den Benutzer geändert werden, unter dem der LDAP-Server läuft.
# chown openldap.openldap /var/lib/ldap/*
Nun den LDAP-Server wieder starten
# /etc/init.d/slapd start
Replikation von zwei LDAP-Server
slurpd
Fehlerbehaftet unter Last
LDAP-Master = ldap1 LDAP-Slave = LDAP2
- 1) Installation des zweiten Ldap-Server
- 2) Kopieren der slapd.conf und der Schema-Dateien
- 3) Sicherung des Masterserver ldap1
- 4) Den Master auf ReadOnly setzen, um eine Änderung der Daten zu verhindern
- 5) In den Slave die Sicherung vom Master einladen
- 6) Anpassen der slapd.conf auf dem Master und dem Slave
- 7) Start der Slapd und Slurp Dienst
1. Installation des zweiten Ldap-Server
# aptitude install slapd
2. Kopieren der slapd.conf und der Schema-Dateien
# scp -r /etc/ldap/. ldap2:/etc/ldap/
3. Sicherung des Masterserver ldap1
# slapcat -n 1 > /etc/ldap/sicherung.ldif
4. Den Master auf ReadOnly setzen, um eine Änderung der Daten zu verhindern /etc/ldap/slapd.conf
# Global Directives: readonly on
5. In den Slave die Sicherung vom Master einladen
# slapadd -n 1 < /etc/ldap/sicherung.ldif
6. Anpassen der slapd.conf auf dem Master und dem Slave MASTER ldap1
replica host=ldap2.villa.local:389 binddn="cn=admin,dc=villa,dc=local" bindmethod=simple credentials=villa replogfile /var/lib/ldap/replog
SLAVE ldap2# Where to store the replica logs for database #1
# replogfile /var/lib/ldap/replog updatedn "cn=admin,dc=villa,dc=local updateref ldap://ldap1.villa.local
7. Start der Slapd und Slurp Dienst
syncrepl
Syncrepl in der Version 2.2
MASTER ldap1 Hier sind keine Änderung an der /etc/ldap/slapd.conf notwendig
SLAVE ldap2 Folgendes in die Datei /etc/ldap/slapd.conf eintragen
syncrepl rid=123 provider=ldap://ldap1.villa.local:389 type=refreshOnly interval=00:00:03:00 searchbase="dc=villa,dc=local" scope=sub updatedn="cn=admin,dc=villa,dc=local" bindmethod=simple binddn="cn=admin,dc=villa,dc=local" credentials=villa
Syncrepl in der Version 2.3
Im der Version 2.3 wurde die Konfiguration von syncrepl geändert.
Es wird der Overlay syncrepl verwendet. Die OpenLdapversion muss für die Verwendung von Overlays kompiliert sein.
Bei Debian Etch muss Overlay-Modul Syncrepl in der slapd.conf geladen werden.
Um syncrepl verwenden zu können, sind Änderunge im Master (Provider) und Slave (Consumer) Server notwendig.
slapd.conf Provider
/etc/ldap/slapd.conf
# Global Directives: # # Where the dynamically loaded modules are stored modulepath /usr/lib/ldap moduleload back_bdb moduleload syncprov .. .. # Specific Backend Directives for bdb: # sizelimit unlimited timelimit unlimited .. .. # Specific Directives for database # database bdb overlay syncprov syncprov-checkpoint 100 10 syncprov-sessionlog 100 # The base of your directory in database #1 Suffix "dc=MyDomain,dc=de" # rootdn directive for specifying a superuser on the database. This is needed for syncrepl. 'rootdn "cn=admin,dc=MyDomain,dc=de"
slapd.conf Consumer
/etc/ldap/slapd.conf
# Global Directives: # # Read Only (Slave Server) readonly on # Where the dynamically loaded modules are stored modulepath /usr/lib/ldap moduleload back_bdb .. .. # Specific Backend Directives for bdb' # .. .. Specific Directives for database # database bdb # The base of your directory in database #1 Suffix "dc=MyDomain,dc=de" # rootdn directive for specifying a superuser on the database. This is needed for syncrepl. rootdn "cn=admin,dc=MyDomain,dc=de" syncrepl rid=123 provider=ldap://ldap01.MyDomain.de:389 type=refreshAndPersist oder type=refreshOnly interval=00:00:00:10 searchbase="dc=MyDomain,dc=de" scope=sub attrs="*" updatedn="cn=admin,dc=MyDomain,dc=de" bindmethod=simple binddn="cn=admin,dc=MyDomain,dc=de credentials=geheim
Um die Replikation über SSl/TLS zu verschlüsseln, wird der Synrepl-Anweisung noch der Parameter starttls=yes hinzu gefügt.
Voraussetung für eine verschlüsselte Übertragung ist, das die Konfiguration für SSL/TLS, wie unter dem Punkt TLS beschrieben,
durchgeführt wurde und funtioniert.
TLS
CA erstellen
Server-Request
Zertifikate im LDAP-Server einbinden
Nun muss in der slapd.conf das Zertifikat eingebinden werden. Dazu werden folgende Dateien bebötigt:
# Zertifikat: ldapcert.pem # Schlüsseldatei: ldapkey.pem # Zertifikat der CA: cacert.pem
In der Database-Section werden folgende Einträge hinzu gefügt:
TLSCipherSuite HIGH:MEDIUM:+SSLv2 TLSCACertificateFile /PathToCerts/cacert.pem TLSCertificateFile /PathToCerts/ldapcert.pem TLSCertificateKeyFile /PathToCerts/ldapkey.pem TLSVerifyClient never
Zertifikat-Eintrag beim Client
Das Zertifikat der CA (cacert.pem) wird auf dem Client benötigt. Es kann unter /etc/ssl/certs/cacert.pem abgelegt werden
/etc/pam_ldap.conf
host 172.27.100.3 172.27.100.3 base dc=MyDomain,dc=de ldap_version 3 ssl start_tls ## Bei erkannte das PAM-Module das Zertifikat nicht an, obwohl dieses OK war ## Deshalb wurde der Eintrag tls_checkpeer auf no gesetzt. tls_checkpeer no tls_cacertfile cacert.pem tls_cacertdir /etc/ldap tls_ciphers TLSv1 # logdir /tmp # debug 1
/etc/libnss-ldap.conf
@(#)$Id: ldap.conf,v 2.41 2005/03/23 08:30:16 lukeh Exp $ host 172.27.100.3 172.27.200.3 base ou=internet,dc=MyDomain,dc=de uri ldap://ldap01.MyDomain.de/ ldap://ldap02.MyDomain.de/ ldap_version 3 ssl start_tls tls_checkpeer no tls_cacertfile /etc/ldap/cacert.pem
/etc/ldap/ldap.conf
HOST 172.27.100.3 172.27.100.3 base dc=MyDomain,dc=de uri ldap://ldap01.MyDomain.de/ ldap://ldap02.MyDomain.de/ ssl start_tls tls_checkpeer yes tls_cacert /etc/ldap/cacert.pem
Schema
Die eindeutige Nummer zur Erzeugung eines eigenen Schemas erhält man von der IANA
Klassen
Struktur-Klasse
Erzeugt die Struktur
Hilfs-Klassen
Erweitert eine bestehende Struckturklasse
Abstrakt-Klassen
Es werden weder Struktur noch Erweiterungen erzeugt
Klasse erzeugen
Beispiel Sixt
Klassen-Name: uf-auto -> Strukturell
Attribute
|> Kennzeichen |> Sitzplatz |> Hersteller |> Baujahr |> Farbe {128}
Beispiel Ein Schema für ein KFZ
attributetype ( 1.3.6.1.4.1.19791.2.1.1 NAME 'mw-kennzeichen' DESC 'KFZ-Kennzeichen' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{20} SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.19791.2.1.2 NAME 'mw-sitzplatz' DESC 'Anzahl der eingetragenen Sitzplatz' EQUALITY IntegerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.19791.2.1.3 NAME 'mw-hersteller' DESC 'Fahrzeug Hesteller' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 ) attributetype ( 1.3.6.1.4.1.19791.2.1.4 NAME 'mw-baujahr' DESC 'Baujahr' EQUALITY IntegerMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE ) attributetype ( 1.3.6.1.4.1.19791.2.1.5 NAME 'mw-farbe' DESC 'Aussenlackierung' EQUALITY caseIgnoreIA5Match SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} SINGLE-VALUE ) objectclass ( 1.3.6.1.4.1.19791.2.2.1 NAME 'mw-auto' SUP top STRUCTURAL DESC 'Leihfahrzeug' MUST ( mw-kennzeichen ) MAY ( mw-sitzplatz $ mw-hersteller $ mw-baujahr $ mw-farbe ))
LDAP-Inhalte
Wie kommen die Inhalte in das LDAP-Verzeichnis. Hierfür gibt es mehrere Möglichkeiten.
Dabei kommt es meiner Ansicht nach auf die Menge der Daten an, die angelegt werden sollen.
- Einzelne Einträge
Diese können mit dem ldapadd-Befehl eingefügt werden.
Todo: Beispiel
- Aufbau eine komplexen Strucktur
Um eine komplexe Strucktur anzulegen, bietet sich an, diese in Textdateien zu schreiben. Diese können dann vom LDAP-Server eingelesen werden.
Todo: Beispiel
- phpLDAPadmin
Wenn beide LDAP-Server über den gleiche phpLdapadmin verwaltet werden, können die Daten einfach von einem zum anderen Server kopiert werden
Projekt-Homepage
phpLDAPadmin installieren
Doku von OpenLdap.org
Linux LDAP HOWTO
Log Dateien der DB löschen
cd /var/lib/ldap db_archive -d
LDAP-Backup und Recovery
Backup
Achtung: Für diese Befehle MUSS der SLAPD angehalten werden
slapcat > sicherung.ldif // -n 1 "gibt die zu sichernde Database an"
Recovery
Für ein Recovery aus einem Backup sollten folgende Schritte beachtet werden:
- Als erstes werden die alten SLAPD-Daten gelöscht. Per default liegen diese unter
Es können alle Dateien auser DB_CONFIG gelöscht werden /var/lib/ldap
- Mit dem Befehl slapadd wird das Backup zurückgesichert
slapadd -n 1 < sicherung.ldif // -n 1 "gibt die Database an in die zurückgesichert wird"
Dieser Befehl liest die LDIF-Daten (Txtfile) ein und schreibt diese in den Ldap-Server zurück.
- Danach müssen noch die Rechte im Verzeichnis /var/lib/ldap angepasst werden.
Unter Debian läuft der SLAP-Daemon unter dem Benutzer openldap:
chown openldap.openldap /var/lib/ldap/*
LDAP-Abfragen
ldapsearch -H ldap://localhost -b dc=MyDomain,dc=de -D cn=admin,dc=MyDomain,dc=de -x -W
Vereinfachen kann man die Suchabfragen, in dem man entweder in seinem Home Directory ein Datei
mit dem Namen .ldaprc anlegt, oder die /etc/ldap/ldap.conf editier.
Folgende Einträge müssen eingetragen werden:
BASE dc=MyDomain,dc=de BINDDN cn=admin,dc=MyDomain,dc=de HOST localhost
Danach kann die Suchabfrage auf folgendes reduziert werden:
ldapsearch -x -W
LDAP Benutzer und Gruppen anlegen
Gruppe
ldapadd -x -W <<LDIF > dn: ou=people,$DOMAIN > objectClass: top > objectClass: organizationalUnit > ou: people > > dn: ou=groups,$DOMAIN > objectclass: top > objectclass: organizationalUnit > ou: groups > LDIF
Benutzer
LDAP-Benutzer können sehr einfach mit dem Tool CPU angelegt werden. Zu beachten ist, dass dabei das Passwort leer bleibt und noch geändert werden.
# aptitude install cpu
Nach der Einrichtung wird mit folgendem Befehl der Benutzer angelegt
# cpu useradd [USERNAME]
Mit einem Script script kann die /etc/passwd ausgelesen werden um die LDAP-User anzulegen.
# cat /etc/passwd | perl -n -a -F: -e 'print $F[0], $/ if $F[2] > 10000 and $F[2] < 20000' | xargs -n 1 cpu useradd
Um diese LDAP-Benutzer für Samba zu verwende, verwendet man folgenden Befehl
# pdbedit -i smbpasswd # pdbedit -L # Zeigt die LDAP/SAMBA Benutzer an
LDAP-Client Software zur Abfrage des LDAP-Servers
- Apache Directory Studio
- gq
GT basiertes Tool - luma
- phpldapadmin
Webbasiertes Frontend zur verwaltung der LDAP-Einträge