LDAP Server

Aus Doku-Wiki
Zur Navigation springenZur Suche springen

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:

  1. slapd-dbd
  2. 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

OpenLdap.org
Server-How-To

CA erstellen

Ein Doku ist hier

Server-Request

Ein Doku ist hier

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