Automatisation des sauvegardes
Je souhaite implémenter une solution de sauvegarde avec copie des données de divers répertoires d'un serveur Web (WebServer) vers un serveur de sauvegarde local (BackupServer). La sauvegarde doit fonctionner sans surveillance et je voudrais donc utiliser une authentification basée sur une clé avec une clé privée sans mot de passe.
Rsync privilégié
Les répertoires que je souhaite sauvegarder ne sont lisibles que par un utilisateur privilégié. Je voudrais utiliser rsync pour copier les fichiers. J'ai créé un utilisateur de sauvegarde dédié et autorise l'utilisateur à exécuter rsync avec sudo sans être invité à entrer un mot de passe avec la règle visudo:
backup-user ALL = NOPASSWD: /usr/bin/rsync
Considérations de sécurité
Je voudrais améliorer la sécurité en restreignant les commandes que l'utilisateur de sauvegarde peut exécuter en ajoutant une liste de commandes au fichier authorized_keys du WebServer. J'ai installé rrsync comme mentionné dans cet article .
command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...
Rrsync attend un sous-répertoire
Contrairement au rsync normal, le rrsync s'attend à ce qu'un sous-répertoire soit fourni dans le fichier de clé autorisé, comme décrit dans ce billet de blog
command="/usr/share/rsync/rrsync /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa
Cette restriction fonctionne mais elle ne me permet de sauvegarder qu'un répertoire spécifique à savoir le / var / backup / client1 /
Je voudrais fournir les répertoires que je veux sauvegarder à partir du BackupServer dans la commande rsync. Existe-t-il une possibilité d'utiliser rrsync exactement comme rsync, par exemple:
rsync -avze ssh --rsync-path='sudo rrsync' backupuser@111.222.33.44:/media/data /backups/Server/
Clarification supplémentaire
Je suis conscient que la partie command = "..." dans authorized_hosts limite les commandes exécutables pour cet utilisateur à exactement celles fournies, mais avec le rsync normal, je peux faire quelque chose comme ça pour fournir le chemin que je veux sauvegarder comme un paramètre:
command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"
Cela ne fonctionne pas avec rrsync.
Solution acceptée
Bien que techniquement pas la réponse définitive à la question, je pense que la solution proposée par Gilles est une très belle approche. J'ai créé un dossier racine pour toutes les vues du répertoire réel que je veux sauvegarder. Pour cette raison, je peux restreindre en toute sécurité l'authentification à rrsync uniquement.
One time todo
sudo mkdir /mnt/Backups-Rsync-Readonly
sudo chown -R rsync-backup /mnt/Backups-Rsync-Readonly
sudo mkdir /mnt/Backups-Rsync-Readonly/VAR-WWW
sudo mkdir /mnt/Backups-Rsync-Readonly/MySQL-Backups
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/MySQL-Backups
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/VAR-WWW
Créer des vues (disparues après le redémarrage)
sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /var/www /mnt/Backups-Rsync-Readonly/VAR-WWW
sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /MySQL-Dumps /mnt/Backups-Rsync-Readonly/MySQL-Backups
Version Fstab
/home/stefan/Scans /mnt/Backups-Rsync-Readonly/VAR-WWW fuse.bindfs perms=0000:u=rD,force-user=rsync-backup 0 0
Clés_autorisées
command="/usr/bin/rrsync -ro /mnt/Backups-Rsync-Readonly",from="192.168.0.10",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB
command=
L'option inauthorized_keys
accepte une seule commande qui est exécutée. C'est ça.