web-dev-qa-db-fra.com

rsync tous les fichiers de la machine distante via SSH sans utilisateur root?

J'ai cette commande pour sauvegarder une machine distante. Le problème est que j'ai besoin des droits root pour lire et copier tous les fichiers. Je n'ai pas d'utilisateur root activé pour des raisons de sécurité et j'utilise Sudo à la manière Ubuntu. Aurais-je besoin de tuyaux sympas ou de quelque chose pour le faire?

rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
70
redanimalwar

Je vous recommande d'utiliser simplement le compte root en premier lieu. Si vous l'installez comme ceci:

  • Configurez votre sshd_config sur la machine cible à PermitRootLogin without-password.
  • Utilisation ssh-keygen sur la machine qui extrait la sauvegarde pour créer une clé privée SSH (uniquement si vous ne disposez pas déjà d'une clé SSH). Ne définissez pas de phrase secrète. Google un tutoriel si vous avez besoin de détails pour cela, il devrait y en avoir beaucoup.
  • Ajoutez le contenu de /root/.ssh/id_rsa.pub de la machine de sauvegarde vers le /root/.ssh/authorized_keys de votre machine cible.
  • Maintenant, votre machine de sauvegarde a un accès root à votre machine cible, sans avoir à utiliser l'authentification par mot de passe.

alors la configuration résultante devrait être assez sûre.


Sudo, spécialement combiné avec NOPASSWD comme recommandé dans les commentaires, n'a aucun avantage en termes de sécurité par rapport à l'utilisation du compte root. Par exemple, cette suggestion:

ajoutez ce qui suit à votre /etc/sudoers fichier: rsyncuser ALL= NOPASSWD:/usr/bin/rsync

donne essentiellement rsyncuser des autorisations root de toute façon. Tu demandes:

@MartinvonWittich Facile d'obtenir un shell racine complet parce que rsync exécuté avec Sudo? Parcourez [m] e [à travers] cela s'il vous plaît.

Eh bien, simple. Avec la configuration recommandée, rsyncuser peut maintenant exécuter rsync en tant que root sans même être invité à saisir un mot de passe. rsync est un outil très puissant pour manipuler des fichiers, donc maintenant rsyncuser dispose d'un outil très puissant pour manipuler des fichiers avec des autorisations root. Trouver un moyen d'exploiter cela m'a pris quelques minutes (testé sur Ubuntu 13.04, nécessite dash, bash n'a pas fonctionné):

martin@martin ~ % Sudo rsync --perms --chmod u+s /bin/dash /bin/rootdash
martin@martin ~ % rootdash
# whoami
root
# touch /etc/evil
# tail -n1 /etc/shadow
dnsmasq:*:15942:0:99999:7:::

Comme vous pouvez le voir, je me suis créé un Shell racine; whoami identifie mon compte en tant que root, je peux créer des fichiers dans /etc, et je peux lire à partir de /etc/shadow. Mon exploit a été de définir le bit setuid sur le binaire dash; cela oblige Linux à toujours exécuter ce binaire avec les autorisations du propriétaire, dans ce cas root.

Avoir une vraie racine n'est pas [recommandé] pour de bonnes raisons. - redanimalwar il y a 15 heures

Non, travailler maladroitement autour du compte root dans des situations où il est absolument approprié de l'utiliser n'est pas pour de bonnes raisons. Ceci est juste une autre forme de programmation culte du fret - vous ne comprenez pas vraiment le concept derrière Sudo vs root, vous appliquez simplement aveuglément la croyance "root is bad, Sudo is good" parce que vous avez lu quelque part.

D'une part, il y a des situations où Sudo est définitivement le bon outil pour le travail. Par exemple, lorsque vous travaillez de manière interactive sur un bureau graphique Linux, disons Ubuntu, alors avoir à utiliser Sudo est très bien dans les rares cas où vous avez parfois besoin d'un accès root. Ubuntu a intentionnellement un compte root désactivé et vous oblige à utiliser Sudo par défaut pour empêcher les utilisateurs d'utiliser toujours le compte root pour se connecter. Lorsque l'utilisateur veut simplement utiliser, par exemple le navigateur Web, puis se connecter en tant que root serait une chose dangereuse, et donc ne pas avoir de compte root par défaut empêche les gens stupides de le faire.

D'un autre côté, il existe des situations comme la vôtre, où un script automatisé nécessite des autorisations root sur quelque chose, par exemple pour effectuer une sauvegarde. Maintenant, utiliser Sudo pour contourner le compte root n'est pas seulement inutile, c'est aussi dangereux: à première vue, rsyncuser ressemble à un compte ordinaire non privilégié. Mais comme je l'ai déjà expliqué, il serait très facile pour un attaquant d'obtenir un accès root complet s'il avait déjà obtenu un accès rsyncuser. Donc, essentiellement, vous avez maintenant un compte root supplémentaire qui ne ressemble pas du tout à un compte root, ce qui n'est pas une bonne chose.

93
Martin von Wittich

Utilisez le --rsync-path option pour exécuter la commande distante rsync avec les privilèges Sudo. Votre commande devrait alors être par exemple:

rsync -chavzP --rsync-path="Sudo rsync" --stats [email protected]:/ .

Si Sudo vous invite à entrer un mot de passe, vous devez éviter cela soit en utilisant un privilège NOPASSWD avec le compte d'utilisateur distant (inutile pour root, peut avoir du sens dans d'autres cas d'utilisation), ou si vous ne voulez pas faire ça:

  • Assurez-vous que l'option tty_tickets est désactivé pour l'utilisateur que vous utilisez, en exécutant par exemple Sudo visudo -f /etc/sudoers.d/local-rsync et en entrant:

    Defaults:your.username.for.rsync !tty_tickets
    
  • Assurez-vous que l'option requiretty est désactivée pour l'utilisateur que vous utilisez - elle pourrait être désactivée par défaut. La méthode est la même que ci-dessus.

  • Amorcez le mot de passe Sudo sur la machine distante, en exécutant par exemple ssh -t [email protected] Sudo

75
M_dk

Une façon simple de le faire est d'utiliser le graphique ssh-askpass programme avec Sudo, cela permet de contourner le fait que Sudo n'est pas connecté au terminal et vous permet de saisir le mot de passe en toute sécurité:

rsync -chavzPe 'ssh -X' --stats \
  --rsync-path='Sudo_ASKPASS=/usr/lib/ssh/x11-ssh-askpass Sudo -A rsync' \
  [email protected]:/ .

Bien sûr, le ssh-askpass le programme doit être installé à l'emplacement indiqué et vous devez exécuter une session X sur la machine sur laquelle vous travaillez. Il existe quelques variantes de ssh-askpass programme qui devrait également fonctionner (versions Gnome/KDE). Un programme de remplacement graphique Sudo comme gksu ou kdesudo devrait également fonctionner.

17
Graeme

Si votre utilisateur a déjà des privilèges Sudo qui sont protégés par un mot de passe, je les garderais tels quels et ajouterais seulement une strophe pour utiliser rsync sans mot de passe:

%admin ALL=(ALL) ALL
%admin ALL= NOPASSWD:/usr/bin/rsync 
7
Gunnar Thielebein

J'ai rencontré ce problème aujourd'hui et l'ai résolu sans avoir besoin de modifier les fichiers de configuration ou d'accorder des autorisations de niveau racine aux comptes d'utilisateurs. Ma configuration particulière était que l'utilisateur A sur la machine foo devait copier tous les répertoires utilisateur de foo sur la machine bar dans un backup répertoire appartenant à l'utilisateur A. (L'utilisateur A a les privilèges Sudo sur foo.)

La commande que j'ai utilisée est ci-dessous. Il a été invoqué par l'utilisateur A dans le /home répertoire sur foo.

Sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A"  * B:/home/backup

Cela exécute rsync en tant que Sudo afin que tous les répertoires utilisateur sur foo soient accessibles mais il indique à rsync d'utiliser ssh pour accéder à la machine bar en utilisant les informations d'identification de l'utilisateur A. Mes besoins étaient légèrement différents de la question ci-dessus, mais cela m'a permis d'obtenir rapidement une sauvegarde de tous les répertoires utilisateur sur une machine particulière que je gère sans bouger avec la configuration du système.

5
Ken Anderson

L'exécution de rsync en tant que démon sur la machine cible vous permet de faire ce que vous voulez.

3
Konstantin

Ma solution consiste à utiliser --rsync-path="Sudo rsync" mais il demande un mot de passe, solution:

rsync -chavzP --stats --rsync-path="echo <SUDOPASS> | Sudo -Sv && Sudo rsync"  [email protected]:/ .
2
Bulat