rsync: Berechtigungen im Ziel vererben?

mensa

Benutzer
Mitglied seit
06. Mrz 2015
Beiträge
279
Punkte für Reaktionen
2
Punkte
18
Hallo,

ich kann erfolgreich per rsync Dateien und Ordner von A nach B synchronisierne lassen. Allerdings kommen die neue Dateien am Ziel (B) leider immer irgendwelchen eigenen Berechtigungen an.
Ich habe gelesen, dass man per Parameter User und Gruppe dem rsync Befehl mitgeben kann, aber das möchte ich gar nicht. Ich möchte, dass einfach die vererbbaren Berechtigungen vom übergeordneten Ordner für neue Dateien und Ordner (welcher per rsync daherkommen) übernommen werden.
Kann das rsync und welche Parameter wären das?

Aktuell sieht mein rsync Befehle so aus, aber da werden leider die Berechtigungen im Ziel nicht vererbt sondern neue angelegt:

Rich (BBCode):
rsync -zP --append --remove-source-files --bwlimit=2560 -e 'ssh -p 1234' /media/hdd/movie/*.ts user1@server.com:/volume1/share/Downloads/Aufnahmen/
 

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.117
Punkte für Reaktionen
256
Punkte
129
Siehe auch man Page zu rsync.
-A versucht, dass die Rechte gleich bleiben (sprich Ziel und Quelle haben gleiche Benutzer xy, die Files gehören vorher und nachher xy).

Du willst wahrscheinlich einfach mit -o und -g Benutzer und Gruppen angeben, ich denke das ist am einfachsten. Wenn du schon weißt, welchem Benutzer der Ordner darüber gehört, dann einfach beim rsync angeben.
rsync kann deine Anforderungen meiner Meinung nach nicht.

Die andere komplexere Möglichkeit ist, dass du mit Linux File ACLs arbeitest. Stichwort setfacl und getfacl. Damit könntest du dem Ordner darüber bestimmte Rechte geben, welche dann auch auf die Unterordner vererbt werden. Das ist aber eine Parallelstruktur zu User/Group/Others ;)
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
Das geht am besten mit dem Optionsschalter -a welcher eine Kombination aus Optionsschaltern enthält und dem Benutzer root. Siehe hierzu z.B. diese Seite https://wiki.ubuntuusers.de/rsync/#Optionen

Sobald man RSync mit einem eingeschränkten Benutzerkonto jenseits von Root verwendet werden Ordner- und Dateirechte dem jeweiligen Benutzer zugesprochen, der Rsync ausführt.

Tommes
 

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.117
Punkte für Reaktionen
256
Punkte
129
Ja das wäre sicher das einfachste und ich würde es auch so machen.

Die Anforderung von mensa beinhaltet halt "alles vererbt vom Überordner" ... so funktioniert wohl rsync nicht.
 

mensa

Benutzer
Mitglied seit
06. Mrz 2015
Beiträge
279
Punkte für Reaktionen
2
Punkte
18
@Tommes, danke für den Tipp, aber hast du das mit -a wirklich schon mal probiert? Damit zerschießt es mir im Ziel nämlich sofort die Berechtigungen und beim nächsten Aufruf klappt es dann auf Grund fehlender Berechtigungen gar nicht mehr.

Mit folgenden Parametern klappt es jetzt aber so wie gewünscht, also dass im Ziel die Berechtigungen für neue Dateien und Ordner vom übergeordneten Ordner vererbt werden:

Rich (BBCode):
rsync -azP --chmod=ugo=rwX


Sobald man RSync mit einem eingeschränkten Benutzerkonto jenseits von Root verwendet werden Ordner- und Dateirechte dem jeweiligen Benutzer zugesprochen, der Rsync ausführt.
Wie genau meinst du das? Am Quell-System starte ich rsync als root. Am Ziel System (Synology NAS) komme ich per SSH rein und kann somit gar nicht root sein (ich mach es über ein SSH Key File, damit keine Passwort-Eingabe notwendig ist und der verwendete User ist auch Mitglied der Gruppe administrators. Mehr kann ich aber nicht machen in Richtung root, oder?
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
... danke für den Tipp, aber hast du das mit -a wirklich schon mal probiert?

Ähm... ja, habe ich. Ich hab hier mal mit an so einem Backup Programm auf rsync Basis gearbeitet und habe dadurch schon einige Erfahrungen sammeln können. Und glaub mir, wir haben schon unzählige Tests mit root, admin und eingeschränkten Benutzern gefahren und auch Syno eigene rsync Routinen durchprobiert. Am Ende kommt es aber immer auf‘s selbe raus... am besten ist es, mit root zu arbeiten.

Du kannst root auch einen RSA-Key spendieren, genauso wie du das auch für jeden anderen Benutzer mit Administratorrechten einrichten kannst. Das ist ja das Schöne an SSH mit RSA-Key... man kann sich gleich per root@IP auf den Remote Server einklinken.

Tommes
 

mensa

Benutzer
Mitglied seit
06. Mrz 2015
Beiträge
279
Punkte für Reaktionen
2
Punkte
18
Cool, danke für den Tipp! Dass man mit einem Key File direkt als root auf die Synology NAS kommt wusste ich nicht, das klappt aber jetzt wunderbar! Danke :)

Was mich aber sehr wundert ist folgendes:
Diese beiden Befehle funktionieren und man kommt per SSH rein:

Rich (BBCode):
ssh -p 1234 user1@server.com
Rich (BBCode):
ssh -p 1234 root@server.com

Der rsync Befehl funktioniert aber nur mit User1 - NICHT mit root:

Funktioniert:
Rich (BBCode):
rsync -azP --chmod=ugo=rwX --append --delete --bwlimit=2560 -e 'ssh -p 9022' /media/hdd/automatic_fullbackup/ user1@server.com:/volume1/share/Backups/DVB-Server/

Funktioniert nicht - weißt du warum?
Rich (BBCode):
rsync -azP --chmod=ugo=rwX --append --delete --bwlimit=2560 -e 'ssh -p 9022' /media/hdd/automatic_fullbackup/ root@server.com:/volume1/share/Backups/DVB-Server/
sending incremental file list
ERROR: user has disabled/expired
rsync error: wrong password (code 44) at main.c(1090) [Receiver=3.0.9]
rsync: connection unexpectedly closed (112 bytes received so far) [sender]
rsync error: unexplained error (code 44) at ../rsync-3.1.3/io.c(226) [sender=3.1.3]
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
Der rsync error code 44...
Code:
rsync error: wrong password (code 44) at main.c(1090) [Receiver=3.0.9]

... deutet bei Verwendung einer Synology Diskstation evtl. darauf hin, das das Standard-Benutzer-Konto "admin" deaktiviert ist. Ob das in deinem Fall so ist und ob sich damit das Problem lösen lässt, kann ich nicht genau sagen, da du ja von einem rsync-kompatiblen Server aus, auf eine Remote Diskstation sicherst. Wir hatten diesen Fehler in der Vergangenheit aber schon öfter in Verbindung mit einem deaktivierten "admin" Konto.

Dann habe ich deinen rsync mal etwas verändert und lokal (angepasst) auf meinen beiden Diskstation's getestet. Bei mir läuft der Befehl ohne Probleme durch.

Code:
rsync -e 'ssh -p 9022' -azP --append --delete --bwlimit=2560 /media/hdd/automatic_fullbackup/ root@server.com:/volume1/share/Backups/DVB-Server/

Die Option...
Code:
--chmod=ugo=rwX
...würde ich bei Verwendung von root weglassen, da das sinnfrei ist. Auch sollen ja alle Daten im Ziel entsprechend der (Besitz-)Rechte der Quelle, ankommen. Die Option -P habe ich bisher noch nie verwendet... vielleicht auch mal ohne testen.

Noch ein Tipp. Wir haben die --delete Option immer mit einer Sicherung der gelöschten Daten verknüpft, so das gelöschte Daten der Quelle im Ziel nicht gelöscht, sondern in einen speziellen Recycling-Ordner landen. Wir haben das dann ungefähr so gemacht...
Code:
--delete --backup --backup-dir=@Recycle/"$DATE"
...wobei du die Pfade natürlich noch anpassen müsstest.

Schau mal, ob dich das weiter bringt.

Ach ja, noch eine Frage. Was genau ist dein rsync-kompatibler Server? Ein RasPi? Ein Linux (Ubuntu, Mint, etc)? Und du bist auf diesem Server auch sicher als root angemeldet, wenn den den rsync abfeuerst?

Tommes
 
Zuletzt bearbeitet:

mensa

Benutzer
Mitglied seit
06. Mrz 2015
Beiträge
279
Punkte für Reaktionen
2
Punkte
18
Danke für deine ausführliche Antwort, aber ich möchte jetzt erstmal nur hierauf eingehen:
Auch sollen ja alle Daten im Ziel entsprechend der (Besitz-)Rechte der Quelle, ankommen.
Eben nicht! Ich habe das doch schon mehrfach hier erwähnt, dass ich im Ziel System die Berechtigungen für die ankommenden Dateien vom übergeordneten Ordner des Ziel-Systems vererben lassen möchte.
Reden wir hier vom gleichen? Oder bist du von was anderem ausgegangen?
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
Oh...äh... mein Fehler. Dieses Detail ist mir irgendwo auf dem Weg verloren gegangen. Das ändert natürlich alles...

Sorry für meine Unaufmerksamkeit!

Warum probierst du es nicht einfach umgekehrt und schiebst nicht die Daten von dem rsync-Server Richtung DS (to-ssh) sondern holst von der DS aus, die Daten vom rsync-Server ab (from-ssh). Dann könntest du sehr wahrscheinlich die Ordner- und Dateirechte auf der DS, unter Verwendung des gewünschten Benutzers (user1), ersetzen. Das würde rsync wohl automatisch machen, ohne den Optionsschalter chmod.

Tommes
 

mensa

Benutzer
Mitglied seit
06. Mrz 2015
Beiträge
279
Punkte für Reaktionen
2
Punkte
18
Auch ein guter Tipp mit dem umgekehrt probieren, danke.

Aber dagegen spricht eigentlich mein Einsatzzweck:
Der Quell-Server ist ein Linux Sat-Receiver mit openATV Image (Vu+ Uno 4K). Auf diesem wird per cronjob jede Minute überprüft ob es neue Aufnahmen (*.ts) Files im Aufnahmeverzeichnis gibt und falls das der Fall ist wird das per rsync über das Internet an einen anderen Standort auf meine NAS vor Ort übertragen. Der Sat-Receiver steht nicht bei mir, da hier keine Sat-Schüssel möglich ist und ich greife nur den Stream über das Internet per Apple TV in meinem Wohnzimmer ab.
Dank rsync krieg ich Aufnahmen auch automatisch rübergeschoben und das on-the-fly während der Aufnahme und das File wächst während der Aufnahme einfach mit und ich kann hier quasi auch eine Art von Timeshift nutzen.

Der Grund warum ich nicht von der NAS aus die Daten vom Sat-Receiver abholen möchte ist, dass in diesem Fall jede Minute extra eine Verbindung aufgebaut werden müsste um nachzusehen ob es überhaupt Aufnahme zum Übertragen gibt (was vielleicht nur alle paar Tage mal der Fall ist). Am Sat-Receiver selbst habe ich das per Script gelöst, dass rsync nur aufgerufen wird, wenn *.ts Files gefunden wurden. Deshalb würde ich es eigentlich auch gerne so lassen.

Naja mit
Rich (BBCode):
rsync -azP --chmod=ugo=rwX --append --remove-source-files ...
funktioniert es ja eigentlich eh wie gewollt, aber halt nur als user1 und nicht als root. Was ja grundsätzlich egal ist, wenn die Files nun eh mit den vererbten Berechtigungen des Ziel Ordners ankommen.

Der admin Account wird ja nicht ohne Grund deaktiviert sein, oder? Hab da jetzt eher Bedenken, wenn ich den nur deswegen aufmachen würde.

EDIT: Hätte zum Testen den admin Account jetzt mal aktiviert, aber rsync mit root hat leider trotzdem nicht funktioniert. Komisch woran das liegt.

Ich habe rsync nur mit "Enable rsync service" aktiviert und den rsync Account nicht aktiviert und auch kein rsync Accounts hinzugefügt - stimmt das so lt. Screenshot? Irgendwie versteh ich eh nicht ganz, wozu das mit den extra Usern wäre:

ZxKwis0.png



EDIT EDIT: Was mir jetzt noch eingefallen ist: Wenn rsync am Quell-Server per Cronjob aufgerufen wird, läuft es dann überhaupt als root?
 
Zuletzt bearbeitet:

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
Vielen Dank für deine ausführliche Erläuterung deines Vorhabens. Klingt echt interessant.

Ich müsste nochmal ein wenig darüber nachdenken, aber aktuell fällt mir grad nichts produktives ein. Außer das du vielleicht dein Vorhaben in zwei Schritte unterteilst. Im ersten Schritt läuft halt der rsync auf deine DS und im zweiten Schritt änderst du lokal mittels eines kleinen Scripts die Rechte der Ordner und Dateien. Ist zwar noch nicht ganz das, was du willst, aber erstmal eine Notlösung.

Wenn ich Zeit finde, werde ich mir den rsync aber nochmal vornehmen und ein paar Dinge ausprobieren. Vielleicht finde ich ja nochwas raus.

Das admin Konto wurde aus dem Grund deaktiviert, damit man es bei einem möglichen Angriff schwerer hat, den Benutzernamen rauszufinden. Da der admin aber noch immer seine Daseinsberechtigung innerhalb der Welt von Synology hat und manche Dinge nur mit aktivierten admin funktionieren, habe ich diesen Benutzer stets aktiv. Starke Passwörter und/oder 2-Faktor Authentifizierung oder noch besser VPN wären meines Erschtens die bessere Wahl. Aber das ist meine persönliche Meinung, die hier nicht jeder mit mir teilt.

Tommes
 

mensa

Benutzer
Mitglied seit
06. Mrz 2015
Beiträge
279
Punkte für Reaktionen
2
Punkte
18
Deine für deine Mühen :)

Mir ist jetzt noch aufgefallen, dass eben dieses Kommando (rsync -azP --chmod=ugo=rwX) genau das macht, was ich will, aber nur wenn die Rechte am Quell-Server auf 700 stehen. Wenn die Rechte z.B. 644, dann werden am Ziel Server die Berechtigungen vom übergeordneten Ordner wieder NICHT vererbt, sondern eigene angelegt (vermutlich wegen den 44 Rechten für group und others). Ich werde daher im Script einfach die Berechtigungen vor dem rsync auf 700 setzen lassen und es funktioniert. Aber ganz schön ist es so halt nicht.

Es muss doch eine Option geben, die das gewünschte bewirkt, oder? Also dass die Rechte am Quell-Server komplett ignoriert werden und am Ziel-Server einfach nur vom übergeordneten Ordner vererbt wird, oder?
 

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.117
Punkte für Reaktionen
256
Punkte
129
Nein, die gibt es bei rsync nicht, so funktioniert es leider nicht.
rsync versucht, die gleichen Rechte zu setzen bei Quelle und Ziel.

Wie gesagt, wenn du das anders willst kannst du nur mit Spezialacls arbeiten (setfacl).
 

DS111-User

Benutzer
Mitglied seit
13. Feb 2011
Beiträge
285
Punkte für Reaktionen
14
Punkte
18
Darf ich mich hier noch mit einer Frage anhängen:
Was genau bedeuten die Optionen
Code:
--chmod=ugo=rwX
(Was es macht ist nachvollziehbar, ich verstehe nur die einzelnen Werte nicht)
 

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.673
Punkte für Reaktionen
1.574
Punkte
314
ugo = user group other
rwx = read write execute

Siehe auch *hier* und *hier*
 
  • Like
Reaktionen: DS111-User


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat