Autorisation rsync refusée de sauvegarder un répertoire distant sur ma machine locale

11

Je reçois l'erreur mentionnée dans le titre.

J'ai trouvé cette question similaire: Exécutez rsync avec l'autorisation root sur la machine distante . Cela ne répond pas à ma question.

Je suis l'administrateur du serveur distant et je souhaite utiliser rsyncpour sauvegarder des fichiers dans ma boîte locale. Voici ma commande rsync:

$ rsync -avz [email protected]:/var/www/ /backups/Sites/MySite/

Cela fonctionne surtout. La connexion se fait via une paire de clés. Je n'utilise pas et ne peux pas utiliser de mot de passe (EDIT: pour me connecter via SSH). Seuls quelques fichiers ne seront pas transférés en raison des autorisations. Je ne veux pas modifier ces autorisations.

Voici l'erreur:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

Je ne pas souhaite modifier les autorisations sur ce fichier. Il (et d'autres comme ça) ne devrait pas être lisible (sauf par root).

Cela doit s'exécuter dans un travail cron et je préfère une solution simple sur une seule ligne utilisant uniquement la commande rsync. Le prochain choix serait un script shell que je peux appeler à partir de la tâche cron. En aucun cas, je ne peux me connecter manuellement à la machine distante et devenir root (car je dormirai lorsque cela fonctionnera.

Comment puis-je utiliser rsync pour le sauvegarder sur ma box locale?

MountainX
la source
pouvez-vous s'il vous plaît nous montrer quelque chose comme ssh [email protected] "cat /var/www/webapp/securestuff/install.php"> fichier local?
Florenz Kley
@Florenz Kley: Je ne comprends pas votre commentaire
MountainX
montrez-moi que vous pouvez lire le fichier et je vous montre une commande rsync qui fonctionne :-). L'option # 2 de grawity est probablement votre meilleur pari.
Florenz Kley
@Florenz Kley: ssh [email protected] "echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php"> localfile
MountainX
J'ai compris rsync: send_files failed to open "/cygdrive/...": Permission denied (13). Mon ordinateur source était donc Windows cygwin. Situation légèrement différente, mais pour la postérité, ma solution consistait à cliquer avec le bouton droit sur cmd.exe et à exécuter en tant qu'administrateur .
Bob Stein

Réponses:

8

Vous ne pouvez pas sauvegarder un fichier que vous ne pouvez pas lire autrement, donc les autorisations devront être modifiées ou remplacées par root .

Vos options plus en détail:

  • Remplacez les autorisations en rsync'ing comme [email protected]directement. (

  • ... ou en configurant sudo sur le serveur pour permettre l'exécution sans mot de passe du rsynccomposant côté serveur.

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    et

    rsync --rsh="ssh [email protected] sudo" -avz /var/www/ /backups/...
    
  • Créez un compte dédié de «sauvegarde de site Web» sur le serveur. Modifiez les autorisations des fichiers pour les rendre lisibles sur le compte "sauvegarde de site Web"; vous pouvez utiliser des listes de contrôle d'accès et setfaclpour cela. N'utilisez pas ce compte pour autre chose.

    rsync -avz [email protected]:/var/www/ /backups/sites/mysite/
    
  • Écrivez un script sur le serveur qui viderait / var / www / dans une archive tar chiffrée. Encore une fois, cela peut être fait en tant que root (via crontab) ou en configurant sudo pour ne pas exiger de mot de passe pour ce script. Par exemple:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r [email protected]
    

    La sauvegarde serait effectuée en tirant l'intégralité de l'archive tar à chaque fois, ce qui pourrait être inefficace avec les grands sites:

    ssh [email protected] "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    L'exigence de mot de passe serait supprimée en modifiant sudoers :

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    
user1686
la source
Merci. Bonnes suggestions. L'un ou l'autre fonctionnera probablement pour moi. J'envisage également d'utiliser la solution sur superuser.com/questions/270911/… si je peux comprendre ses effets secondaires potentiels.
MountainX
BTW, je voulais dire l'un des 2 derniers choix. La connexion en tant que root via SSH n'est pas autorisée sur le serveur.
MountainX
@MountainX: J'ai séparé "rsync via sudo" comme choix séparé. Cela pourrait aussi fonctionner.
user1686
Merci! "rsync via sudo" serait mon choix préféré. J'essaierai votre suggestion. Il semble que je doive implémenter cela en utilisant visudo sur Ubuntu sur le serveur. Je n'ai pas beaucoup gâché avec visudo, mais vous m'en avez donné assez pour me lancer. Merci encore.
MountainX
5

Dans l'hôte distant, vous pouvez exécuter le démon rsync avec

racine uid

dans le /etc/rsyncd.conffichier.

Cela permettra au démon d'utiliser la CAP_DAC_OVERRIDEcapacité et de lire le système de fichiers local sans changer les autorisations / la propriété.

Si vous avez juste besoin de faire une sauvegarde, il est recommandé de définir rsync en mode lecture seule:

lecture seule = vrai

altmas5
la source
0

Si les fichiers ne sont lisibles que par rootvous devez avoir rootaccès pour sauvegarder le fichier en le lisant à partir du système de fichiers. rsynclit les fichiers du système de fichiers et non du périphérique brut.

À l'exception des dump, ddet des sauvegardes similaires qui copient la partition plutôt que des fichiers, des programmes de sauvegardes lire les fichiers du système de fichiers. Les utilitaires de sauvegarde ne parviendront pas à lire et à sauvegarder les fichiers pour lesquels les autorisations de l'ID utilisateur utilisé pour les exécuter empêchent l'accès. C'est le cas que vous rencontrez.

Dans la plupart des cas, vous devez faire suffisamment confiance à votre logiciel de sauvegarde pour lui permettre de lire toutes vos données. Cela signifie également que vous devez faire confiance à votre support de sauvegarde avec toutes vos données. Dans certains cas, vous souhaiterez peut-être exclure certains fichiers de la sauvegarde et utiliser une autre méthode pour sauvegarder leur contenu.

EDIT: Pendant que vous archivez les données (en copiant toutes les autorisations), vous aurez besoin d'un accès root sur les deux serveurs. Si vous faites cela en tant que sauvegarde, vous voudrez peut-être envisager une solution comme BackupPC qui utilise rsync pour lire les fichiers, mais stocke les fichiers dans sa propre arborescence de répertoires.

BillThor
la source
Il existe des moyens de donner un accès root à rsync. Je ne les connais tout simplement pas. Ce que je demande, c'est comment donner à root un accès rsync pour sauvegarder ces fichiers. Peut-être que je dois revoir la réponse à "Exécuter rsync avec l'autorisation root sur la machine distante" et voir si je peux le découvrir ...
MountainX