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:
sshd_config
sur la machine cible sur PermitRootLogin without-password
. 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. /root/.ssh/id_rsa.pub
de la machine de sauvegarde aux /root/.ssh/authorized_keys
de votre machine cible. 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é avecsudo
? 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.