BackupPC - Installation d'une solution de sauvegarde sous Linux

CréationNicolas 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.

Environnement

Cette procédure a été réalisé sur une debian 9.

danger

Cette procédure nécessite des accès root. Faîtes donc attention à ce que vous faîtes.

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.
  • 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é.
  • 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, remplacez Require local par Require all granted et redémarrer le service apache2.
  • On s'authentifie avec le compte utilisateur backuppc et 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, onglet CGI, on change la ligne Language en fr et on sauvegarde avec Save :
  • 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, onglet Xfer. La ligne XferMethod nous 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, onglet Horaire. 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, onglet Courriel, 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

Notification

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).

Installation

BackupPC est désormais configuré. Il ne reste plus qu'à créer des tâches de sauvegarde.
  • 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 choisit localhost, ce qui affiche les menus spécifiques. On pourra alors cliquer sur Modifier la configuration dans la section localhost :
  • 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 –totals pour 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 bouton Ajouter, ce qui rajoutera une ligne donnant la possibilité d'indiquer un autre chemin.
  • Une fois toutes les modifications faîtes, on clique sur Sauvegarder.
  • 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.
  • On édite le fichier /root/.ssh/authorized_keys :

nano /root/.ssh/authorized_keys

  • On ajoute une nouvelle ligne sous format ssh-rsa clé== backuppc@serveur en remplaçant ssh-rsa clé par la clé publique copié précédemment.
  • On enregistre et on quitte.
  • On se connecte en tant que backuppc :

sudo -i -u backuppc

  • On teste la connexion ssh (en remplaçant client par le nom ou l'adresse du client à tester) :

ssh root@client

  • Si tout va bien, on peut passer à la fin de la configuration.
  • Depuis l'interface graphique, on va dans le menu Modifier les machines, on clique sur Ajouter et 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 sur Rechercher afin de rafraîchir la liste).
  • Dans le nouveau menu, on clique sur Modifier la configuration puis sur l'onglet Xfer.
  • Là, on va vérifier que XferMethod est sur rsync (et modifier le cas échéant).
  • On sauvegarde au besoin.
  • On clique sur Client Accueil et on clique sur Dé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.

Paramétrage

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.

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.

Droits

Pour pouvoir utiliser les commandes spéciales de BackupPC et accéder à ses logs, l'utilisateur 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

Erreurs et Corrections

Problème

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

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

Problème

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

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

É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.

Entrer votre commentaire. La syntaxe wiki est autorisée:
 
  • linux_backuppc.txt
  • Dernière modification : 2021/03/05 14:55
  • de nekan