[MÉMO] RSYNC d’un Debian vers un NAS QNAP

Comment rapatrier/synchroniser des fichiers d’un serveur Debian par exemple, vers son NAS QNAP en passant par RSYNC. On a vu comment le faire entre deux serveurs et avec une connexion SSH, mais sur un NAS QNAP cela n’est pas possible. Pas possible à moins de se connecter en SSH avec le compte admin (ou root) et de récupérer sa clé SSH… Non merci ! D’un point de vue sécurité c’est tout de même gênant de faire ça avec un compte administrateur… Il existe aussi une autre possibilité en modifiant les paramètres de /etc/ssh/sshd_config mais j’ai été un peu frileux sur le coup… et a priori ça saute à chaque redémarrage du NAS. À moins de carrément installer un autre gestionnaire SSH.

On est donc obligé de procéder différemment. Ce n’est pas non plus l’idéal du point de vue sécurité puisqu’il va falloir écrire un mot de passe en clair. Mais au moins ce ne sera pas un compte root ! 😉

Ce tutoriel part du principe que votre NAS est déjà accessible depuis l’extérieur (de l’autre côté de la box de votre FAI) en passant par exemple par NoIP si vous n’avez pas d’IP fixe.

 

Sur le NAS QNAP

Première chose à faire, c’est d’activer RSYNC sur le NAS. On tape « rsync » dans la barre de recherche de l’interface web, comme ci-dessous, et ensuite on clique sur le premier résultat « Serveur de sauvegarde ».

Recherche des paramètres RSYNC
Recherche des paramètres RSYNC

 

Cela nous ouvre le gestionnaire de sauvegarde :

Gestionnaire de sauvegarde - Onglet "Serveur Rsync"
Gestionnaire de sauvegarde – Onglet « Serveur Rsync »

Rien de plus simple, on choisit un port ou on laisse celui par défaut (mais il faudra le natter sur son routeur/box internet de toute manière), ensuite on autorise la sauvegarde depuis un serveur distant. On coche aussi la permission de sauvegarder des données sur ce NAS pour pouvoir accéder aux champs « Nom » et « Mot de passe ». Vous entrez ce que vous voulez, mais n’hésitez pas à mettre un identifiant « complexe » et pareil pour le mot de passe. On les note à côté, on s’en resservira plus tard, et on applique. 😉

Tant qu’on est sur le NAS je vous conseille de créer un dossier partagé dédié à cette tache via le panneau de contrôle. Il sera appelé « rsync » pour moi.

 

Sur le serveur distant

Ce serveur distant est en fait le serveur source. C’est-à-dire que c’est lui qui contient les fichiers que l’on veut maintenant sauvegarder sur le NAS. 😉

De mon côté c’est un Debian Stretch, mais c’est un peu pareil partout tant que RSYNC tourne.

C’est là qu’il est conseillé (encore) de créer un utilisateur spécifique pour cette tâche. De mon côté il s’appellera « rsync-qnap ». On lui créer un répertoire home et ensuite :

Fichier contenant le MDP du NAS
cd /home/rsync-qnap
nano pwd-qnap.txt

 

Insertion du mot de passe que l’on vient de créer sur le NAS pour RSYNC. On l’insère sur la première ligne et c’est tout :

pwd-qnap.txt
mon_mot_de_passe

 

On va également sécuriser un minimum ce fichier :

chown rsync-qnap /home/rsync-qnap/pwd-qnap.txt
chmod 600 /home/rsync-qnap/pwd-qnap.txt

 

Et maintenant un petit script qui saura envoyer un mail à la fin de la synchronisation :

/home/scripts/backup/rsync.sh
#!/bin/bash

# Répertoire de stockage des logs qu'il faudra créer
LOGDIR="/home/rsync-qnap/rsync_log/"
# Répertoire sur le serveur à envoyer vers les NAS
DATADIR="/home/rsync-wp/backup"
# Email pour les erreurs (0 pour désactiver)
EMAIL=votre_email
# L'IP de votre NAS ou le domaine No-IP
QNAP_HOST=mon_nas.ddns.net
# Le port natter sur votre box vers votre NAS
QNAP_PORT=5400
# L'user rsync configuré dans votre NAS
QNAP_USER=qnap-rsync
# L'emplacement du fichier contenant le mot de passe du QNAP
QNAP_MDP="/home/rsync-qnap/pwd-qnap.txt"
# Emplacement sur le NAS sans le slash devant !
QNAP_DIR="rsync/wp"
# Log de sortie
exec 1> ${LOGDIR}/out_qnap.log
# Log d'erreur
exec 2> ${LOGDIR}/error_qnap.log

## Début du script

ionice -c3 -p$$ &>/dev/null
renice -n 19 -p $$ &>/dev/null

function cleanup {
if [ "`stat --format %s ${LOGDIR}/error_qnap.log`" != "0" ] && [ "$EMAIL" != "0" ] ; then
cat ${LOGDIR}/error_qnap.log | mail -s "RSYNC KS-2->QNAP ERROR" ${EMAIL}
else echo "Pas d'erreur sur le transfert RSYNC du KS-2 vers le NAS QNAP" | mail -s "RSYNC KS-2->QNAP OK" ${EMAIL}
fi
}
trap cleanup EXIT

echo "DEBUT du transfert RSYNC de WP sur le QNAP"
rsync -cazov --progress --password-file=${QNAP_MDP} --port=${QNAP_PORT} --delete ${DATADIR} ${QNAP_USER}@${QNAP_HOST}::${QNAP_DIR}
echo "FIN du transfert RSYNC de WP sur le QNAP"

 

À adapter en fonction de vos préférences. On peut également dupliquer les 3 dernières lignes (en changeant les variables !!) si l’on veut synchroniser plusieurs répertoires bien distincts.

Pour les droits d’exécution :

chmod +x /home/scripts/backup/rsync.sh

 

Pour tester le script avec l’utilisateur rsync-qnap :

su -l rsync-qnap -c "/bin/bash /home/scripts/backup/rsync.sh"

 

Il se peut qu’il y ait des soucis de permissions par rapport au dossier à synchroniser… Dans mon cas c’était car les dump des BDD n’avait des droits de lectures qu’au propriétaire, qui n’était pas rsync-qnap mais l’utilisateur rsync-XX dédié au rapatriement des sauvegardes du serveur source vers mon Kimsufi de backup. Bref pour ça j’ai un script qui donne les droits de lectures au groupe et ensuite j’ajoute mon utilisateur rsync-qnap aux groupes correspondants :

/home/scripts/backup/rights_attribution.sh
#!/bin/bash

## WP
chmod -R 640 /home/rsync-wp/backup/bdd/{*.tar.bz2,*.log}
chmod -R 640 /home/rsync-wp/backup/bdd/month/*.tar.bz2
chmod -R 640 /home/rsync-wp/backup/www/*

 

Et pour l’attribution aux groupes :

# usermod -a -G [GROUP] [USER]
usermod -a -G rsync-wp rsync-qnap

 

Automatisation

Rien de bien compliqué, ça reprend les bases de mon autre article sur RSYNC.

En cron pour les droits (à 9h du matin par exemple) :

crontab -e
## Attribution des droits pour les backup et RSYNC
# A lancer juste avant le RSYNC
00 09 * * * sh /home/scripts/backup/rights_attribution.sh

 

Et pour le scripts RSYNC (qui sera lancé à 10h du matin) :

/etc/cron.d/rsync
#
# RSYNC CRON - vers QNAP
#
# m h dom mon dow user command
00 10 * * * rsync-qnap /bin/bash /home/scripts/backup/rsync.sh

Me voilà donc avec un système de sauvegarde qui commence à être solide (BCKP sur chaque VM -> transfert vers mon KS-2 -> transfert vers mon NAS QNAP).

Mes sauvegardes sont donc stockées sur le serveur source, sur mon Kimsufi, et sur mon NAS. Il ne me reste plus qu’à configurer un script FTP pour profiter de mon espace de sauvegardes « Dedi-Backup » de Online (100 Go) pour être vraiment tranquille !

Mais d’abord je vais revoir mon système de sauvegarde entre mon PC Windows et mon NAS car cela fait bien trop longtemps que je manque de sérieux à ce niveau !

Et puis je voudrais aussi mettre en place une sauvegarde de mon instance NextCloud. Pour pouvoir migrer sereinement toutes mes données actuellement sur OneDrive et GoogleDrive vers mon cloud personnel. 😉

MAJ : c’est fait et j’ai un tuto pour ça.

 

N’hésitez pas à me dire en commentaire comment vous procédez de votre côté, et si vous trouvez des erreurs/problèmes/failles dans mes scripts. 😉