#!/bin/bash #set +x ######################################################################## # Backup-Script für den LDAP DIT # /usr/local/sbin/backup-ldap-dit.sh # Das Script soll über crontab (/etc/crontab) ein mal am Tag aufgerufen werden. # Alle wichtigen Daten sind über Variablen am Anfang dieses Scripts konfiguriert # werden. # # Letzte Änderungen: # ======================== # 2009-07-06 A.Werner ursprüngliches Script etwas umgeschrieben damit # es besser konfigurierbar wird. (Variablen) # # 2009-09-23 A.Werner ADD: retention time parameter hinzugefügt # damit lässt sich definieren wie lange backup # files aufbewahrt werden sollen. # Default 90 Tage # # 2009-10-23 A.Werner FIX: das löschen des temp files nach getaner # Arbeit setzt vorraus dass es ein solches File # gibt, da es sonst zum fehler kommt. # Daher wird nun das temp file mit "touch" # zuvor angelegt. # # 2009-11-02 A.Werner FIX: der FIX vom 23.10. war bullshit! # cat $file | xargs > $file ergibt eine leere # Datei! Darum musste eine separate temp datei # her. # # ####################################################################### # CONFIGURE HERE ! ! ! ####################################################################### # # Enter Backup-Destination directory here! TRAILING SLASH (/) IS A MUST! # DESTINATION='/root/LDAP-BACKUPS/' # # Enter retention time here! how long should i keep backup files before # deleting them ? # RETENTIONDAYS='90' # Enter your LDAP Manager DN (maybe ROOT DN) here. This LDAP Object needs # read permissions in the LDAP DIT to query all data for backup. # If not using your LDAP Manager (ROOT DN) then you will have to check ACLs. # LDAPMANAGER='cn=ldapmanager,dc=someou,dc=higherou,dc=de' #This file must contain the LDAP Managers Password in CLEARTEXT. # Make sure this File is only readable by ROOT !!! # LDAPMANAGERPASSWD='/etc/ldap/ldap-manager.secret' #Using SSL/TLS ? Set to 'yes' or 'no' # TLS='yes' ########################################### D=`date +%F-%H%M` ############# #### Delete older files that exceed the retention time ############# OLDFILES=`mktemp` MYARGS=`mktemp` find "$DESTINATION" -mtime +"$RETENTIONDAYS" >"$OLDFILES" #echo "DEBUG: ES WURDEN `cat $OLDFILES | wc -l` UEBERALTE FILES GEFUNDEN." if [ $(cat $OLDFILES | wc -l) -gt 0 ]; then cat $OLDFILES | xargs >"$MYARGS" rm `cat "$MYARGS"` fi # cleaning temp files rm "$OLDFILES" rm "$MYARGS" ############# #### Backup DIT ############# # Strategie 1: # # ANMERKUNG A.WERNER: Ich halte diese Methode für schlecht, # da wichtige Datenfelder nicht angezeigt und damit # auch nicht gesichert werden. ldappw=`cat "$LDAPMANAGERPASSWD"` if [ "$TLS" = "yes" ] ; then # if using TLS/SSL ldapsearch -D "$LDAPMANAGER" -x -ZZ -w $ldappw > "${DESTINATION}ldapdb-${D}.ldif" else # if NOT using TLS/SSL ldapsearch -D "$LDAPMANAGER" -x -w $ldappw > "${DESTINATION}ldapdb-${D}.ldif" fi # Strategie 2: # slapcat -l "${DESTINATION}ldapdb-${D}-slapcat.ldif" ############# #### Secure the Backup files and compress them ############# chmod 400 "${DESTINATION}ldapdb-${D}.ldif" "${DESTINATION}ldapdb-${D}-slapcat.ldif" gzip -f "${DESTINATION}ldapdb-${D}.ldif" "${DESTINATION}ldapdb-${D}-slapcat.ldif" exit 0