rsync mit „sudo rsync“ auf einer remote-Maschine

rsync ist ein bekanntes und beliebtes Programm unter Linux, ist es doch einfach und mächtig zugleich, wenn man seine Daten kopieren/synchronisieren möchte. Insbesondere für ein Backup absolut geeignet und meine erste Wahl. Will man ein lokal Backup seines Servers erstellen, geschieht dies meist so:

sudo rsync -a /source/ /destination/

Hier ist auch schon die Eigenart von Ubuntu zu sehen: Es gibt kein root, sondern sudo. Lokal kein Problem, schwierig wird es aber remote, wenn man das Backup auf einem remote-Host im Netzwerk ausführen möchte, denn folgendes funktioniert nicht:

sudo rsync -a /source/ [email protected]:/destination/

Das Problem liegt in der Benutzerverwaltung: Auf dem lokalen Host wird „sudo rsync“ ausgeführt, wodurch Daten vom Benutzer root mit kopiert werden können, wenn man z.B. ein Systembackup von dem Verzeichnis „/“ durchführt. Von einem lokalen Verzeichnis in ein lokales Verzeichnis kopieren würde nun auch funktionieren. Kopiert man aber auf einen remote-Host, müsste man dort nun auch root-Rechte besitzen. In älteren Distributionen von Ubuntu und auch vielen heutigen Distributionen von Debian würde man dies über den Benutzer root realisieren, sodass folgendes funktionieren würde, wenn der Benutzer root auf dem remote-Host existiert:

sudo rsync -a /source/ [email protected]:/destination/

Ist der Benutzer root aber auf dem remote-Host gesperrt, sodass man „sudo“ nutzt, ist ein anderes Vorgehen notwendig. Auf dem remote-Host wird folgender Befehl auf der Konsole ausgeführt:

sudo nano /etc/sudoers

Der Editor „nano“ öffnet also die Datei /etc/sudoers, sodass man folgende Zeile z.B. am Ende der Datei hinzufügt:

username ALL=NOPASSWD:/usr/bin/rsync

In meinem Fall lautet der Benutzer „becks“, also:

becks ALL=NOPASSWD:/usr/bin/rsync

Die Änderung speichern und zurück auf den lokalen Host und den Kopiervorgang durchführen:

sudo rsync -ae 'ssh' --rsync-path='sudo rsync' /source/ [email protected]:/destination/

-e: verbindet rsync per ssh, sodass wir mit --rsync-path remote nicht nur „rsync“ ausführen lassen, sondern das gewünschte „sudo rsync“

Für das lokale „sudo rsync“ und die generelle Verbindung zum Host wird jeweils ein Passwort abgefragt, die Daten danach anstandslos mit root-Rechten übertragen.

Wer nicht direkt kopieren, sondern erst testen möchte, gibt folgendes ein:

sudo rsync -avne 'ssh' --rsync-path='sudo rsync' /source/ [email protected]:/destination/

-v: verbose, also mehr anzeigen lassen, sodass man den Kopiervorgang verfolgen kann
-n: dry-run, also ein Trockenlauf, bei dem eine Datenübertragung simuliert wird, ohne dass wirklich etwas passiert

Das Kommando, das ich brauche, ist sogar bedeutend komplexer:

sudo rsync -avxhPe 'ssh' --stats --delete --rsync-path='sudo rsync' /source/ [email protected]:/destination/

-x: Dateisystemgrenzen nicht überschreiben, sodass z.B. eine externe Festplatte unter /mnt nicht mit kopiert wird
-h: Zahlen werden in einem menschlich lesbaren Format angezeigt
-P: Zeigt den Fortschritt einzelner Dateiübertrageungen an. Vor allem bei langsamen Verbindungen und/oder großen Dateien interessant
--stats: Mehr Statistiken, wenn der gesamte Kopiervorgang abgeschlossen wurde
--delete: Vor allem wichtig, wenn man sein Backup auf ein altes Backup kopiert, damit alte nicht mehr aktuelle Dateien auf dem remote-Host gelöscht werden

Bis hierhin, damit sollte die remote-Übertragung wohl erfolgreich erschlagen worden sein! 🙂

Gruß
Becks

Veröffentlicht unter Linux

Schreibe einen Kommentar