Skip to content

rsync für Benutzer mit root Rechten

Wenn man Verzeichnisse und Dateien von einem Linux Server auf einen anderen übertragen will, werden am Zielsystem Eigentümer und Gruppe der Dateien geändert und Zeitstempel neu gesetzt. Dadurch passen die Berechtigungen auf diese Dateien und Verzeichnisse eventuell nicht mehr. Außerdem verliert man die Information wann die Dateien zuletzt geändert wurden. In vielen Fällen will man diese Eigenschaften (Owner, Group, Permissions, Timestamps) aber unverändert behalten. Das Problem dabei ist, dass man am Zielsystem root-Rechte braucht, um sämtliche Dateieigenschaften bei den kopierten Dateien zu übernehmen. Ein direkter Login per SSH mit dem Benutzer root ist aber aus Sicherheitsgründen normalerweise nicht erlaubt (PermitRootLogin no in /etc/ssh/sshd_config) und das ist auch gut so.

Remoteserver

Damit wir den Benutzer root Rechte für rsync geben, setzen wir für sudo folgenden Eintrag.

root:~# echo -e "sysadmin ALL=NOPASSWD: /usr/bin/rsync" \
     >/etc/sudoers.d/rsync && chmod 440 /etc/sudoers.d/rsync

Nun erstellen wir uns noch ein Wrapper Skript, wo der Aufruf von rsync mit sudo erfolgt.

root:~# echo -e "#!/bin/sh\n/usr/bin/sudo /usr/bin/rsync \"$@\";" \
     >/usr/local/bin/rsync_wrapper.sh && chmod 755 /usr/local/bin/rsync_wrapper.sh

Localserver

Auf dem Lokalen Server setzen wir zum kopieren mit rsync nur die Option --rsync-path und geben das Wrapper Skript an.

tux@earth:~$ rsync -av --rsync-path="rsync_wrapper.sh" sysadmin@moon:/var/www/ .

Dokumentation