OpenLDAP Stratégie Backup : Différence entre versions
m |
(Aucune différence)
|
Version actuelle en date du 15 mai 2018 à 12:44
L'utilisation d'un serveur LDAP permet de centraliser la gestion des comptes utilisateurs. Ils sont régulièrement utilisés pour gérer l'authentification par les applications. Il serait donc dommage de perdre les déclaration de tous les comptes, rendant les accès aux applications impossible. Il est donc important d'effectuer régulièrement des sauvegardes des dépôts. Cet article présente la mise en place d'une telle stratégie, sous Ubuntu, permettant de réaliser:
- 1 sauvegarde complète tous les mois.
- Export des sauvegardes vers un serveur "externe" via FTP.
- Suppression des sauvegardes plus anciennes d'un mois.
La synchronisation des sauvegardes s'effectue à l'aide de l'outil de backup Duplicity. Le fait d'externaliser les sauvegardes apporte une garantie supplémentaire. En effet, si le serveur venait à être en panne, les sauvegardes de OpenLDAP resteroent disponibles.
Sommaire
Votre avis
Nobody voted on this yet
|
|
Objectif
Tous les scripts et données seront stockés dans un nouveau répertoire /var/opt/backups
(pour l'ensemble des stratégies) et plus particulièrement dans le répertoire /var/opt/backups/ldap
.
Concernant les logs, elles seront toutes placées dans le répertoire /var/log/backups
.
#sudo mkdir -p /var/opt/backups/ldap/dump #sudo chmod -R 740 /var/opt/backups/ldap #sudo chown -R root:root /var/opt/backups/ldap #sudo mkdir /var/log/backups
Export des données
Source
Le script va effectuer un export de la structure et de l'ensemble des bases. Dans ce cas, il existe deux bases, la configuration et les données.
Le script ldap_dump.sh
est mis en place, avec des sécurités autorisant uniquement le compte root
à le modifier, dans le répertoire /var/opt/backups/ldap
avec le code suivant:
#!/bin/bash
# Date format for the dump file name
dateFileFormat="+%Y%m%d";
# Date format for the log file
dateLogFormat="+%Y-%m-%d %H:%M";
# Dump root folder
pathBackup="/var/opt/backups/ldap/dump";
# Backup log
pathLog="/var/log/backups/ldap_dump.log";
# Init the dump file name
pathBackupFile="$pathBackup/$(date "$dateFileFormat")_ldap_";
echo "[$(date "$dateLogFormat")] Start dump" >> $pathLog;
# Check working folder exists
if [ ! -d $pathBackup ]; then
echo Folder "$pathBackup does not exist" >> $ pathLog;
echo "[$(date "$dateLogFormat")] End dump - dump cancelled" >> $pathLog;
exit 1;
fi
#Stop the daemon
service slapd stop >> $pathLog;
#Backup the structure
echo "[$(date "$dateLogFormat")] Dump database 0" >> $pathLog;
slapcat -n 0 | gzip > $pathBackupFile"config.gz"
#Backup the users in database 1
echo "[$(date "$dateLogFormat")] Dump database 1" >> $pathLog;
slapcat -n 1 | gzip > $pathBackupFile"users1.gz"
#cp /etc/ldap.secret backup/ldap.secret
#Restart the daemon
service slapd start >> $pathLog;
for f in `find "$pathBackup" -name "*.gz" -mtime +1`; do
# Remove file
echo "[$(date "$dateLogFormat")] Delete file $f" >> $pathLog;
rm -f "$f";
done
echo "[$(date "$dateLogFormat")] End dump" >> $pathLog;
Le fonctionnement de ce script est assez simple. Les exports sont stockés dans le répertoire /var/opt/backups/ldap/dump
et automatiquement compressés à l'aide de l'outil gzip
, lors de l'exécution de la commande slapcat
.
Les anciennes sauvegardes sont supprimées, avec un temps de rétention de un jour. En effet, il est prévu d'exécuter ce script très peu régulièrement.
Pour des raisons de sécurités, les permissions des fichiers générés donnent un droit d'écriture uniquement sur le compte root
.
Enfin, les exécutions sont tracées dans la log /var/log/backups/ldap_dump.log
.
Exemples
Le script n'accepte aucun argument. L'exécution s'effectue simplement par la ligne suivante:
#./ldap_dump.sh
Sauvegarde des exports
Source
La seconde étape consiste à exécuter les export ldap, puis d'utiliser Duplicity afin de sauvegarder ces fichiers sur un serveur distant via FTP.
Le script ldap_backup.sh
est mis en place, avec des sécurités autorisant uniquement le compte root
à le modifier, dans le répertoire /var/opt/backups/ldap
avec le code suivant:
#!/bin/bash
dateLogFormat="+%Y-%m-%d %H:%M";
# Backup log
pathLog="/var/log/backups/ldap_backup.log";
echo "[$(date "$dateLogFormat")] Start backup" >> $pathLog;
echo "[$(date "$dateLogFormat")] Start dump" >> $pathLog;
/var/opt/backups/ldap/ldap_dump.sh
echo "[$(date "$dateLogFormat")] End dump" >> $pathLog;
echo "[$(date "$dateLogFormat")] Start upload with duplicity" >> $pathLog;
export PASSPHRASE="DUPLICITY PASSPHRASE"
export FTP_PASSWORD=USER_PASSWORD
duplicity remove-older-than 1M --force ftp://FTP_LOGIN@HOST/backup/ldap/dump >> $pathLog;
duplicity full /var/opt/backups/ldap/dump ftp://FTP_LOGIN@HOST/backup/ldap/dump >> $pathLog;
unset PASSPHRASE
unset FTP_PASSWORD
echo "[$(date "$dateLogFormat")] End upload with duplicity" >> $pathLog;
echo "[$(date "$dateLogFormat")] End backup" >> $pathLog;
Attention à l'utilisation de l'instruction export
, surtout pour la PASSPHRASE. En effet, si celle-ci contient des espaces, il est impératif de la placer entre le caractère "
.
Le script est créé avec un droit de modification et exécution uniquement pour le compte root
:
#sudo chmod 740 /var/opt/backups/ldap/ldap_backup.sh #sudo chown root:root /var/opt/backups/ldap/ldap_backup.sh
Le fonctionnement de ce script est assez simple. Le script ldap_dump.sh
est exécuté. Puis deux variables d'environnement sont mises en place:
- PASSPHRASE: Phrase pour le cryptage des données par duplicity.
- FTP_PASSWORD: Le mot de passe FTP utilisé pour se connecté via duplicity
La première instruction, avec l'argument remove-older-than 1M
, va purger les sauvegardes plus vieilles d'un mois. Puis la seconde instruction, avec l'argument full
effectue une sauvegarde complète.
Le résultat de l'export est ensuite envoyé sur un serveur FTP, configuré par la value HOST
, en utilisant le login FTP_LOGIN
et le mot de passe USER_PASSWORD
placé dans la variable FTP_PASSWORD
. Les sauvegardes sont stockées à l'emplacement backup/ldap/dump
à la racine du compte après connexion sur FTP.
Enfin, les exécutions sont tracées dans la log /var/log/backups/ldap_backup.log
.
Exemples
Le script n'accepte aucun argument. L'exécution s'effectue simplement par la ligne suivante:
#./ldap_backup.sh
Planification
Une fois que les scripts de sauvegarde sont mis en place, il est possible de les exécuter manuellement. Mais l'objectif est de les exécuter automatiquement et régulièrement sans s'en préoccuper. Dans le cadre de cette implémentation, la planification est réalisée à l'aide de l'outil Crontab disponible sur les systèmes Linux. L'outil Anacron n'a pas été utilisé car les planifications souhaitées doivent se faire à des heures et des jours particuliers.
La mise en place s'effectue en modifiant le fichier /etc/crontab
pour y ajouter une ligne.
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
15 1 * * 1 root cd / && /var/opt/backups/ldap/ldap_backup.sh
#
Les sauvegardes sont planifiées à 1h15 AM, le premier jour de chaque semaine (1 pour l'argument dow
), par l'exécution de la commande cd / && /var/opt/backups/ldap/ldap_backup.sh
.
Gestions des logs
Des fichiers de log sont créés par les deux scripts mis en place. Comme pour l'ensemble des produits, une rotation de ces logs est mise en place, à l'aide de l'outil Logrotate.
L'ensemble des logs se trouvent donc dans le répertoire /var/log/backups
avec le nom commençant par ldap_
. La configuration permet une rotation annuel, en conservant 1 rotations. Les rotations sont compressées, en asynchrone, et créées avec un accès en modification au compte root.
Cette configuration est mise en place dans le fichier ldap_backup
, sous le répertoire /etc/logrotate.d
/var/log/backups/ldap_*.log {
yearly
missingok
rotate 1
compress
delaycompress
notifempty
create 640 root root
}