Debian LDAP: Unterschied zwischen den Versionen

Aus Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
==Allgemein==
==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.
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).
In der LDAP Datenbank werden die Daten hierarchisch in Baumform angelegt (DIT Directory Information Tree).
Zeile 182: Zeile 182:
Passwort für den User '''USER''' vergeben:
Passwort für den User '''USER''' vergeben:
  ldappasswd -x -D cn=admin,dc=test,dc=hoemlinux,dc=org -W -S uid='''USER''',ou=people,dc=test,dc=homelinux,dc=org
  ldappasswd -x -D cn=admin,dc=test,dc=hoemlinux,dc=org -W -S uid='''USER''',ou=people,dc=test,dc=homelinux,dc=org
==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





Version vom 19. Mai 2013, 18:13 Uhr

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.homelinux.org wird in LDAP folgendermaßen abgebildet: LDAP_Base: dc=test,dc=homelinux,dc=org.
  • 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=homelinux,dc=org.
  • Ein User Tux könnte dann z.B. folgendermaßen angesprochen werden: uid=tux,ou=People,dc=test,dc=homelinux,dc=org.
  • Es können aber auch noch deutlich mehr Ebenen abgebildet werden.


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=homelinux,dc=org

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

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 -QY EXTERNAL -H ldapi:/// -f /root/ldap_ldif/index.ldif

Ü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=homelinux,dc=org
ou: people
objectClass: organizationalUnit

dn: ou=groups,dc=test,dc=homelinux,dc=org
ou: groups
objectClass: organizationalUnit

Die Informationen ins LDAP Directory übernehmen:

ldapadd -cxWD cn=admin,dc=test,dc=homelinux,dc=org -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 -QY EXTERNAL -H ldapi:/// -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=homelinux,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: test.homelinux.org
dc: test
structuralObjectClass: organization
entryUUID: 95bcb4b4-9eab-1031-9b24-5d17a552c400
creatorsName: cn=admin,dc=test,dc=homelinux,dc=org
createTimestamp: 20120929180232Z
entryCSN: 20120929180232.259042Z#000000#000#000000
modifiersName: cn=admin,dc=test,dc=homelinux,dc=org
...

Directory durchsuchen:

ldapsearch -xLLL

Die Ausgabe könnte folgendermaßen aussehen:

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

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

dn: ou=people,dc=test,dc=homelinux,dc=org
ou: people
objectClass: organizationalUnit

dn: ou=groups,dc=test,dc=homelinux,dc=org
ou: groups
objectClass: organizationalUnit


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=homelinux,dc=org
cn: GROUP
gidNumber: GID
objectClass: top
objectClass: posixGroup
ldapadd -cxWD cn=admin,dc=test,dc=homelinux,dc=org -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=homelinux,dc=org
uid: ccolumbus
uidNumber: UID
gidNumber: GID
cn: Christopher
sn: Columbus
objectClass: top
objectClass: inetOrgPerson
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/USER
ldapadd -cxWD cn=admin,dc=test,dc=homelinux,dc=org -f /root/ldap_ldif/ueser.ldif

Passwort für den User USER vergeben:

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


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.

Zertifakte generieren

apt-get install gnutls-bin
mkdir /etc/ldap/ssl
cd /etc/ldap/ssl

Keyfile generieren:

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

Selbstsigniertes Zertifikat generieren:

certtool --generate-self-signed --load-privkey ldap-server.key --outfile ldap-server-cert.pem

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 -QY EXTERNAL -H ldapi:/// -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=homelinux,dc=org
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=homelinux,dc=org
    • 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=homelinux,dc=org
  • Account Types
    • Users LDAP suffix: ou=people,LDAP_Base z.B. ou=people,dc=test,dc=homelinux,dc=org
    • Grups LDAP suffix: ou=groups,LDAP_Base z.B. ou=groups,dc=test,dc=homelinux,dc=org
    • Hosts LDAP suffix: ou=computers,LDAP_Base z.B. ou=computers,dc=test,dc=homelinux,dc=org
    • Samba Domains LDAP suffix: LDAP_Base z.B. dc=test,dc=homelinux,dc=org
  • 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.data.${DATE}.ldif"
BACKUP_CONFIG_FILENAME="slapd.config.${DATE}.ldif"
BACKUP_TAR_FILENAME="slapd.directory.${DATE}.tar.gz"

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

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

TBD