rsync Berechtigung verweigert das Sichern eines Remote-Verzeichnisses auf meinem lokalen Computer

11

Ich erhalte den im Titel genannten Fehler.

Ich habe diese ähnliche Frage gefunden: Führen Sie rsync mit Root-Berechtigung auf einem Remotecomputer aus . Das beantwortet meine Frage nicht.

Ich bin der Administrator auf dem Remote-Server und möchte rsyncDateien auf meiner lokalen Box sichern. Hier ist mein rsync-Befehl:

$ rsync -avz [email protected]:/var/www/ /backups/Sites/MySite/

Es funktioniert meistens. Die Anmeldung erfolgt über ein Schlüsselpaar. Ich kann und kann kein Passwort verwenden (BEARBEITEN: um mich über SSH anzumelden). Nur wenige Dateien werden aufgrund von Berechtigungen nicht übertragen. Ich möchte diese Berechtigungen nicht ändern.

Hier ist der Fehler:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

Ich möchte die Berechtigungen für diese Datei nicht ändern. Es (und andere mögen es) sollte nicht lesbar sein (außer durch root).

Dies muss in einem Cron-Job ausgeführt werden, und ich bevorzuge eine einfache einzeilige Lösung, bei der nur der Befehl rsync verwendet wird. Die nächste Wahl wäre ein Shell-Skript, das ich vom Cron-Job aus aufrufen kann. In keinem Fall kann ich mich manuell beim Remote-Computer anmelden und root werden (da ich schlafen werde, wenn dies ausgeführt wird.

Wie kann ich rsync verwenden, um es auf meiner lokalen Box zu sichern?

MountainX
quelle
Können Sie uns bitte etwas wie ssh [email protected] "cat /var/www/webapp/securestuff/install.php"> localfile zeigen?
Florenz Kley
@ Florenz Kley: Ich verstehe Ihren Kommentar nicht
MountainX
zeig mir, dass du die Datei lesen kannst und ich zeige dir einen rsync-Befehl, der funktioniert :-). Option 2 von Grawity ist wahrscheinlich die beste Wahl.
Florenz Kley
@Florenz Kley: ssh [email protected] "echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php"> localfile
MountainX
Ich habe rsync: send_files failed to open "/cygdrive/...": Permission denied (13). Mein Quellcomputer war also Windows Cygwin. Etwas andere Situation, aber für die Nachwelt bestand meine Lösung darin, mit der rechten Maustaste auf cmd.exe zu klicken und Als Administrator auszuführen .
Bob Stein

Antworten:

8

Sie können eine Datei sichern , die Sie nicht lesen können, so dass die Berechtigungen werden entweder müssen geändert oder von root außer Kraft gesetzt .

Ihre Optionen im Detail:

  • Überschreiben Sie die Berechtigungen, indem Sie sie [email protected]direkt synchronisieren . (

  • ... oder indem Sie sudo auf dem Server so konfigurieren , dass die rsyncserverseitige Komponente ohne Kennwort ausgeführt werden kann.

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    und

    rsync --rsh="ssh [email protected] sudo" -avz /var/www/ /backups/...
    
  • Erstellen Sie ein dediziertes "Website-Backup" -Konto auf dem Server. Ändern Sie die Berechtigungen der Dateien, um sie für das Konto "Website-Backup" lesbar zu machen. Sie können ACLs verwenden und setfacldafür. Verwenden Sie dieses Konto nicht für andere Zwecke.

    rsync -avz [email protected]:/var/www/ /backups/sites/mysite/
    
  • Schreiben Sie ein Skript auf den Server, das / var / www / in einen verschlüsselten Tarball kopiert. Dies kann wiederum als root (über crontab) oder durch Konfigurieren von sudo erfolgen , sodass für dieses Skript kein Kennwort erforderlich ist. Beispielsweise:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r [email protected]
    

    Die Sicherung erfolgt durch jedes Mal Ziehen des gesamten Tarballs, was bei großen Websites möglicherweise ineffizient ist:

    ssh [email protected] "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    Die Passwortanforderung würde durch Bearbeiten von Sudoern entfernt :

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    
user1686
quelle
Vielen Dank. Gute Vorschläge. Beides wird wahrscheinlich für mich arbeiten. Ich denke auch darüber nach, die Lösung unter superuser.com/questions/270911/… zu verwenden, wenn ich die möglichen Nebenwirkungen herausfinden kann.
MountainX
Übrigens meinte ich eine der letzten beiden Möglichkeiten. Die Anmeldung als Root über SSH ist auf dem Server nicht zulässig.
MountainX
@MountainX: Ich habe "rsync via sudo" als separate Auswahl getrennt. Es könnte auch funktionieren.
user1686
Vielen Dank! "rsync via sudo" wäre meine bevorzugte Wahl. Ich werde Ihren Vorschlag versuchen. Es sieht so aus, als müsste ich dies mit visudo unter Ubuntu auf dem Server implementieren. Ich habe nicht viel mit Visudo zu tun gehabt, aber Sie haben mir genug gegeben, um mich zum Laufen zu bringen. Danke noch einmal.
MountainX
5

Auf dem Remote-Host können Sie den rsync-Daemon mit ausführen

UID-Wurzel

in der /etc/rsyncd.confDatei.

Dadurch kann der Dämon die CAP_DAC_OVERRIDEFunktion nutzen und das lokale Dateisystem lesen, ohne die Berechtigungen / den Besitz zu ändern.

Wenn Sie nur ein Backup erstellen müssen, empfiehlt es sich, rsync auf den schreibgeschützten Modus einzustellen:

schreibgeschützt = wahr

altmas5
quelle
0

Wenn die Dateien nur von lesbar sind root, müssen Sie rootZugriff haben, um die Datei durch Lesen aus dem Dateisystem zu sichern. rsyncliest die Dateien aus dem Dateisystem, nicht vom Rohgerät.

Mit Ausnahme von dump, ddund ähnlichen Sicherungen , die die Partition nicht kopieren , dass Dateien, Backups Programme , die Dateien aus dem Dateisystem lesen. Sicherungsdienstprogramme können keine Dateien lesen und sichern, für die die Berechtigungen der Benutzer-ID, mit der sie ausgeführt wurden, den Zugriff verhindern. Dies ist der Fall, auf den Sie stoßen.

In den meisten Fällen müssen Sie Ihrer Sicherungssoftware so vertrauen, dass sie alle Ihre Daten lesen kann. Dies bedeutet auch, dass Sie Ihrem Sicherungsmedium alle Ihre Daten anvertrauen müssen. In einigen Fällen möchten Sie möglicherweise einige Dateien von der Sicherung ausschließen und eine alternative Methode zum Sichern ihres Inhalts verwenden.

BEARBEITEN: Während Sie die Daten archivieren (alle Berechtigungen kopieren), benötigen Sie Root-Zugriff auf beiden Servern. Wenn Sie dies als Backup durchführen, sollten Sie sich eine Lösung wie BackupPC ansehen, die rsync zum Lesen der Dateien verwendet, die Dateien jedoch in einem eigenen Verzeichnisbaum speichert.

BillThor
quelle
Es gibt Möglichkeiten, rsync root-Zugriff zu gewähren. Ich kenne sie einfach nicht. Ich frage nach, wie man rsync root Zugriff zum Sichern dieser Dateien gewährt. Vielleicht muss ich die Antwort auf "Führen Sie rsync mit Root-Berechtigung auf einem Remote-Computer aus" erneut
MountainX