Création — Nicolas THOREZ 2019/11/14 10:55
La sauvegarde est et sera toujours un élément incontournable d'une infrastructure. Pour Linux, il existe plusieurs solutions. Nous allons voir ici backuppc, une solution permettant la sauvegarde de système Linux aussi bien que Windows et dont la gestion se fait via une interface Web, ce qui en facilite la compréhension.
Il n'y a pas de prérequis particulier, si ce n'est l'espace de stockage pour accueillir les sauvegardes ainsi que la localisation de cette espace.
Il faut prendre en compte quelques points essentiels, généralement abordés lors de l'établissement du plan global de sauvegarde :
apt-get update
apt-get install backuppc
<Ok> :

systemctl restart apache2
htpasswd /etc/backuppc/htpasswd backuppc
/etc/apache2/conf-enabled/backuppc.conf, remplacez Require local par Require all granted et redémarrer le service apache2.backuppc et le mot de passe correspondant :

Edit Config, onglet CGI, on change la ligne Language en fr et on sauvegarde avec Save :
Modifier la configuration, onglet Xfer. La ligne XferMethod nous donne les différentes méthodes de sauvegarde utilisables. Parmis elles, on aura :rsync.
Modifier la configuration, onglet Horaire. Personnellement, j'ai modifié :
/var/lib/backuppc. Personnellement, je préfère déplacer ce dossier vers un disque dédié au stockage. Pour cela :
service backuppc stop
mkdir -p /chemin/du/dossier/de/sauvegarde/
rsync -va /var/lib/backuppc /chemin/du/dossier/de/sauvegarde/
rm -rf /var/lib/backuppc/
ln -s /chemin/du/dossier/de/sauvegarde /var/lib/backuppc
chown -h backuppc:backuppc /var/lib/backuppc
service backuppc start
Modifier la configuration, onglet Courriel, on modifiera donc les champs suivants :Sauvegarder
tar./etc/sudoers :
nano /etc/sudoers
backuppc ALL=NOPASSWD: /bin/tarHôtes, on choisit localhost, ce qui affiche les menus spécifiques. On pourra alors cliquer sur Modifier la configuration dans la section localhost :
Xfer. Là, on cochera :tar/usr/bin/sudo LC_ALL=C $tarPath -c -v -f - -C $shareName+ –totals, pour Debian 9, ou /usr/bin/env LC_ALL=C sudo $tarPath -c -v -f - -C $shareName –totals pour Debian 10./ qui est sélectionnée. Pour des raisons de gains de place, on pourrait choisir de ne sauvegarder que les dossiers essentiels (configurations, données utiles, scripts…). Pour affiner la sélection, on remplace / par le dossier à sauvegarder, par exemple /etc. Si il y a plusieurs dossiers, on cliquera sur le bouton Ajouter, ce qui rajoutera une ligne donnant la possibilité d'indiquer un autre chemin.Sauvegarder.
backuppc :
sudo -i -u backuppc
ssh-keygen -t rsa -b 2048
~/.ssh/id_rsa.pub) afin de l'enregistrer sur le poste à sauvegarder./root/.ssh/authorized_keys :
nano /root/.ssh/authorized_keys
ssh-rsa clé== backuppc@serveur en remplaçant ssh-rsa clé par la clé publique copié précédemment.backuppc :
sudo -i -u backuppc
client par le nom ou l'adresse du client à tester) :
ssh root@client
Modifier les machines, on clique sur Ajouter et dans la nouvelle ligne, on indique dans :backuppc
Hôtes, on sélectionne le nouveau client (si il n'apparaît pas, on clique d'abord un coup sur Rechercher afin de rafraîchir la liste).Modifier la configuration puis sur l'onglet Xfer.
rsync (et modifier le cas échéant).Client Accueil et on clique sur Démarrer la sauvegarde complète.

Les informations sur l'état des sauvegardes sont affichées dans l'interface graphique et envoyées par mail. Cependant, on a pas toujours les yeux fixés sur l'interface et les mails peuvent se perdre dans un flot important de réception de messages.
Le script suivant permet de lire les logs de BackupPC afin de savoir si la sauvegarde d'une machine est à jour ou pas. Il renvoie un résultat lisible par Nagios pour obtenir des alertes visuelles.
nagios doit faire parti du groupe backuppc
Pour intégrer l'utilisateur nagios au groupe backuppc :
adduser nagios backuppc
Script de supervision :
#!/bin/bash
###############################################################################
#
# Script de vérification des sauvegardes de BackupPC
#
# Par Nicolas THOREZ
#
###############################################################################
##### Déclarations des fonctions #####
# Fonction d'affichage de l'aide
display-help()
{
echo "Aide pour check-backup.sh"
echo ""
echo "Script de vérification des sauvegardes de BackupPC."
echo ""
echo "Usage : ./check-backup.sh [-s|--server] nom_du_serveur [-w|--warning] duréé_pour_avertissement [-c|--critical] durée_pour_critique"
echo ""
echo "Demande d'aide : ./check-backup.sh [-h|--help]"
echo ""
echo "Paramètres et arguments :"
echo ""
echo "-h, --help Affiche cette aide."
echo ""
echo "-s, --server Nom du serveur dont il faut vérifier l'état de la dernière sauvegarde."
echo ""
echo "-c, --critical Ecart en nombre de jour à partir duquel on déclenche une alerte critique."
echo " La valeur par défaut est 7 (1 semaine)."
echo ""
echo "-w, --warning Ecart en nombre de jour à partir duquel on déclenche un avertissement."
echo " La valeur par défaut est 1 (1 jour)."
echo ""
exit 2
}
##### Déclarations des variables #####
# Dossier de logs de BackupPC
LOG_DIR="/var/lib/backuppc/log"
##### Traitement des arguments en entrée #####
while [[ $# -gt 0 ]]
do
PARAM="$1"
case $PARAM in
# aide
"-h"|"--help")
display-help
shift
;;
# serveur
"-s"|"--server")
SERVER="$2"
shift
shift
;;
# critique
"-c"|"--critical")
CRITICAL="$2"
shift
shift
;;
# avertissement
"-w"|"--warning")
WARNING="$2"
shift
shift
;;
# autres options non déterminées
*)
display-help
shift
;;
esac
done
##### Vérification des arguments #####
# Vérification de la variable SERVER
if [ -z "$SERVER" ]
then
echo "[CRIT] Le nom du serveur est obligatoire."
echo "[INFO] Utilisez l'option -h pour avoir de l'aide."
exit 2
fi
# Vérification de la variable WARNING
if [ -z "$WARNING" ]
then
WARNING=1
fi
# Vérification de la variable CRITICAL
if [ -z "$CRITICAL" ]
then
CRITICAL=7
fi
##### Traitement #####
# Recherche d'une sauvegarde dans le fichier log du jour
SAVE=$(cat $LOG_DIR/LOG | grep -E "(Finished incr backup|Finished full backup)"| grep -i "$SERVER" | tail -n 1)
if [ -z "$SAVE" ]
then
# Pas de sauvegarde dans le log du jour -> On cherche dans les vieux log
SAVE=$(/usr/share/backuppc/bin/BackupPC_zcat $LOG_DIR/LOG.*.z | grep -E '(Finished incr backup|Finished full backup)'| grep -i "$SERVER" | head -n 1)
if [ -z "$SAVE" ]
then
# Pas de sauvegarde -> Alerte critique
echo "[CRIT] Pas de sauvegarde. Merci de regarder les logs."
exit 2
else
# Une sauvegarde a été trouvée -> On récupère sa date
SAVEDATE=$(echo $SAVE | awk '{ print $1,$2 }')
# On calcule l'écart de jours
SAVEDATESTAMP=$(date --date="$SAVEDATE" +%s)
TODAYSTAMP=$(date --date="now" +%s)
DELTASEC=$(($TODAYSTAMP-$SAVEDATESTAMP))
DELTA=$(($DELTASEC/86400))
# On vérifie si le delta est supérieur ou égal au seuil critique
if [[ $DELTA -ge $CRITICAL ]]
then
# Oui -> Alerte critique
echo "[CRIT] Pas de sauvegarde depuis plus de $DELTA jour(s)."
exit 2
else
# Non -> On vérifie si le delta est supérieur ou égal au seuil d'avertissement
if [[ $DELTA -ge $WARNING ]]
then
# Oui -> Avertissement
echo "[WARN] Pas de sauvegarde depuis plus de $DELTA jour(s)."
exit 1
else
# Non -> La sauvegarde est bonne
echo "[GOOD] Sauvegarde OK."
exit 0
fi
fi
fi
else
# Sauvegarde trouvée dans le log du jour
echo "[GOOD] Sauvegarde OK."
exit 0
fi
# Si on n'est toujours pas sorti du script à ce niveau -> Erreur inconnue
echo "[UNKN] Erreur inconnue."
exit 3
Après une mise à jour, un nettoyage de paquets ou une mise à niveau du système d'exploitation du client, le paquet rsync peut avoir été supprimé, ce qui provoque cette erreur. La simple réinstallation du paquet permet de résoudre le problème et de relancer la sauvegarde.
which rsync
L'état correct doit renvoyer :
/usr/bin/rsync
Dans le cas contraire, la correction est nécessaire.
apt update && apt install -y rsync
La sauvegarde du serveur BackupPC est impossible, le service indique que le localhost ne répond pas au ping. Après vérification en ligne de commande, le ping fonctionne.
grep 'Conf{Ping6Path}' /etc/backuppc/config.pl
La commande doit renvoyer :
$Conf{Ping6Path} = '/bin/ping6';
Dans le cas contraire, la correction est nécessaire.
Éditez le ficher /etc/backuppc/config.pl et modifiez la variable $Conf{Ping6Path} (Créez la, si absente, juste après la ligne $Conf{PingPath} = '/bin/ping';). La ligne correcte doit être : $Conf{Ping6Path} = '/bin/ping6';. Une fois le fichier de configuration modifié, redémarrez le service backuppc.