Ich habe diesen Befehl, um eine Remote-Maschine zu sichern. Das Problem ist, dass ich root-Rechte benötige, um alle Dateien lesen und kopieren zu können. Ich habe aus Sicherheitsgründen keinen Root-Benutzer aktiviert und benutze sudo
die Ubuntu-Methode. Benötige ich eine coole Rohrleitung oder etwas, um dies zu tun?
rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
root
Konto an erster Stelle.sudo
Insbesondere in Kombination mitNOPASSWD
den Empfehlungen in den Kommentaren wird die Sicherheit Ihres Computers nicht wirklich verbessert.Antworten:
Ich würde empfehlen, dass Sie nur das Root-Konto in erster Linie verwenden. Wenn Sie es so einrichten:
sshd_config
auf dem ZielcomputerPermitRootLogin without-password
.ssh-keygen
auf dem Computer, der die Sicherung abruft, um einen privaten SSH-Schlüssel zu erstellen (nur, wenn Sie noch keinen SSH-Schlüssel haben). Legen Sie keine Passphrase fest. Google ein Tutorial, wenn Sie Details dazu benötigen, sollte es genügend geben./root/.ssh/id_rsa.pub
Sicherungscomputers an den Inhalt/root/.ssh/authorized_keys
Ihres Zielcomputers an.dann sollte das resultierende Setup ziemlich sicher sein.
sudo
Insbesondere in Verbindung mitNOPASSWD
den Empfehlungen in den Kommentaren ergeben sich keine Sicherheitsvorteile gegenüber der Verwendung des Root-Kontos. Zum Beispiel dieser Vorschlag:Im Wesentlichen gibt
rsyncuser
root-Berechtigungen trotzdem. Du fragst:Na ja, einfach. Mit der empfohlenen Konfiguration
rsyncuser
kann jetztrsync
als root ausgeführt werden, ohne dass Sie nach einem Passwort gefragt werden.rsync
ist ein sehr leistungsfähiges Tool zum Bearbeiten von Dateien. Daher gibt es jetztrsyncuser
ein sehr leistungsfähiges Tool zum Bearbeiten von Dateien mit Root-Berechtigungen. Es dauerte nur ein paar Minuten, um einen Weg zu finden, dies auszunutzen (getestet auf Ubuntu 13.04, erfordertdash
,bash
hat nicht funktioniert):Wie Sie sehen, habe ich mir eine Root-Shell erstellt.
whoami
Identifiziert mein Konto als root, kann ich Dateien erstellen/etc
und lesen/etc/shadow
. Mein Exploit bestand darin, das setuid- Bit in derdash
Binärdatei zu setzen. Es bewirkt, dass Linux diese Binärdatei immer mit den Berechtigungen des Besitzers ausführt, in diesem Fall root.Nein, unbeholfenes Umgehen des Root-Kontos in Situationen, in denen es absolut angemessen ist, es zu verwenden, hat keinen guten Grund. Dies ist nur eine andere Form der Frachtkult-Programmierung - Sie verstehen das Konzept von sudo vs root nicht wirklich, Sie wenden einfach blind den Glauben an "root ist schlecht, sudo ist gut" an, weil Sie das irgendwo gelesen haben.
Einerseits gibt es Situationen, in denen
sudo
definitiv das richtige Werkzeug für den Job ist. Wenn Sie beispielsweise interaktiv an einem grafischen Linux-Desktop arbeiten, sagen wir, Ubuntu, dann ist die Verwendungsudo
in den seltenen Fällen, in denen Sie manchmal Root-Zugriff benötigen , in Ordnung. Ubuntu hat absichtlich ein deaktiviertes Root-Konto und zwingt Sie, sichsudo
standardmäßig anzumelden, um zu verhindern, dass Benutzer immer das Root-Konto verwenden, um sich anzumelden. Wenn der Benutzer nur z. B. den Webbrowser verwenden möchte, wäre es gefährlich, sich als Root anzumelden Wenn Sie also standardmäßig kein Root-Konto haben, wird dies von dummen Leuten verhindert.Auf der anderen Seite gibt es Situationen wie Ihre, in denen ein automatisiertes Skript Root-Berechtigungen für etwas erfordert, zum Beispiel um ein Backup zu erstellen. Das Umgehen
sudo
des Root-Kontos ist nicht nur sinnlos, sondern auch gefährlich: Auf den ersten Blickrsyncuser
sieht es aus wie ein gewöhnliches nicht privilegiertes Konto. Aber wie ich bereits erklärt habe, wäre es für einen Angreifer sehr einfach, vollständigen Root-Zugriff zu erhalten, wenn er bereitsrsyncuser
Zugriff erhalten hätte. Im Grunde haben Sie jetzt ein zusätzliches Root-Konto, das überhaupt nicht wie ein Root-Konto aussieht, was keine gute Sache ist.quelle
/root/.ssh/authorized_keys
, oder sogar mehrere Root-Konten mit verschiedenen Häusern erstellen, so dass jeder Benutzer seine eigene Shell haben kann, zu Hause und.ssh/authorized_keys
:)sshd
Allgemeinen wird nicht protokolliert, welcher autorisierte Schlüssel zum Herstellen einer Verbindung mit einem Konto verwendet wurde. Wenn Sie also eine Verbindung wiebob
damals herstellensudo
, erhalten Sie einen besseren Prüfpfad, als wenn Sie eineroot
direkte Verbindung mitbob
dem Schlüssel von herstellen.Verwenden Sie die
--rsync-path
Option, um den Remote-rsync
Befehl mitsudo
Berechtigungen auszuführen . Ihr Befehl sollte dann zB sein:Wenn
sudo
Sie zur Eingabe eines Kennworts aufgefordert werden, müssen Sie dies vermeiden, indem Sie entweder einNOPASSWD
Privileg für das Remote-Benutzerkonto verwenden (sinnlos für root, kann in anderen Anwendungsfällen sinnvoll sein) oder wenn Sie dies nicht möchten:Stellen Sie sicher, dass die Option
tty_tickets
für den von Ihnen verwendeten Benutzer deaktiviert ist, indem Sie z. B.sudo visudo -f /etc/sudoers.d/local-rsync
ausführen und Folgendes eingeben:Stellen Sie sicher, dass die Option
requiretty
für den von Ihnen verwendeten Benutzer deaktiviert ist - sie ist möglicherweise standardmäßig deaktiviert. Die Methode ist die gleiche wie oben.Legen Sie das
sudo
Passwort auf dem Remote-Computer fest, indem Sie zssh -t [email protected] sudo
quelle
sudo
Passwort, nicht dasssh
Passwortsudo /usr/bin/rsync
ohne nach einer Passphrase zu fragen; Überprüfen Sie,man sudoers
wie dies zu tun ist. Möglicherweise möchten Sie hierfür einen zusätzlichen Sicherungsbenutzer erstellen.sudo /usr/bin/rsync
Ausführung zuzulassen , ohne dass ein Kennwort erforderlich ist, fügen Sie Folgendes zu Ihrer/etc/sudoers
Datei hinzu:rsyncuser ALL= NOPASSWD:/usr/bin/rsync
Damit kann der Benutzer rsyncuser (wie oben erwähnt, empfiehlt es sich, einen dedizierten Sicherungsbenutzer zu erstellen) mit dem gewünschten Benutzernamen.rsync
Wesentlichen immer über Root-Berechtigungen. Es ist wahrscheinlich sehr einfach, in diesem Konto eine vollständige Root-Shell zu erstellen. Ich denke, es ist besser, nur den echten Root-Account zu verwenden.echo "password" | something
ich spreche, habe ich tatsächlich nie benutzt und bin mit den Sicherheitsproblemen einverstanden, die damit verbunden sind, dass rsync (auch hier nicht empfohlen) plötzlich ausgeführt wird. Was dastty_tickets
heißt, ich habe eigentlich keine Ahnung, scheint gebraucht und ein Sicherheitsproblem zu sein. Dies würde sicher funktionieren, ohne irgendetwas zu verändern, indem nur sodo auf ssh ausgeführt und dann der Befehl ausgeführt wird, oder? Aber da ich diese Frage zum Scripen gestellt habe, stimme ich voll und ganz zu, dass keybasiertes ssh ohne pw das sichere und richtige ist. Stattdessen nahm ich Martins Antwort an.Eine einfache Möglichkeit, dies zu tun, besteht darin, das grafische
ssh-askpass
Programm mit zu verwendensudo
. Dies umgeht die Tatsache, dasssudo
keine Verbindung zum Terminal besteht und Sie das Passwort sicher eingeben können:Natürlich
ssh-askpass
muss das Programm am angegebenen Speicherort installiert sein und Sie müssen eine X-Sitzung auf dem Computer ausführen, an dem Sie arbeiten. Es gibt einige Variationen desssh-askpass
Programms, die auch funktionieren sollten (Gnome / KDE-Versionen). Auch ein grafischessudo
Ersatzprogramm gefälltgksu
oderkdesudo
sollte auch funktionieren.quelle
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .
funktioniert nichtrsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]
. Oh, Ubuntu versendet Gnome-ssh-askpass, aber es ist/usr/bin/ssh-askpass
, anstatt/usr/lib/ssh/x11...
. Also das hat funktioniert :)ssh-askpass
. Ich musste nur die Bedeutung von nachschlagen-chavzPe
, wäre großartig, um diese als lange Optionen zu formulieren.xeyes
mit SSH überprüft habe .Wenn Ihr Benutzer bereits sudo-Berechtigungen hat, die mit einem Kennwort geschützt sind, würde ich sie unverändert lassen und nur eine Zeilengruppe hinzufügen, um rsync ohne Kennwort zu verwenden:
quelle
Ich bin heute auf dieses Problem gestoßen und habe es gelöst, ohne Konfigurationsdateien zu ändern oder Benutzerkonten Berechtigungen auf Stammebene zu erteilen. Mein besonderes Set-up war , dass Benutzer
A
auf der Maschinefoo
alle Benutzerverzeichnisse von kopieren hattenfoo
zu Maschinebar
in einembackup
Verzeichnis der BenutzerA
gehören. (BenutzerA
hat Sudo-Berechtigungen auffoo
.)Der Befehl, den ich verwendet habe, ist unten. Es wurde vom Benutzer
A
im/home
Verzeichnis am aufgerufenfoo
.Dadurch wird rsync als sudo ausgeführt, sodass auf alle Benutzerverzeichnisse
foo
zugegriffen werden kann, aber rsync wird angewiesen, ssh zu verwenden, umbar
mitA
den Anmeldeinformationen des Benutzers auf den Computer zuzugreifen . Meine Anforderungen waren etwas anders als in der obigen Frage, aber dies ermöglichte es mir, schnell eine Sicherung aller Benutzerverzeichnisse auf einem bestimmten Computer zu erstellen, ohne die Systemkonfiguration zu beeinträchtigen.quelle
-i
Option zu vergessenssh
. Sie können verwenden,--rsync-path="sudo /usr/bin/rsync"
wenn Sie sudo auf dem Computer habenbar
. Dies macht dann Lesen alsroot@foo
und Schreiben alsroot@bar
, aber Übertragen überA@foo
->B@bar
. Vielen Dank!Wenn Sie rsync als Daemon auf dem Zielcomputer ausführen, können Sie tun, was Sie möchten.
quelle
Meine Lösung ist zu verwenden,
--rsync-path="sudo rsync"
aber es fragt nach einem Passwort, Workaround:quelle
$( cat my_password.txt )
die etwas besser ist, aber es wird normalerweise bevorzugt, die Berechtigungen auf beiden Seiten zu konfigurieren und / oder SSH-Schlüssel so zu verwenden, dass keine Kennwörter für die CLI erforderlich sind