Utilisation de rsync avec sudo sur la machine de destination


39

Ayant un problème pour lequel rsync ne définit pas les identifiants UID et GID comme prévu , je suis convaincu que cela rsyncdevrait être exécuté comme rootsur la machine de destination.

Je ne parviens pas à me connecter rootvia SSH, car cette fonctionnalité est désactivée pour des raisons de sécurité. L'utilisateur de la machine de destination peut utiliser sudo.

Est-il possible d'utiliser rsyncavec sudo?

Réponses:


68

Sur la machine de destination

  1. Découvrez le chemin pour rsync:which rsync
  2. Editer le /etc/sudoersfichier: sudo visudo(voir aussi: dois-je utiliser visudo? )
  3. Ajoutez la ligne <username> ALL=NOPASSWD:<path to rsync>, où nomutilisateur correspond au nom de connexion de l'utilisateur que rsync utilisera pour se connecter. Cet utilisateur doit pouvoir utilisersudo

Ensuite, sur la machine source, spécifiez qui sudo rsyncdoit être utilisé:

rsync ... --rsync-path="sudo rsync" ...

L’utiliser sans l’ NOPASSWDordinateur de destination produira le message

sudo: aucun tty présent et aucun programme askpass spécifié


Quelle est la modification à cela qui permettrait à n'importe quel utilisateur d'un groupe spécifique de le faire? Au lieu de <nom d'utilisateur>, existe-t-il une version de <nom du groupe>?
Brian

3
Merci, seulement j'utilise pki alors j'ai utilisé-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
À

1
Bien sûr, <nom d'utilisateur> peut maintenant tout lire / écrire en tant que root à l'aide de rsync, localement et à distance. Par conséquent, la partie relative à l'impossibilité de se connecter en tant que root pour des raisons de sécurité est un peu discutable ... parce que c'est essentiellement ce que vous faites maintenant. .
Hmn

1
Vous obtenez toujours l'erreur "pas présent ..." après avoir suivi ces instructions? J'ai été. S'assurer que la ligne que j'ai ajoutée /etc/sudoersvient à la fin du fichier (ou après toute règle de groupe pouvant affecter le même utilisateur) a résolu le problème pour moi.
CPBL

1
J'utilise cette solution, mais j'aimerais améliorer la sécurité en limitant les arguments que l'utilisateur peut transmettre à rsync sur le serveur de destination. En règle générale, je limiterais les arguments avec lesquels on peut utiliser <username> ALL=NOPASSWD:<path to rsync> <args>mais je ne sais pas ce que seraient les arguments quand ils sont appelés à distance comme ceci. Des idées?
Pete Cornell

3

Vous pouvez demander à votre sudo distant de vous demander votre mot de passe via X-windows. Voici un moyen de le faire:

  1. Assurez-vous qu’il ssh-askpassest installé sur l’hôte distant (et que vous utilisez bien entendu X-windows)
  2. Assurez-vous que c'est dans /etc/sudo.conf:
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
  1. Ajoutez ces options à rsync: -e "ssh -X" --rsync-path="sudo -A rsync"

    • ssh -X transmettra vos informations X-windows et votre portage à votre session à distance
    • sudo -A sudo utilisera ssh-askpass pour vous demander votre mot de passe

Fonctionne sur Ubuntu 18; créez /etc/sudo.conf (s'il n'existe pas déjà) sur la destination m / c
Snidhi Sofpro

0

Ma solution est d'utiliser --rsync-path="sudo rsync", si elle demande un mot de passe, vous pouvez utiliser une solution de contournement comme ceci:

rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  user@192.168.1.2:/ .

Mais ce n’est pas sûr de mettre un mot de passe en ligne de commande.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.