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=blb-intranet,dc=de"

Anpassen der RootDN
rootdn "cn=admin,dc=intranet,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=blb-intranet, dc=de
  URI des LDAP-Servers und Protokoll (ldap://)
  URI     ldap://fai-sarge.blb-intranet.de
  Hostname des LDAP-Server
  HOST    fai-sarge.blb-intranet.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    fai-sarge.blb-intranet.de
  base    dc=blb-intranet,dc=de
  uri     ldap://fai-sarge.blb-intranet.de/
  ldap_version 3
  
  rootbinddn cn=admin,dc=blb-intranet,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

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

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

LDAP-Backup und Recovery

Achtung: Für diese Befehle MUSS der SLAPD angehalten werden

slapcat > sicherung.ldif        // -n 1 "gibt die zu sichernde Database an"

Jetz können die SLAPD-Daten gelöscht werden. Per default liegen diese unter
/var/lib/ldap. Hier kann mit rm * alles gelöscht werden.

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.

LDAP-Abfragen

ldapsearch -H ldap://localhost -b dc=linuxhotel,dc=de -D cn=admin,dc=linuxhotel,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=linuxhotel,dc=de
BINDDN cn=admin,dc=linuxhotel,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

  • gq
    GT basiertes Tool
  • luma
  • phpldapadmin
    Webbasiertes Frontend zur verwaltung der LDAP-Einträge