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?

Thomas Weller
la source

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é

Thomas Weller
la source
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
Bill Burdick
la source
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"  [email protected]:/ .

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

Bulat
la source