Où sommes nous ?

Rsync securise

Rsync + ssh

Source

Securing Rsync

Le but est de créer une sauvegarde automatique des documents de mon serveur principal (bpi) vers mon serveur de dev (torchwood).

Aspect sécurité

Plusieurs points imports :

Création d'un utilisateur dédié côté client

useradd -m sauvegarde -p blabla -G www-data

Il doit avoir un home pour faciliter la configuration de ssh. On l'ajoute dans le groupe auquel appartient les données à sauvegarder.

Génération de la clef serveur

laurent@torchwood ~ $ ssh-keygen -t rsa -b 4096 -o -a 64
Generating public/private rsa key pair.
Enter file in which to save the key (/home/laurent/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/laurent/.ssh/id_rsa.
Your public key has been saved in /home/laurent/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:d7ZjV4cOUNJgD9cJgb2WCMhcQ8rfd+h/i9oGb355Imk laurent@torchwood
The key's randomart image is:
+---[RSA 4096]----+
|     o ++ ===+ . |
|     .+..o.*o o  |
|      o  ....o   |
|       . ...+. . |
|        S o.* o o|
|         . * = ..|
|            B.o .|
|           .EBooo|
|           o==o+o|
+----[SHA256]-----+

Que l'on copie sur l'autre le serveur client :

ssh-copy-id sauvegarde@bpi.chez.moi

Normalement, un

ssh sauvegarde@bpi.chez.moi

devrait permettre de se logger sans mot de passe (on corrigera cette faille dans l'étape suivante).

Détermination de la commande lancée côté client

Lancé la commande avec le ssh en mode verbose (ssh -v) :

rsync -avz -e'ssh -v' --stats --exclude=".*" --delete --progress --hard-links --numeric-ids sauvegarde@bpi.chez.moi:/web/trans/ ~/Sauvegardes/Documents/ > /dev/null

et chercher la ligne

debug1: Sending command: rsync --server --sender -vnlHogDtprze.iLsfxCIv --numeric-ids . /web/trans/

On la note, on va s'en servir comme unique commande autorisée.

Sécurisation du client

Ajouter dans ~compte/.ssh/authorized_keys du client, avant la clef, la commande que nous avons noté précédement

restrict,from="<adresse torchwood>",command="rsync --server --sender -vnlHogDtprze.iLsfxCIv --numeric-ids . /web/trans/"

Lancer la synchro sur le serveur de sauvegarde

Il n'y a qu'à relancer la commande précédente :

rsync -avz --exclude=".*" --stats --delete --progress --hard-links --numeric-ids sauvegarde@bpi.chez.moi:/web/trans/ ~/Sauvegardes/Documents/

Mise en situation

Maintenant que les sauvegardes fonctionnent, il faut les lancer régulièrement : c'est le rôle du bien connu cron. Et en plus, on va être notifié lorsqu'une sauvegarde échoue.

launch

Launch est un script shell que j'ai créé il y a bien longtemps et qui permet de logger le résultat d'une commande. J'ai juste modifié le script pour que les logs soient mis dans /tmp/logs plutot que /var/log.

crontab

Je garde sous silence l'installation du démon cron et de la configuration pour que l'utilisateur qui effectuera les sauvegardes puisse l'utiliser : c'est classique et dépend de la distribution.

Les sauvegardes se feront en fin de journée, tous les jours a 2h du matin. On doit donc créer la crontab suivante :

00 02 * * * /usr/local/bin/launch rsync -avz --exclude=".*" --stats --delete --progress --hard-links --numeric-ids sauvegarde@bpi.chez.moi:/web/trans/ ~/Sauvegardes/Documents/
00 04 * * * find /tmp/logs/batches/ -type f -mtime +15 -exec rm {} ;

La seconde ligne va purger les logs après 15j.


Visitez :
La liste de nos voyages
Nos sorties Ski et rando
Copyright Laurent Faillie 2001-2025
N'oubliez pas d'entrer le mot de passe pour voir aussi les photos perso.
Contactez moi si vous souhaitez réutiliser ces photos et pour les obtenir avec une plus grande résolution.
Visites durant les 7 derniers jours Nombre de visites au total.

Vous pouvez laissez un commentaire sur cette page.