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
Ubuntu. Aurais-je besoin d'une tuyauterie fraîche ou de quelque chose pour faire ça?
rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
root
compte en premier lieu.sudo
, spécialement combiné avec ceNOPASSWD
qui est recommandé dans les commentaires, n’améliore pas vraiment la sécurité de votre machine.Réponses:
Je recommanderais que vous utilisiez simplement le compte root en premier lieu. Si vous le configurez comme ceci:
sshd_config
sur la machine cible pourPermitRootLogin without-password
.ssh-keygen
sur la machine qui extrait la sauvegarde pour créer une clé privée SSH (uniquement si vous ne possédez pas déjà de 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./root/.ssh/id_rsa.pub
la machine de sauvegarde à la/root/.ssh/authorized_keys
de votre machine cible.alors la configuration qui en résulte devrait être assez sûre.
sudo
, surtout en combinaison avec ceNOPASSWD
qui est recommandé dans les commentaires, ne présente aucun avantage en matière de sécurité par rapport à l’utilisation du compte root. Par exemple cette suggestion:donne essentiellement les
rsyncuser
autorisations de la racine quand même. Tu demandes:Eh bien, simple. Avec la configuration recommandée,
rsyncuser
peut maintenant être exécuté enrsync
tant que root sans même avoir à demander un mot de passe.rsync
est un outil très puissant pour manipuler des fichiers, a donc maintenantrsyncuser
un outil très puissant pour manipuler des fichiers avec des autorisations root. Trouver un moyen d'exploiter cela ne m'a pris que quelques minutes (testé sur Ubuntu 13.04, nécessitedash
,bash
n'a pas fonctionné):Comme vous pouvez le constater, je me suis créé un shell racine;
whoami
identifie mon compte en tant que root, je peux créer des fichiers/etc
et lire/etc/shadow
. Mon exploit était de définir le bit setuid sur ledash
binaire; cela oblige Linux à toujours exécuter ce binaire avec les permissions du propriétaire, dans ce cas-ci root.Non, travailler maladroitement autour du compte root dans des situations où il est tout à fait 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 root, vous appliquez aveuglément la croyance "la racine est mauvaise, la sudo est bonne" parce que vous l'avez lu quelque part.
D'une part, il y a des situations où il
sudo
est vraiment le bon outil pour le travail. Par exemple, lorsque vous travaillez de manière interactive sur un poste de travail Linux graphique, supposons Ubuntu, alors l’utilisationsudo
est acceptable dans les rares cas où vous avez parfois besoin d’un accès root. Ubuntu a intentionnellement un compte root désactivé et vous obligesudo
par défaut à empêcher les utilisateurs de toujours utiliser le compte root pour se connecter. Lorsque l'utilisateur souhaite simplement utiliser, par exemple, un navigateur Web, il peut être dangereux de se connecter en tant que root. et, par conséquent, ne pas avoir de compte root par défaut empêche les personnes stupides de le faire.D’autre part, il existe des situations telles que la votre, dans lesquelles un script automatisé requiert des autorisations root sur quelque chose, par exemple pour effectuer une sauvegarde. Maintenant,
sudo
travailler avec le compte root est non seulement inutile, mais aussi dangereux: à première vue, ilrsyncuser
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 complet à la racine s’il l’avait déjà faitrsyncuser
. En gros, 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.la source
/root/.ssh/authorized_keys
, voire même créer plusieurs comptes root avec des foyers différents afin que chaque utilisateur puisse disposer de son propre shell, de son domicile et de.ssh/authorized_keys
:)sshd
ne généralement pas journal qui a autorisé la clé a été utilisé pour se connecter à un compte, donc si vous vous connectez commebob
alorssudo
, vous obtenez une meilleure piste de vérification que si vous vous connectez pourroot
directement avecbob
la clé.Utilisez l'
--rsync-path
option pour que larsync
commande à distance s'exécute avec dessudo
privilèges. Votre commande devrait alors être par exemple:Si
sudo
un mot de passe vous est demandé, vous devez éviter cela en utilisant unNOPASSWD
privilège avec le compte d'utilisateur distant (inutile pour le compte root, cela peut avoir un sens dans d'autres cas d'utilisation), ou si vous ne voulez pas le faire:Assurez-vous que l'option
tty_tickets
est désactivée pour l'utilisateur que vous utilisez, en exécutant par exemplesudo visudo -f /etc/sudoers.d/local-rsync
et en entrant: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.Créez le
sudo
mot de passe sur la machine distante, en exécutant par exemplessh -t [email protected] sudo
la source
sudo
mot de passe, pas lessh
mot de passesudo /usr/bin/rsync
sans demander de phrase secrète; vérifierman sudoers
comment faire cela; vous voudrez peut-être créer un utilisateur de sauvegarde supplémentaire pour cela.sudo /usr/bin/rsync
exécution sans nécessiter de mot de passe, ajoutez ce qui suit dans votre/etc/sudoers
fichier:rsyncuser ALL= NOPASSWD:/usr/bin/rsync
Cela permettra à l'utilisateur rsyncuser (comme mentionné ci-dessus, il serait préférable de créer un utilisateur de sauvegarde dédié) avec le nom d'utilisateur souhaité.rsync
essentiellement toujours des autorisations root. il est probablement très facile d'obtenir un shell racine complet dans ce compte. Je pense qu'il est préférable d'utiliser simplement le compte root réel.echo "password" | something
je n’ai jamais utilisé et je suis d’accord avec les problèmes de sécurité posés par l’absence soudaine d’exécution de rsync (également non suggérée ici) est mauvaise. Cetty_tickets
que je n'ai en réalité aucune idée, semble nécessaire et un problème de sécurité. Cela fonctionnerait de manière sécurisée sans rien modifier en exécutant simplement sodo sur ssh puis en exécutant la commande, non? Mais puisque j'ai posé cette question à des fins de script, je suis tout à fait d'accord pour dire que ssh à base de clé sans pw est la solution sûre et que le droit était juste. J'ai accepté la réponse de Martins à la place.Une méthode simple consiste à utiliser le
ssh-askpass
programme graphique avecsudo
, ce qui évite le fait qu’ilsudo
n’est pas connecté au terminal et vous permet de saisir le mot de passe en toute sécurité:Bien entendu, le
ssh-askpass
programme doit être installé à l'emplacement spécifié et vous devez exécuter une session X sur la machine sur laquelle vous travaillez. Il existe quelques variantes dussh-askpass
programme qui devraient également fonctionner (versions Gnome / KDE). Unsudo
programme de remplacement graphique commegksu
oukdesudo
devrait également fonctionner.la source
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .
ne fonctionne pas.rsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]
. Oh, Ubuntu expédie gnome-ssh-askpass, mais c’est/usr/bin/ssh-askpass
, au lieu de/usr/lib/ssh/x11...
. Alors ça a marché :)ssh-askpass
. Je devais juste chercher la signification de-chavzPe
, ce serait génial d’énoncer ces options comme des options longues.xeyes
avec SSH.Si votre utilisateur a déjà des privilèges sudo protégés par un mot de passe, je les conserverai tels quels et j'ajouterai uniquement une strophe permettant d'utiliser rsync sans mot de passe:
la source
J'ai rencontré ce problème aujourd'hui et je l'ai résolu sans qu'il soit nécessaire de modifier les fichiers de configuration ni d'accorder des autorisations de niveau racine aux comptes d'utilisateurs. Ma configuration particulière était que l'utilisateur
A
sur la machinefoo
devait copier tous les répertoires d'utilisateurs defoo
dans la machinebar
dans unbackup
répertoire que cet utilisateurA
possédait. (L'utilisateurA
a les privilèges sudo surfoo
.)La commande que j'ai utilisée est ci-dessous. Il a été appelé par l'utilisateur
A
dans le/home
répertoire surfoo
.Ceci exécute rsync en tant que sudo afin que tous les répertoires utilisateur
foo
puissent être accédés, mais indique à rsync d'utiliser ssh pour accéder à la machine à l'bar
aideA
des informations d'identification de l'utilisateur. Mes besoins étaient légèrement différents de ceux de la question ci-dessus, mais cela m’a permis d’obtenir rapidement une copie de sauvegarde de tous les répertoires de l’utilisateur sur une machine particulière que je gère sans modifier la configuration du système.la source
-i
optionssh
. Vous pouvez utiliser--rsync-path="sudo /usr/bin/rsync"
si vous avez sudo sur la machinebar
. Ceci litroot@foo
et écrit commeroot@bar
, mais transfère viaA@foo
->B@bar
. Merci!Exécuter rsync en tant que démon sur la machine cible vous permet de faire ce que vous voulez.
la source
Ma solution est d'utiliser
--rsync-path="sudo rsync"
mais il demande un mot de passe, solution de contournement:la source
$( cat my_password.txt )
ce qui est légèrement meilleur, mais il est généralement préférable de configurer les autorisations à l'une ou l'autre extrémité et / ou d'utiliser des clés SSH, de telle sorte que les mots de passe ne soient pas obligatoires sur la CLI