Ceci est une ancienne révision du document !
~~CLOSETOC~~
BackupPC - Installation d'une solution de sauvegarde sous Linux
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.
<note>Cette procédure a été réalisé sur une debian 9.</note>
<note warning>Cette procédure nécessite des accès root. Faîtes donc attention à ce que vous faîtes.</note>
Prérequis
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 :
- Il faut calculer l'espace nécessaire pour accueillir les sauvegardes qui sont constituées de X points de restauration en prenant en compte le mode de sauvegarde (complète, incrémentielle…), la compression, etc.
- Il faut garantir la pérennité de la sauvegarde, via une externalisation de cette dernière par exemple afin d'éviter de tout perdre si le serveur de sauvegarde venait à être corrompu ou perdu.
Installation
- Comme d'haditude pour une nouvelle installation, on commence par mettre à jour la banque de données des paquets :
apt-get update
- On installe les paquets nécessaires :
apt-get install backuppc
- Lors de l'installation, le système nous demande de choisir le serveur WEB à utiliser. Apache est installé par défaut avec BackupPC, on choisira donc apache2 puis on valide avec
<Ok>:
- La page suivante nous indique la création d'un utilisateur/mot de passe par défaut pour se connecter à l'interface web et ainsi paramétrer et gérer les sauvegardes :
- Après validation, l'installation se termine toute seule.
- Pour être sûr de pouvoir se connecter à l'interface web, il est recommandé de redémarrer apache2 :
systemctl restart apache2
- Il ne reste plus qu'à paramétrer le pare-feu pour permettre l'accès au service web depuis l'extérieur. Pour celà, référez-vous à la documentation de votre solution de sécurité.
Paramétrage
- On va commencer par modifier le mot de passe par défaut pour utiliser un mot de passe correspondant à notre politique de sécurité :
htpasswd /etc/backuppc/htpasswd backuppc
- On peut alors se connecter au service grâce à l'URL donnée durant l'installation.
- Si votre navigateur renvoie une erreur 403, éditez le fichier
/etc/apache2/conf-enabled/backuppc.conf, remplacezRequire localparRequire all grantedet redémarrer le serviceapache2.
- On s'authentifie avec le compte utilisateur
backuppcet le mot de passe correspondant :
- On arrive sur la page d'accueil de BackupPC
- On commence par mettre le programme en français. Pour celà, dans le menu
Edit Config, ongletCGI, on change la ligneLanguageen fr et on sauvegarde avecSave:
- On recharge l'interface (F5) pour avoir le nouvel affichage.
- On règle ensuite le mode de sauvegarde par défaut. Pour celà, on va dans le menu
Modifier la configuration, ongletXfer. La ligneXferMethodnous donne les différentes méthodes de sauvegarde utilisables. Parmis elles, on aura :- tar : utilisable pour Linux et MacOS. Les fichiers sauvegardés sont conservés dans un fichier archive .tar (non compressé).
- smb : utilisable pour Windows. Il s'agit d'une simple copie via le protocole SMB. Peut-être aussi utilisé pour Linux à condition d'installer préalablement un service Samba dessus.
- rsync : utilisable pour Windows, Linux et MacOS. Il s'agit d'une copie intelligente des fichiers.
- archive : comme tar mais en version compressé.
- On utilisera donc
rsync. - On oublie pas de sauvegarder une fois les modifications faîtes.
- On peut aussi paramétrer les période de sauvegarde et la rétention de ces dernières. Ces paramétrages sont accessible depuis le menu
Modifier la configuration, ongletHoraire. Personnellement, j'ai modifié :- FullAgeMax : La rétention des sauvegardee complètes, je garde 30 jours.
- IncrAgeMax : La rétention des sauvegardes incrémentielles, je garde 7 jours.
- BlackoutPeriods : La période pendant laquelle il ne peut y avoir aucune sauvegarde, en principe c'est pour éviter les problèmes de performances durant les heures de prod, bureau… J'ai réglé de 7h à 20h du lundi au vendredi.
- Par défaut, BackupPC stocke les sauvegardes dans
/var/lib/backuppc. Personnellement, je préfère déplacer ce dossier vers un disque dédié au stockage. Pour cela :- On arrête le processus :
service backuppc stop
- On crée le répertoire de destinastion si il n'existe pas encore. Pour ma part, j'utilise un point de montage existant vers un disque physique dédié. Sinon :
mkdir -p /chemin/du/dossier/de/sauvegarde/
- On synchronise le contenu des dossiers :
rsync -va /var/lib/backuppc /chemin/du/dossier/de/sauvegarde/
- On supprime l'ancien dossier :
rm -rf /var/lib/backuppc/
- On crée un lien symbolique :
ln -s /chemin/du/dossier/de/sauvegarde /var/lib/backuppc
- On met à jour les droits :
chown -h backuppc:backuppc /var/lib/backuppc
- On relance le service :
service backuppc start
- Il ne nous reste plus qu'à paramétrer les notifications. Dans le menu
Modifier la configuration, ongletCourriel, on modifiera donc les champs suivants :- EMailFromUserName : e-mail de l'expéditeur.
- EMailAdminUserName : e-mail de l'administrateur de sauvegarde (celui qui va recevoir les notifications avec les détails).
- On enregistre avec le bouton
Sauvegarder
<note important>Attention: Les notifications par mail ne seront effectives que si l'envoi de mail est configuré sur la machine (voir les paramétrages d'exim4 par exemple).</note>
<note tip>BackupPC est désormais configuré. Il ne reste plus qu'à créer des tâches de sauvegarde.</note>
Sauvegarde du poste local
- Pour le poste local, on utilisera la méthode
tar. - On commence par modifier le fichier
/etc/sudoers:
nano /etc/sudoers
- On y ajoute la ligne
backuppc ALL=NOPASSWD: /bin/tar - On enregistre et on quitte.
- Le poste étant ajouté par défaut aux tâches de sauvegarde, on va juste affiner son paramétrage. Du coup, depuis l'interface graphique, dans le menu
Hôtes, on choisitlocalhost, ce qui affiche les menus spécifiques. On pourra alors cliquer surModifier la configurationdans la sectionlocalhost:
- Dans la page de configuration, on cliquera sur l'onglet
Xfer. Là, on cochera :- XferMethod et on choisit
tar - TarClientCmd et on modifie le champs correspondant avec
/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 –totalspour Debian 10. - TarShareName (Optionnel). Ce chaamp permet de spécifier quels dossiers doivent être sauvegardés. Par défaut, c'est la racine
/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 boutonAjouter, ce qui rajoutera une ligne donnant la possibilité d'indiquer un autre chemin.
- Une fois toutes les modifications faîtes, on clique sur
Sauvegarder.
Sauvegarde d'un poste Linux distant
Paramétrage côté serveur
- On va créé une clé RSA afin de faciliter l'authentification sur les postes clients Linux. Du coup, sur le serveur, on se connecte en tant qu'utilisateur
backuppc:
sudo -i -u backuppc
- On crée la clé RSA :
ssh-keygen -t rsa -b 2048
- On copie le contenu de la clé publique (fichier
~/.ssh/id_rsa.pub) afin de l'enregistrer sur le poste à sauvegarder.
Paramétrage côté client
- On édite le fichier
/root/.ssh/authorized_keys:
nano /root/.ssh/authorized_keys
- On ajoute une nouvelle ligne sous format
ssh-rsa clé== backuppc@serveuren remplaçant ssh-rsa clé par la clé publique copié précédemment. - On enregistre et on quitte.
Test de connexion coté serveur
- On se connecte en tant que
backuppc:
sudo -i -u backuppc
- On teste la connexion ssh (en remplaçant
clientpar le nom ou l'adresse du client à tester) :
ssh root@client
- Si tout va bien, on peut passer à la fin de la configuration.
Ajout et paramétrage de la tâche de sauvegarde
- Depuis l'interface graphique, on va dans le menu
Modifier les machines, on clique surAjouteret dans la nouvelle ligne, on indique dans :- host : le nom du client
- user : l'utilisateur de sauvegarde soit
backuppc
- On enregistre.
- Ensuite, dans la section
Hôtes, on sélectionne le nouveau client (si il n'apparaît pas, on clique d'abord un coup surRechercherafin de rafraîchir la liste). - Dans le nouveau menu, on clique sur
Modifier la configurationpuis sur l'ongletXfer.
- Là, on va vérifier que XferMethod est sur
rsync(et modifier le cas échéant). - On sauvegarde au besoin.
Test de la sauvegarde
- On clique sur
Client Accueilet on clique surDémarrer la sauvegarde complète.
- Sur l'écran suivant, on confirne le démarrage de la sauvegarde.
- Si tout va bien, après un retour sur la page d'accueil du client et l'attente de la fin de la sauvegarde, le résumé s'affiche et n'indique aucune erreur.
<note tip>Votre tâche de sauvegarde est opérationnelle. Il ne vous reste plus qu'à faire la même chose pour tous les autres clients Linux.</note>
Script de supervision
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.
<note important>Pour pouvoir utiliser les commandes spéciales de BackupPC et accéder à ses logs, l'utilisateur nagios doit faire parti du groupe backuppc</note>
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
Erreurs et Corrections
fileListReceive failed
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.
Vérification sur le poste client
which rsync
L'état correct doit renvoyer :
/usr/bin/rsync
Dans le cas contraire, la correction est nécessaire.
Correction
apt update && apt install -y rsync
no ping response from localhost
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.
Vérification sur le serveur
grep 'Conf{Ping6Path}' /etc/backuppc/config.pl
La commande doit renvoyer :
$Conf{Ping6Path} = '/bin/ping6';
Dans le cas contraire, la correction est nécessaire.
Correction
Editez 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';.
— Nicolas THOREZ 2019/11/14 10:55














Discussion