Nous allons voir dans cet article comment mettre en place une sauvegarde automatique de votre serveur sur un serveur distant avec Rsync.
Créer un utilisateur sur le serveur distant
Connectez-vous sur le serveur distant et créer un nouvel utilisateur, par exemple « rsync_user ».
sudo adduser rsync_user
Modifier les permissions de façon à ce qu’il ait uniquement accès aux répertoires nécessaires.
sudo mkdir -p /path/to/allowed/directory
sudo chown rsync_user:rsync_user /path/to/allowed/directory
Si nécessaire, interdisez les connexions interactives pour cet utilisateur :
sudo usermod -s /bin/false rsync_user
Configurez ensuite l’authentification par clé ssh et copier la clé publique sur le serveur distant.
Vous pouvez tester la connexion SSH avec la commande suivante : ssh -i ~/.ssh/id_rsa_rsync rsync_user@remote-server
Si tout est bien configuré, vous n’aurez pas besoin de saisir de mot de passe et vous pouvez passer à la suite.
Synchroniser les données via Rsync en ssh
La commande suivante permet de réaliser la sauvegarde en SSH :
rsync -avhz --delete --progress --log-file=rsync.log -e "ssh -i /home/rsync_user/.ssh/id_rsa_rsync" /chemin/repertoire/source/ rsync_user@[IP Serveur distant]:/chemin/repertoire/destination/
Descriptif des options utilisées :
- -h : human-readable -> Les nombres dans les messages de sortie sont dans un format compréhensible par des humains
- –progress : montre le progrès du transfert en cours
- -a : mode archive
- -v : augmente la verbosité
- –delete : si des fichiers sont supprimés sur la source, ils seront supprimés également sur la destination
- –log-file : ajoute un fichier de log
Point d’attention sur les droits
L’utilisateur rsync_user doit avoir les droits en lecture sur tous les dossiers et fichiers du répertoire à sauvegarder. Pour ce faire, j’ai retenu deux alternatives.
Utilisation d’ACL
Une bonne solution est d’utiliser ACL (à activer le cas échéant), via les commandes suivantes :
- Donner l’accès en lecture à tout le répertoire source
/chemin/repertoire/source/sudo setfacl -R -m u:rsync_user:rx /chemin/repertoire/source/ - Faire en sorte que l’héritage s’applique à tous les futurs fichiers ou dossiers
sudo setfacl -R -d -m u:rsync_user:rx /chemin/repertoire/source/
Pour ensuite vérifier les ACL sur un fichier donné : getfacl /chemin/repertoire/source/unFichier
La réponse devrait être user::rxrsync_user
Utilisation de sudoers
L’utilisateur rsync_user n’a pas besoin de lire, mais uniquement de sauvegarder les données.
Dans ce cas, on peut l’ajouter dans /etc/sudoers :
rsync_user ALL=(ALL) NOPASSWD: /usr/bin/rsync
En crontab ou ligne de commande, il suffit ensuite de lancer la commande rsync ainsi :
sudo rsync [... paramètres ...] /chemin/repertoire/source/ /chemin/repertoire/destination/