Debian LDAP

Aus Wiki
Zur Navigation springen Zur Suche springen

Allgemein

Mittels LDAP (Lightweigh Directory Access Protocol) können User-Informationen, aber auch zahlreiche Informationen von Diensten, in einer zentralen, hierarchischen Datenbank abgelegt werden, die unter anderem netzwerkweit zur User-Authentifizierung verwendet werden kann. Dadurch müssen einzelne User nur einmalig angelegt und gepflegt werden und stehen auf allen mit dem LDAP-Server verbundenen Systemen zur Verfügung. Die Userinformationen können nicht nur zur Userauthentifizierung für die Linux-Shell, sondern auch für zahlreiche weitere Dienste wie Email, FTP, Webserver, Groupware, usw. verwendet werden. Aber nicht nur Userdaten, sondern auch Adressbuchdaten, IP-Adressen des DHCP-Servers, usw. können in einem LDAP Directory abgelegt werden.

In der LDAP Datenbank werden die Daten hierarchisch in Baumform angelegt (DIT Directory Information Tree).

  • Die Basis (dn: Distinguished Name) des LDAP Directories wird üblicherweise vom Domainnamen abgeleitet. Z.B. die Domain test.lan wird in LDAP folgendermaßen abgebildet: LDAP_Base: dc=test,dc=lan. Die Domain test.homelinux.local als dc=test,dc=homelinux,dc=local
  • Elemente darunter könnten z.B. User (People) und Gruppen (Groups) sein, in denen die jeweiligen Linux-User und Gruppen definiert werden. Diese sog. Organizational Units (ou) werden folgendermaßen in LDAP abgebildet: ou=People,dc=test,dc=lan.
  • Ein User Tux könnte dann z.B. folgendermaßen angesprochen werden: uid=tux,ou=People,dc=test,dc=lan.
  • Es können aber auch noch deutlich mehr Ebenen abgebildet werden.

Sogar die komplette Konfiguration von OpenLDAP wird in einem eigenen DIT namens cn=config abgelegt. Dadurch können Konfigurationsänderungen on the fly durch hinzufügen, ändern bzw. löschen von Attributen erfolgen, ohne OpenLDAP nach jeder Änderung neu starten zu müssen.


LDAP Server Installation

Installation der Pakete

apt-get install slapd ldap-utils

Folgende Informationen eingeben:

  • Administrator password: LDAP_ADMIN_PWD
  • Confirm password: LDAP_ADMIN_PWD


Konfiguration

vi /etc/ldap/ldap.conf

Folgende Einstellungen vornehmen:

URI  ldap://IP_DES_SERVER 
BASE LDAP_Base  z.B. dc=test,dc=lan

Informationen werden mit Hilfe von .ldif Files in's LDAP Directory übertragen. Es ist empfehlenswert diese Files zentral in einem eigenen Unterverzeichnis zu verwalten, wobei die Files nach dem Import in die LDAP Datenbank eigentlich gar nicht mehr benötigt werden.

mkdir /root/ldap_ldif


Admin Passwort für Konfigdatenbank

Das bei der Installation angelegte Admin-Passwort gilt standardmäßig nur für die Daten, nicht für das Konfigurationsbackend cn=config. Für dieses ist in der Debian Installation gar kein Passwort vergeben, sodass sich kein Admin dort anmelden kann, um Ändereungen vorzunehmen.

Passwort-Hast erstellen

ldappasswd -h {SSHA}

Zweimal das geünschte Passwort eingeben, z.B. 1234. Die Ausgabe könnte folgendermaßen aussehen:

{SSHA}S+XGDyJeYuXkUn7ndqUdrmEf8jsMmUUI

Diesen Hash kopieren.

vi /root/ldap_ldif/add_cn-adm-pwd.ldif

Folgende Zeilen einfügen (Den Passwort-Hash olcRootPW mit eben generiertem Hash ersetzen):

dn: cn=config
changetype: modify

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}S+XGDyJeYuXkUn7ndqUdrmEf8jsMmUUI

Ins Directory übernehmen:

ldapadd -Y EXTERNAL -H ldapi:/// -f /root/ldap_ldif/add_cn-adm-pwd.ldif


Inizes

Mit Hilfe von Indizes kann die Suche im LDAP Directory beschleunigt werden.

vi /root/ldap_ldif/index.ldif

Folgende Zeilen einfügen (ohne zusätzliche Leerzeilen zwischen den Informationen):

dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uid eq
-
add: olcDbIndex
olcDbIndex: cn eq
-
add: olcDbIndex
olcDbIndex: ou eq
-
add: olcDbIndex
olcDbIndex: dc eq
-
add: olcDbIndex
olcDbIndex: memberUid eq
-
add: olcDbIndex
olcDbIndex: member eq
-
add: olcDbIndex
olcDbIndex: gidNumber eq

Die Informationen ins LDAP Directory übernehmen:

ldapmodify -cxWD cn=admin,cn=config -f /root/ldap_ldif/index.ldif


Organisational Units für User und Gruppen

Üblicherweise werden User und Gruppen in Organisational Units (ou) innerhalb von LDAP verwaltet. Um die Units anzulegen, folgendermaßen vorgehen:

vi /root/ldap_ldif/tree.ldif

Folgende Zeilen einfügen (incl. Leezeile zwischen people und groups OU):

dn: ou=people,dc=test,dc=lan
ou: people
objectClass: organizationalUnit

dn: ou=groups,dc=test,dc=lan
ou: groups
objectClass: organizationalUnit

Die Informationen ins LDAP Directory übernehmen:

ldapadd -cxWD cn=admin,dc=test,dc=lan -f /root/ldap_ldif/tree.ldif


Loglevel

Standardmäßig konfiguriert Debian LDAP, sodass keine Logausgaben erfolgen. Zur Fehlersuche sind aber Loginforamtionen meist sehr hilfreich. Evtl. Logausgaben werden im Syslog (/var/log/syslog) ausgegeben. Loginformationen können folgendermaßen ein- und ach wieder deaktiviert werden:

 vi /root/ldap_ldif/loglevel.ldif

Logausgaben aktivieren:

Folgende Zeilen einfügen:

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats

Logausgaben deaktivieren:

Folgende Zeilen einfügen:

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: none

Die Informationen ins LDAP Directory übernehmen:

ldapmodify -cxWD cn=admin,cn=config -f /root/ldap_ldif/loglevel.ldif


Funktionstest Server

Mit dem Befehl slapcat werden zahlreiche Informationen des LDAP-Directories ausgegeben.

slapcat

Die Ausgabe könnte folgendermaßen aussehen:

dn: dc=test,dc=lan
objectClass: top
objectClass: dcObject
objectClass: organization
o: test.lan
dc: test
structuralObjectClass: organization
entryUUID: 95bcb4b4-9eab-1031-9b24-5d17a552c400
creatorsName: cn=admin,dc=test,dc=lan
createTimestamp: 20120929180232Z
entryCSN: 20120929180232.259042Z#000000#000#000000
modifiersName: cn=admin,dc=test,dc=lan
...

Directory durchsuchen:

ldapsearch -xLLL

Die Ausgabe könnte folgendermaßen aussehen:

dn: dc=test,dc=lan
objectClass: top
objectClass: dcObject
objectClass: organization
o: test.lan
dc: test

dn: cn=admin,dc=test,dc=lan
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

dn: ou=people,dc=test,dc=lan
ou: people
objectClass: organizationalUnit

dn: ou=groups,dc=test,dc=lan
ou: groups
objectClass: organizationalUnit

Admin User Eintrag suchen:

ldapsearch -xLLL cn=admin

Die Ausgabe könnte folgendermaßen aussehen:

dn: cn=admin,dc=schiele,dc=lan
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator


User und Gruppen anlegen

Bulbgraph.png Hinweis:

Es empfiehlt sich, die User- und Gruppen- ID (uid/gid) >2000 zu wählen, damit die LDAP User und Gruppen nicht mit den "normalen" Unix Usern (/etc/passwd) und Gruppen (/etc/groups) kolliedieren, die im Berich >1000 angelegt werden.


Gruppe

Um eine Gruppe GROUP mit der ID GID anzulegen folgendermaßen vorgehen (GROUP und ID müssen eindeutig sein):

vi /root/ldap_ldif/group.ldif

Folgende Zeilen einfügen und anpassen:

dn: cn=GROUP,ou=groups,dc=test,dc=lan
cn: GROUP
gidNumber: GID
objectClass: top
objectClass: posixGroup
ldapadd -cxWD cn=admin,dc=test,dc=lan -f /root/ldap_ldif/group.ldif


User

Um einen User USER mit der ID UID, der zur Gruppe mit ID GID gehört, folgendermaßen vorgehen (USER, GROUP und ID müssen eindeutig sein):

vi /root/ldap_ldif/user.ldif

Folgende Zeilen einfügen und anpassen:

dn: uid=USER,ou=people,dc=test,dc=lan
uid: USER
uidNumber: UID
gidNumber: GID
objectClass: top
objectClass: inetOrgPerson
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/USER
ldapadd -cxWD cn=admin,dc=test,dc=lan -f /root/ldap_ldif/ueser.ldif

Passwort für den User USER vergeben:

ldappasswd -x -D cn=admin,dc=test,dc=lan-W -S uid=USER,ou=people,dc=test,dc=lan


Schema Konvertscript

Schemata bestimmen die Organisation der Daten. Um den LDAP-Tree um weitere Daten- und Dienste zu erweitern, z.B. für Samba, müssen die Schema-Files in LDIF-Files konvertiert werden, damit diese in den LDAP-Tree importiert werden können. Zu diesem Zweck dient folgendes Script, um diesen Vorgang zu automatisieren.

vi /usr/local/bin/schema2ldif.sh

Folgende Zeilen einfügen:

#!/bin/bash

cfg="/etc/schema_convert.conf"

schema_name=$1
TEMPDIR=`mktemp -d`

trap "rm -r $TEMPDIR" 0 1 2 3

if [ ! -f $cfg ] ;then
  touch $cfg
  for f in "core" "collective" "corba" "cosine" "duaconf" "dyngroup" "inetorgperson" "java" "misc" "nis" "openldap" "ppolicy"; do
    echo "include /etc/ldap/schema/${f}.schema" >> $cfg
  done
fi

chk=`grep "${schema_name}" ${cfg}`
if [ -z "${chk}" ]
then
  echo "include /etc/ldap/schema/${schema_name}.schema" >> $cfg
fi

index_num=$(slapcat -f $cfg -F $TEMPDIR -n 0 | grep ${schema_name}, | sed -e 's/^.*{/{/' -e 's/}.*$/}/' )

slapcat -f $cfg -F $TEMPDIR -n0 -s cn=${index_num}${schema_name},cn=schema,cn=config | sed -e "s/^dn: cn=${index_num}/dn: cn=/" -e "s/^cn: ${index_num}/cn: /" -e '/^structuralObjectClass: olcSchemaConfig/,$d' > /etc/ldap/schema/${schema_name}.ldif

Script ausführbar machen:

chmod +x /usr/local/bin/schema2ldif.sh


Optional: SSL Verschlüsselung serverseitig akzeptieren

Die Übertragung der LDAP-Daten (z.B. User und Passwort-Hashes) kann mittels SSL-Vershlüsselung abgesichert werden.

gnuTLS CA

apt-get install gnutls-bin
mkdir /etc/ldap/ssl
cd /etc/ldap/ssl
mkdir key
mkdir certs
mkdir templates
vi templates/ca.tmpl

Folgende Zeilen einfügen (evtl. cn und expiration_days Einträge anpassen):

cn = Test gnuTls CA
ca
cert_signing_key
expiration_days = 3650

CA Keyfile generieren:

certtool --generate-privkey --outfile cakey.pem

CA Root Zertifikat erstellen:

certtool --generate-self-signed --load-privkey cakey.pem --template templates/ca.tmpl --outfile cacert.pem

CA Root Zertifikat prüfen:

certtool --infile cacert.pem --certificate-info

Es werden zahlreiche Informationen zum Zertifikat ausgegeben. Folgende Punkte sollten geprüft werden:

Issuer: CN=Test gnuTLS CA
Subject: CN=Test gnuTLS CA
Validity: (10 Jahre)
Certificate Authority (CA): TRUE
Key Usage (critical): Certificate signing.

Zertifakte generieren

Keyfile generieren:

certtool --generate-privkey --outfile key/ldap-server.key

Template:

vi /templates/ldap-server.tmpl

Folgende Zeilen einfügen und den Eintrag cnanpassen (der cn muss auf den DNS-Namen des Servers bzw. die IP-Adresse gesetzt werden, die später im Connection String der Clients verwendet werden soll. Ansonsten funktioniert der Zugriff später nicht):

organization = Private
cn = ldap1.test.lan
tls_www_server
encryption_key
signing_key
expiration_days = 3650

Selbstsigniertes Zertifikat generieren:

certtool --generate-certificate --load-privkey key/ldap-server.key --load-ca-certificate cacert.pem --load-ca-privkey cakey.pem --template templates/ldap-server.tmpl --outfile certs/ldap-server-cert.pem

Zertifikat prüfen:

certtool --infile certs/ldap-server-cert.pem --certificate-info

Es werden zahlreiche Informationen zum Zertifikat ausgegeben. Folgende Punkte sollten überprüft werden:

Issuer: CN=Test gnuTLS CA
Validity: 10 Jahre (3650 Tage)
Subject: O=Private,CN=ldap1.lan
Certificate Authority (CA): FALSE
Key Purpose (not critical): TLS WWW Server.
Key Usage (critical):  Digital signature.
                       Key encipherment.


Zertifikate in LDAP Folder kopieren

cp cacert.pem /etc/ldap/ssl/
cp key/ldap-server.key /etc/ldap/ssl/
cp certs/ldap-server-cert.pem /etc/ldap/ssl/

Rechte anpassen:

chown -R root:openldap /etc/ldap/ssl
chmod -R o-rwx /etc/ldap/ssl


Konfiguration

OpenLDAP ldif-File erstellen:

vi /root/ldap_ldif/tls.ldif

Folgende Zeilen einfügen:

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/ssl/cacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/ldap-server-cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap-server.key

TLS-Konfiguration ins LDAP Directory einbinden:

ldapmodify -cxWD cn=admin,cn=config -f /root/ldap_ldif/tls.ldif

SSL aktivieren (ldaps://):

vi /etc/default/slapd

Die Zeile

SLAPD_SERVICES="ldap:/// ldapi:///"

folgendermaßen erweitern:

SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///"

LDAP-Konfig-File:

vi /etc/ldap/ldap.conf

Folgende Einstellungen vornehmen:

URI  ldaps://IP_DES_SERVER 
BASE LDAP_Base  z.B. dc=test,dc=lan
TLS_CACERT /etc/ldap/ssl/cacert.pem
TLS_REQCERT never

OpenLDAP neu starten:

/etc/init.d/slapd restart


Funktionstest Server SSL

ldapsearch -xLLL

Ausgaben analog zu LDAP Funktionscheck


Optional: Grafisches User Account Admin Tool

Im folgenden wird der LDAP Acccount Manager (LAM) näher beschrieben, mit dessen Hilfe Linux User/Gruppen, Samba User Details usw. auf relativ einfache Art-und Weise grafisch im Webbrowser administriert werden können. Dies ist erheblich einfacher und weniger fehleranfällig, als oben beschriebene Vorgehensweise mittels .lidif File.

Bulbgraph.png Hinweis:
Der LDAP Account Manager kann, muss aber nicht zwingend auf dem selben Server installiert werden, wie der LDAP-Server. Nachdem Apache nötig ist, empfiehlt es sich, den LDAP-Manager auf dem Webserver zu installieren.


Installation

Debian Repository

LDAP Account Manager ist in den Debian-Repositories enthalten. Die Version ist allerdings bereits etwas älter, sodass nicht alle Features zur Verfügung stehen.

apt-get install ldap-account-manager


Debian Paket Download und Installation

Neben obiger Version aus den Debian Repositories, kann die jeweils aktuelle stabile Version auch als Debian Paket heruntergeladen und installiert werden. Diese Vorgehensweise ist nur geringfügig aufwändiger als obiges Vorgehen.

cd /usr/local/src
wget http://sourceforge.net/projects/lam/files/LAM/4.0.1/ldap-account-manager_4.0.1-1_all.deb
apt-get install php5-ldap php-fpdf php5-gd
dpkg -i ldap-account-manager_4.0.1-1_all.deb

Konfiguration

  • Webbrowser öffnen und http://IP_DES_SERVER/lam eingeben


General Settings

  • Links oben auf den Link LAM configuration" klicken
  • Edit general settings anwählen
  • Passwort eingeben (LAM_MASTER_PWD Standardmäßig nach der Installation: lam)
  • Hier können je nach Bedarf eingie Einstellungen vorgenommen werden:
    • Session Timeout: Nach längerer Inaktivität (Session Timeout in Minuten) muss das Passwort erneut eingegeben werden.
    • Allowed Hosts: Zugriffsbeschränkung auf bestimmte IP-Adressen/Hosts
    • Password Policy: Beschränkungen für Passwörter.
    • Logging: Falls Probleme mit LAM auftauchen kann es evtl. hilfreich sein, den Loglevel zu erhöhen (z.B. auf Debug), um mehr Hinweise zu erhalten
    • Es kann auch hilfreich sein, die Logausgaben in ein eigenes File (z.B. /var/log/lam.log) ausgeben zu lassen. Dieses muss mit touch /var/log/lam.log angelegt und die Zugriffsrechte mit chmod 777 /var/log/lam.log erhöht werden.
    • Change master Password (LAM_MASTER_PWD): Setzt ein neues Masterpasswort, das den Zugriff auf die LAM-Settings schützt (nicht das Zugriffspasswort auf das LDAP Directory).
    • Nachdem alle Einstellungen vorgenommen sind, den Button Ok anklicken
    • Anschließend kehrt LAM zum Login-Bildschirm rurück

Server Profiles

  • Links oben auf den Link LAM configuration" klicken
  • Edit server profiles anwählen
  • Passwort eingeben (LAM_MASTER_PWD)
  • General Settings
    • Server Adress: ldap://localhost:389 bzw. ldaps://localhost falls SSL-Verschlüsselung eingerichtet ist. Falls der LDAP-Server nicht auf dem selben Server läuft, entsprechend die IP-Adresse bzw. Hostname des LDAP-Servers eintragen.
    • Activate TLS: Sollte nicht zusammen mit ldaps:// (Port 636) verwendet werden, da dieses Protokoll bereits SSL-verschlüsselt ist. TLS kann zusammen mit ldap:// (Port 389)verwendet werden, wenn die voraussetzungen für SSL gegeben sind.
    • Tree suffis: LDAP_Base z.B. dc=test,dc=lan
    • Default language: Hier kann die Sprache auf Deutsch umgestellt werden. Im folgenden werden trotzdem die englischen Begriffe verwendet.
    • list of Valid Users: cn=admin,LDAP_Base z.B. cn=admin,dc=test,dc=lan
  • Account Types
    • Users LDAP suffix: ou=people,LDAP_Base z.B. ou=people,dc=test,dc=lan
    • Grups LDAP suffix: ou=groups,LDAP_Base z.B. ou=groups,dc=test,dc=lan
    • Hosts LDAP suffix: ou=computers,LDAP_Base z.B. ou=computers,dc=test,dc=lan
    • Samba Domains LDAP suffix: LDAP_Base z.B. dc=test,dc=lan
  • Modules
Es sollten nur diejenigen Module aktiviert werden, die auch installiert und für LDAP eingerichtet sind (z.B. Samba), da es ansosten zu Fehlern beim Anlegen bzw. Ändern von Accounts kommt.
  • Module Settings
Minimale und maximale Grenzen für UID und GID Einträge evtl. anpassen.


  • Mit Save sämtliche Änderungen übernehmen


LDAP Login

  • Webbrowser öffnen und http://IP_DES_SERVER/lam eingeben
  • Passwort des LDAP-Adimin Unsers (LDAP_ADMIN_PWD) eingeben.
  • Button Login anklicken


Bulbgraph.png Hinweis:
Falls eine Org-Einheit im LDAP fehlen sollte, erscheint ein Hinweis, um den entsprechenden ou-Eintrag zu erzeugen.

Die weitere Bedienung sollte selbsterklärend sein.


Backup und Restore

Backup Script

Hier wird ein Backup-Script vorgestellt, das das komplette LDAP Directory incl. sämtlicher Konfig- und Zertifikate-Files sichert. Das Script stammt von folgender Seite: http://itdavid.blogspot.ca/2012/05/howto-openldap-24-backup-recovery-on.html.

vi /usr/local/bin/backup_ldap.sh

Folgende Zeilen einfügen (DIT_SUFFIX anpassen und mit LDAP_BASE ersetzen; evtl. Backup Verzeichnis BACKUP_DIR anpassen):

#!/bin/sh

# Backup the OpenLDAP data and configuration as compressed LDIF files.
# Also backup the entire OpenLDAP directory and daemon configuration.
#
# David Robillard, April 23rd, 2012.

umask 022

PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin"
export PATH

DATE=`date +%Y%m%d`

BACKUP_DIR="/home/shares/backup/openldap"
BACKUP_DATA_FILENAME="slapd.${DATE}.data.ldif"
BACKUP_CONFIG_FILENAME="slapd.${DATE}.config.ldif"
BACKUP_TAR_FILENAME="slapd.${DATE}.directory.tar.gz"

CA_TLS_CERT="/etc/ldap/ssl/cacert.pem"
DIT_CONFIG="cn=config"
DIT_SUFFIX="dc=test,dc=lan"

SLAPD_CONFIG_FILENAME="/etc/ldap/ldap.conf"
SLAPD_DIR="/etc/ldap"
SLAPD_LOG_ROTATION=""

SLAPD_TLS_CERT="/etc/ldap/ssl/ldap-server-cert.pem"
SLAPD_TLS_KEY="/etc/ldap/ssl/ldap-server.key"

SLAPCAT_OPTIONS="-F /etc/ldap/slapd.d"
LOGFILE="/var/log/slapd_backup.log"
KEEP="30"

# Make sure we have a log file.
if [ ! -f ${LOGFILE} ]; then
  touch ${LOGFILE}

  if [ "$?" -ne "0" ]; then
    echo "ERROR: could not create the log file."
    exit 1
  fi
fi

# Check if root is running this script.
if [ `id -u` -ne "0" ]; then
  echo "ERROR: only root can run this script." | tee -a ${LOGFILE}
  exit 1
fi

# Make sure we have a backup directory.
if [ ! -d ${BACKUP_DIR} ]; then
  mkdir -p ${BACKUP_DIR}

  if [ "$?" -ne "0" ]; then
    echo "ERROR: could not create the backup directory." | tee -a ${LOGFILE}
    exit 1
  fi
fi

# Make sure we don't have too much backup files piling up in our backup directory.
FILES=`find ${BACKUP_DIR} -type f -name "slapd.*" -print | wc -l`

if [ "${FILES}" -gt "${KEEP}" ]; then
  OVER=`echo ${FILES}-${KEEP} | bc`
  RMFILES=`find ${BACKUP_DIR} -type f -name "slapd.*" -print | sort -r | tail -${OVER}`
  echo "NOTE: removing ${RMFILES} from the backup directory." >> ${LOGFILE}
  rm ${RMFILES}
fi

# Backup the DIT data.
slapcat ${SLAPCAT_OPTIONS} -b ${DIT_SUFFIX} -l ${BACKUP_DIR}/${BACKUP_DATA_FILENAME} >/dev/null 2>&1

if [ "$?" -eq "0" ]; then
  gzip -f ${BACKUP_DIR}/${BACKUP_DATA_FILENAME} 2>&1 >> ${LOGFILE}
  if [ "$?" -ne "0" ] ; then
    echo "ERROR: dump file compression problem." | tee -a ${LOGFILE}
    exit 1
  fi
else
  echo "ERROR: problem running slapcat(8C) for the DIT data backup." | tee -a ${LOGFILE}
  rm ${BACKUP_DIR}/${BACKUP_DATA_FILENAME}
  exit 1
fi

# Backup the DIT config as an LDIF file.
slapcat ${SLAPCAT_OPTIONS} -b ${DIT_CONFIG} -l ${BACKUP_DIR}/${BACKUP_CONFIG_FILENAME} >/dev/null 2>&1
if [ "$?" -eq "0" ]; then
  gzip -f ${BACKUP_DIR}/${BACKUP_CONFIG_FILENAME} 2>&1 >> ${LOGFILE}

  if [ "$?" -ne "0" ] ; then
    echo "ERROR: dump file compression problem." | tee -a ${LOGFILE}
    exit 1
  fi
else
  echo "ERROR: problem running slapcat(8C) for the DIT config backup." | tee -a ${LOGFILE}
  rm ${BACKUP_DIR}/${BACKUP_CONFIG_FILENAME}
  exit 1
fi

# Backup the entire configuration directory.
BACKUP_FILES_LIST="${CA_TLS_CERT} ${SLAPD_CONFIG_FILENAME} ${SLAPD_DIR} ${SLAPD_LOG_ROTATION} ${SLAPD_TLS_CERT} ${SLAPD_TLS_KEY}"

tar zcf ${BACKUP_DIR}/${BACKUP_TAR_FILENAME} ${BACKUP_FILES_LIST}  >/dev/null 2>&1

if [ "$?" -ne "0" ]; then
  echo "ERROR: problem running config directory tar." | tee -a ${LOGFILE}
  rm ${BACKUP_DIR}/${BACKUP_TAR_FILENAME}
  exit 1
fi

Das Script ausführbar machen:

chmod +x /usr/local/bin/backup_ldap.sh

Das Script ausführen:

/usr/local/bin/backup_ldap.sh

Das Script sollte fehlerfrei durchlaufen und folgende Dateien anlegen:

  • slapd.config.Datum.ldif.gz
  • slapd.data.Datum.ldif.gz
  • slapd.directory.Datum.tar.gz

Logfile prüfen:

tail /var/log/slapd_backup.log

Eollten keine Fehler im Log auflaufen.


Das Script täglich automatisch ausführen:

vi /etc/cron.d/backup_ldap

Folgende Zeile einfügen:

0 1 * * * root /usr/local/bin/backup_ldap.sh


Recovery

LDAP Server stoppen:

/etc/init.d/slapd stop
mkdir /tmp/ldap
cd /tmp/ldap

Wiederherzustellende LDAP-Backup-Files (z.B. slapd.20130525...) nach /tmp/ldap kopieren:

cp /home/shares/backup/openldap/slapd.20130525* /tmp/ldap

Files entpacken:

gunzip slapd.*
tar xvf slapd.*.tar

Der Ordner /var/lib/ldap/ muss leer sein, damit die Daten des Backups übernommen werden. Entweder den Ordner umbenennen und neuen Ordner erstellen, oder sämliche Files darin löschen:

mv /var/lib/ldap /var/lib/ldap_old
mkdir /var/lib/ldap
chown openldap. /var/lib/ldap

Das selbe gilt für den Ordner /etc/ldap/slapd.d

mv /etc/ldap/slapd.d /etc/ldap/slapd.d_old
mkdir /etc/ldap/slapd.d
chown openldap. /etc/ldap/slapd.d

Nun kann der Bereich 'cn=config' des LDAP-Directories wiederhergestellt werden:

slapadd -F /etc/ldap/slapd.d/ -n 0 -l slapd*.config.ldif

Im nächsten Schritt werden die Daten des LDAP-Directories wiederhergestellt:

slapadd -F /etc/ldap/slapd.d/ -n 1 -l slapd*.data.ldif

Rechte anpassen:

chown -R openldap. /etc/ldap/slapd.d
chown -R openldap. /var/lib/ldap/

Evtl. noch die Konfigfiles, Schemas und Zertifikate wiederherstellen:

cd etc/ldap
cp ldap.conf /etc/ldap/
cp schema/* /etc/ldap/schema/
cp -rup ssl /etc/ldap/

LDAP Server starten:

/etc/init.d/slapd start

Backup-Files löschen:

rm -R /tmp/ldap