Cet article fait partie d’une série :

Introduction

Suite aux précédents articles sur les sauvegardes, cette 5ème partie traitera de la mise en place de la sauvegarde d’annuaires OpenLDAP.

Le principe repose sur l’exécution d’un script sur le serveur à sauvegarder pour exporter et archiver les bases de l’annuaire (configuration et données), puis de l’ajout du chemin de stockage de ces archives dans la stratégie de sauvegarde de Restic (voir articles précédents).

L’ensemble des commandes sont à réaliser avec un utilisateur sudoer.

Script de sauvegarde

Créer le répertoire pour placer le script de sauvegarde (si celui-ci n’existe pas déjà) :

$ sudo -u restic mkdir /home/restic/scripts

Créer le script slapd_backup.sh dans le répertoire nouvellement créé.

Renseigner à minima la variable suivante :

Vérifier et ajuster les autres si nécessaire.

Le script a besoin d’être exécuté par l’utilisateur root, car la commande slapcat est accessible uniquement pour cet utilisateur, et il est nécessaire de redémarrer le service slapd.

#!/bin/bash
# A UNIX / Linux shell script to backup slapd database.
# -------------------------------------------------------------------------
 
### Set to 1 if you need to see progress while dumping dbs ###
VERBOSE=0
 
### Set bins path ###
GZIP=/bin/gzip
SLAPCAT=/usr/sbin/slapcat
RM=/bin/rm
MKDIR=/bin/mkdir
GREP=/bin/grep
 
### Setup dump directory ###
BAKRSNROOT=/tmp/bkp/ldap
 
#####################################
### ----[ No Editing below ]------###
#####################################
### Default time format ###
TIME_FORMAT='%H_%M_%S%P'

### Make a backup ###
backup_slapd(){

        [ ! -d $BAKRSNROOT ] && ${MKDIR} -p $BAKRSNROOT
        ${RM} -f $BAKRSNROOT/* >/dev/null 2>&1



        [ $VERBOSE -eq 1 ] && echo "*** Stopping SLAPD Service ***"
        systemctl stop slapd

        [ $VERBOSE -eq 1 ] && echo ""
        [ $VERBOSE -eq 1 ] && echo "*** Dumping SLAPD Database ***"
        [ $VERBOSE -eq 1 ] && echo -n "Database> "

        local tTime=$(date +"${TIME_FORMAT}")
        local FILE="${BAKRSNROOT}/slapd.config.${tTime}.gz"
        [ $VERBOSE -eq 1 ] && echo -n "Configuration.."
        ${SLAPCAT} -n 0 | ${GZIP} -9 > $FILE


        local tTime=$(date +"${TIME_FORMAT}")
        local FILE="${BAKRSNROOT}/slapd.accounts.${tTime}.gz"
        [ $VERBOSE -eq 1 ] && echo -n "Accounts.."
        ${SLAPCAT} -n 1 | ${GZIP} -9 > $FILE

        [ $VERBOSE -eq 1 ] && echo ""
        [ $VERBOSE -eq 1 ] && echo -n "Correcting permissions on backup files"
        chown -R restic: $BAKRSNROOT

        status=$?
        [ $VERBOSE -eq 1 ] && echo ""
        [ $VERBOSE -eq 1 ] && echo "*** Backup done [ files wrote to $BAKRSNROOT] ***"
        #if [ $VERBOSE -eq 0 ] && [ $status -eq 0 ]; then exit 0; fi

        [ $VERBOSE -eq 1 ] && echo ""
        [ $VERBOSE -eq 1 ] && echo "*** Starting SLAPD Service ***"
        systemctl start slapd


        return $status
}
 
### Die on demand with message ###
die(){
        echo "$@"
        exit 999
}
 
### Make sure bins exists.. else die
verify_bins(){
        [ ! -x $GZIP ] && die "File $GZIP does not exists. Make sure correct path is set in $0."
        [ ! -x $SLAPCAT ] && die "File $SLAPCAT does not exists. Make sure correct path is set in $0."
        [ ! -x $RM ] && die "File $RM does not exists. Make sure correct path is set in $0."
        [ ! -x $MKDIR ] && die "File $MKDIR does not exists. Make sure correct path is set in $0."
        [ ! -x $GREP ] && die "File $GREP does not exists. Make sure correct path is set in $0."
}
 
 
### main ####
verify_bins
backup_slapd

Ajuster les permissions du script pour le rendre exécutable :

$ sudo chmod 700 /home/restic/scripts/slapd_backup.sh 

Créer le répertoire temporaire de stockage des sauvegardes :

$ sudo mkdir -p /tmp/bkp/ldap
$ sudo chown -R restic: /tmp/bkp

Automatisation

Créer un script cron :

$ sudo vim /etc/cron.d/slapd_backup

Ajouter les lignes suivantes pour une exécution tous les jours à minuit :

# SLAPD BKP
00 23   * * 0   root    bash /home/restic/scripts/slapd_backup.sh

Configuration de Restic

Ajouter le chemin (/tmp/bkp/ldap) au paramètre BACKUP_PATHS du fichier de configuration des services (voir articles précédents).

Restauration

Recréer les bases et utilisateurs si vous restaurez sur une nouvelle installation.

  1. Arrêter le service slapd :
sudo systemctl stop slapd
  1. Supprimer la configuration actuelle du nouveau serveur :
sudo rm -rf /etc/ldap/slapd.d/*
  1. Importer la configuration :
sudo slapadd -n 0 -F /etc/ldap/slapd.d -l /backup/file/path/slapd.conf
  1. Importer les comptes :
sudo slapadd -n 1 -l /backup/file/path/database.ldif
  1. Corriger les permissions :
sudo chown -R openldap: /etc/ldap/slapd.d
sudo chown -R openldap: /var/lib/ldap
  1. Redémarrer le service slapd :
sudo systemctl start slapd
  1. ajuster aussi /etc/ldap/ldap.conf si nécessaire.

Sources