rsync tous les files de la machine distante sur SSH sans user root?

J'ai cette command pour sauvegarder une machine distante. Le problème est que j'ai besoin de droits root pour lire et copyr tous les files. Je n'ai pas d'user root activé pour des raisons de security et utilise sudo la manière Ubuntu. Aurais-je besoin d'une tuyauterie cool ou quelque chose pour le faire?

 rsync -chavzP --stats [email protected]:/ . 

Je reorderais que vous utilisez juste le count root en premier lieu. Si vous le configurez comme ceci:

  • Configurez votre sshd_config sur la machine cible sur PermitRootLogin without-password .
  • Utilisez ssh-keygen sur la machine qui extrait la sauvegarde pour créer une key privée SSH (uniquement si vous n'avez pas déjà de key SSH). Ne définissez pas de phrase de passe. 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 aux /root/.ssh/authorized_keys de votre machine cible.
  • Maintenant votre machine de sauvegarde a un access root à votre machine cible, sans avoir à utiliser l'authentification par mot de passe.

alors l'installation résultante devrait être assez sûre.


sudo , en particulier combiné avec NOPASSWD comme recommandé dans les commentaires, n'a aucun avantage sur la security en utilisant simplement le count root. Par exemple cette suggestion:

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

donne essentiellement des permissions root rsyncuser toute façon. Tu requests:

@MartinvonWittich Facile à gagner un shell root complet car rsync exécuté avec sudo ? Marche [m] e [à travers] s'il te plait.

Eh bien, simple. Avec la configuration recommandée, rsyncuser peut maintenant exécuter rsync tant que root sans même avoir demandé un mot de passe. rsync est un outil très puissant pour manipuler les files, alors maintenant, rsyncuser possède un outil très puissant pour manipuler les files avec les droits 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éé une coquille de racine; whoami identifie mon count en tant que root, je peux créer des files dans /etc , et je peux lire depuis /etc/shadow . Mon exploit était de définir le bit setuid sur le binary du dash ; cela oblige Linux à toujours exécuter ce binary avec les permissions 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 count 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 de cargaison – vous ne comprenez pas vraiment le concept derrière sudo vs racine, vous appliquez aveuglément la croyance «la racine est mauvaise, sudo est bon» parce que vous l'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 Linux graphique, disons Ubuntu, il est sudo utiliser sudo dans les rares cas où vous avez parfois besoin d'un access root. Ubuntu a intentionnellement un count root désactivé et vous oblige à utiliser sudo par défaut pour empêcher les users d'utiliser toujours le count root pour se connecter. Lorsque l'user veut simplement utiliser par exemple le browser Web, la connection en tant que root serait dangereuse chose, et donc ne pas avoir un count root par défaut empêche les gens stupides de le faire.

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

Utilisez l'option --rsync-path . Votre command devrait alors être

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

Voir l'exemple sur http://www.ustrem.org/fr/articles/rsync-over-ssh-as-root-en/ .

Cela ne fonctionnera pas si sudo vous request un mot de passe. Pour éviter cela, exécutez ssh -t [email protected] sudo premier et entrez le mot de passe. Assurez-vous que les options require_tty et tty_tickets sont désactivées dans le file sudoers ; puisque tty_tickets est activé par défaut, placez Defaults !tty_tickets dans le file sudoers .

Un moyen simple de le faire est d'utiliser le programme graphique ssh-askpass avec sudo , cela permet de contourner le fait que sudo n'est pas connecté au terminal et vous permet d'entrer le mot de passe en toute security:

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

Bien sûr, le programme ssh-askpass doit être installé à l'location indiqué et vous devez exécuter une session X sur la machine sur laquelle vous travaillez. Il y a quelques variations sur le programme ssh-askpass qui devraient aussi fonctionner (versions Gnome / KDE). Aussi un programme de rlocation sudo graphique comme gksu ou kdesudo devrait également fonctionner.

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

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

J'ai rencontré ce problème aujourd'hui et l'ai résolu sans avoir besoin de modifier les files de configuration ou d'octroyer des permissions de niveau racine aux counts d'users. Ma configuration particulière était que l'user A sur la machine foo devait copyr tous les directorys user de foo à la bar machine dans un directory de backup que possédait l'user A (L'user A a des privilèges sudo sur foo .)

La command que j'ai utilisée est ci-dessous. Il a été appelé par l'user A dans le directory /home de foo .

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

Cela fonctionne comme rsync sudo afin que tous les directorys user sur foo peut être consulté mais il indique à rsync d'utiliser ssh pour accéder à la bar machines en utilisant les informations d'identification de l'user A Mes besoins étaient légèrement différents de la question ci-dessus mais cela m'a permis d'get rapidement une sauvegarde de tous les directorys users sur une machine particulière que je gère sans avoir à mordre avec la configuration du système.

Exécuter rsync en tant que démon sur la machine cible vous permet de faire ce que vous voulez.