Cet article fait partie d’une série :
- Sauvegardes #1 − Introduction et serveur de sauvegarde 💾
- Sauvegardes #2 − Sauvegardes de serveurs avec Restic 📁
- Sauvegardes #3 − Sauvegardes de PC avec Restic 💻
- Sauvegardes #4 − Sauvegardes de bases MySQL/MariaDB avec Restic 🗄️
- Sauvegardes #5 − Sauvegardes d’annuaire OpenLDAP avec Restic 🗄️
- Sauvegardes #6 − Sauvegardes de bases PostgreSQL avec Restic 🗄️
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 :
BAKRSNROOT
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.
- Arrêter le service
slapd:
sudo systemctl stop slapd
- Supprimer la configuration actuelle du nouveau serveur :
sudo rm -rf /etc/ldap/slapd.d/*
- Importer la configuration :
sudo slapadd -n 0 -F /etc/ldap/slapd.d -l /backup/file/path/slapd.conf
- Importer les comptes :
sudo slapadd -n 1 -l /backup/file/path/database.ldif
- Corriger les permissions :
sudo chown -R openldap: /etc/ldap/slapd.d
sudo chown -R openldap: /var/lib/ldap
- Redémarrer le service
slapd:
sudo systemctl start slapd
- ajuster aussi
/etc/ldap/ldap.confsi nécessaire.