ACL / Synology Berechtigungen Genehmigungen gehen verloren beim Kopieren mittels rsync

dojo

Benutzer
Mitglied seit
14. Dez 2016
Beiträge
71
Punkte für Reaktionen
9
Punkte
8
Hallo,

ich habe in meinem Docker einen Ordner gemounted. Nun möchte ich einige Dateien von UnterOrdnerA nach UnterOrdnerB kopieren. Ich nutze dazu rsync, welches die Aufgabe ohne Probleme lößt. Allerdings gehen dabei die Benutzer-Berechtigungen verloren. Auch das anfügen des "-A" flags hilft dabei nicht.
Löße ich die selbe Aufgabe mit "cp" werde alle Berechtigungen sauber mit übernommen. Jedoche benötige ich die "-exclude Funktion" von rsync da ich einige Fallunterscheidungen habe, (bzw. optionale Unterordner) die es äußerst umfangreich gestalten ein Script dafür zu schreiben.

Mit dem "synoacltool" (synoacltool enfore-inherit) wäre es möglich im Nachhinein die Berechtigungen wieder herzustellen, allerdings funktioniert das nicht aus dem Docker-Container heraus.

Meine Ziel ist es mittels rsync Dateien zu kopieren/syncronisieren und die Genehmigungen bzw. Berechtigungen bleiben dabei erhalten.

Berechtigungen "verloren":

2020-07-20 16_45_06-Window.png

Vielen Dank für jegliche Hilfe im Voraus!
 

Syno-OS

Benutzer
Mitglied seit
23. Jun 2020
Beiträge
361
Punkte für Reaktionen
64
Punkte
28
Also du musst immer Berechtigungen + Benutzer betrachten.
Lokale User (DSM) -> Netzwerk User (AD)
Hast du auch eine AD aufgebaut und beide Systeme haben die identische Benutzerbasis? Die Benutzer werden so ansonsten nicht mitgenommen, dh. alle Berechtigungen stimmen nicht überein. Benutzer Name ist nicht interessant, sondern die interne Benutzer ID ist für das System ausschlaggebend. Die AD hat im Netzwerk gültige Benutzer IDs, die DSM IDs müssen am anderem System nicht existieren...
 

dojo

Benutzer
Mitglied seit
14. Dez 2016
Beiträge
71
Punkte für Reaktionen
9
Punkte
8
Bin mir nicht sicher ob wir aneinander vorbei reden. Ich habe nur ein System (918+) auf diesem läuft ua. mein Docker Container. Ein Verzeichnis "/volume1/Foo" ist in den Container gemounted. Mein Container kopiert nun Dateien von (aus sicht des Hosts) "volume1/Foo/1" nach "volume1/Foo/2". Während die Dateien noch in Ordner 1 ihre kompletten Berechtigungen haben, sind diese anschließend in Ordner 2 verschwunden. Die selbe Arbeit mit dem "cp" Befehl erzeugt dieses Phänomen nicht. Mir ist an dieser Stelle egal wer der "Besitzer" der Datei wird, da ich den Zugriff über eben die Berechtigungen/Genehmigungen regle.
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Wo läuft rsync? Im Docker oder auf der DS?
Welche Version?

Eventuell einfach zu alt (keine Unterstützung für xAttr)/ verbuggt, weil "-aAX" eigentlich funktionieren sollte.
Auf meiner 415+ ist rsync 3.0.9, protocol 30
Erfolgreiche ACL syncs habe ich mit 3.1.1, protocol 31 im Netz gesehen.
 

dojo

Benutzer
Mitglied seit
14. Dez 2016
Beiträge
71
Punkte für Reaktionen
9
Punkte
8
rsync läuft im Docker mit v3.1.2

Führe ich folgenden Befehl im Container aus:
rsync -aAX OrdnerA/foo.pdf OrdnerB/

So sind die Berechtiungen (von foo.pdf) im OrdnerB weg (siehe Bild oben; leer). Während in OrdnerA noch alles da ist..
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Eventuell die gepatchte Version auf der DS probieren, da gibt es einen --syno-acl switch?

Oder mal den Aufruf mit mehr Ausage (verbose) -v (eventuell auch mehrere vv, weiß nicht ob das rsync konnte, hab grad nur ssh im Kopf)
 

ottosykora

Benutzer
Mitglied seit
17. Apr 2013
Beiträge
8.292
Punkte für Reaktionen
909
Punkte
268
ja, ich habe auch diese Erfahrung gemacht. Mit dem rsync gehen die Rechte nur dann nicht verloren, wenn die User ID, alsi die Linux User ID, an beiden Enden die gleiche ist. Ist es nicht, dann geht es verloren.

Habe unseren Sync in Betireb dann auf Cloud Shear Sync umgestellt, dort passiert es nicht.
 
  • Like
Reaktionen: bfpears

dojo

Benutzer
Mitglied seit
14. Dez 2016
Beiträge
71
Punkte für Reaktionen
9
Punkte
8
Eventuell die gepatchte Version auf der DS probieren, da gibt es einen --syno-acl switch?

Oder mal den Aufruf mit mehr Ausage (verbose) -v (eventuell auch mehrere vv, weiß nicht ob das rsync konnte, hab grad nur ssh im Kopf)

Führe ich rsync (eingebunden vom Host) innerhalb des Containers aus, erhalte ich folgende Fehlermeldung:
Bash:
./rsync: error while loading shared libraries: libsynobandwidth.so.6: cannot open shared object file: No such file or directory

rsync -azPvvv

Bash:
sending incremental file list                                                                                                                                                                               
[sender] make_file(foo.pdf,*,0)                                                                                                                                                             
send_file_list done                                                                                                                                                                                         
send_files starting                                                                                                                                                                                         
server_recv(2) starting pid=663                                                                                                                                                                             
recv_file_name(foo.pdf)                                                                                                                                                                     
received 1 names                                                                                                                                                                                           
recv_file_list done                                                                                                                                                                                         
get_local_name count=1 /downloads/temp/                                                                                                                                                                     
generator starting pid=663                                                                                                                                                                                 
delta-transmission disabled for local transfer or --whole-file                                                                                                                                             
recv_generator(foo.pdf,1)                                                                                                                                                                   
send_files(1, foo.pdf)                                                                                                                                                                       
send_files mapped foo.pdf of size 50000000                                                                                                                                                   
calling match_sums foo.pdf                                                                                                                                                                   
foo.pdf                                                                                                                                                                                     
     48,955,392  97%   15.55MB/s    0:00:00                                                                                                                                                                 
sending file_sum                                                                                                                                                                                           
false_alarms=0 hash_hits=0 matches=0                                                                                                                                                                       
     50,000,000 100%   15.56MB/s    0:00:03 (xfr#1, to-chk=0/1)                                                                                                                                             
sender finished foo.pdf                                                                                                                                                                     
generate_files phase=1                                                                                                                                                                                     
recv_files(1) starting                                                                                                                                                                                     
recv_files(foo.pdf)                                                                                                                                                                         
got file_sum                                                                                                                                                                                               
set modtime of .foo.pdf.CypDU4 to (1595279209) Mon Jul 20 21:06:49 2020                                                                                                                     
renaming .foo.pdf.CypDU4 to foo.pdf                                                                                                                                           
send_files phase=1                                                                                                                                                                                         
recv_files phase=1                                                                                                                                                                                         
generate_files phase=2                                                                                                                                                                                     
send_files phase=2                                                                                                                                                                                         
send files finished                                                                                                                                                                                         
total: matches=0  hash_hits=0  false_alarms=0 data=50000000                                                                                                                                                 
recv_files phase=2                                                                                                                                                                                         
recv_files finished                                                                                                                                                                                         
generate_files phase=3                                                                                                                                                                                     
generate_files finished                                                                                                                                                                                     
                                                                                                                                                                                                            
sent 50,024,837 bytes  received 667 bytes  14,293,001.14 bytes/sec                                                                                                                                         
total size is 50,000,000  speedup is 1.00                                                                                                                                                                   
[sender] _exit_cleanup(code=0, file=main.c, line=1196): about to call exit(0)

ja, ich habe auch diese Erfahrung gemacht. Mit dem rsync gehen die Rechte nur dann nicht verloren, wenn die User ID, alsi die Linux User ID, an beiden Enden die gleiche ist. Ist es nicht, dann geht es verloren.

Habe unseren Sync in Betireb dann auf Cloud Shear Sync umgestellt, dort passiert es nicht.

Also die Datei wird mittels root im Container erstellt und der rsync Aufruf wird ebenfalls als root durchgeführt. Wie bereits erwähnt, wenn ich die Dateien per "cp" kopiere, dann ist alles i.O. Das verwirrt mich ein bisschen..

Gibt es vll eine Möglichkeit die acl Berechtigungen aus einem DockerContainer heraus anzupassen? Das synoacltool habe ich bis jetzt noch nicht innerhalb des Containers zum laufen gebraucht.
 

dojo

Benutzer
Mitglied seit
14. Dez 2016
Beiträge
71
Punkte für Reaktionen
9
Punkte
8
Habe nun eine für mich zufriedenstellende Lösung gefunden. Der Container verbindet sich per ssh zum host und führt dort per synoacltool eine Bereinigung der Berechtigungen durch.

@Mods Würde diese gerne der Übersicht halber im ersten Post detailiert ergänzen. Leider ist es nicht möglich Beiträge nachträglich zu ändern.
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.385
Punkte für Reaktionen
1.199
Punkte
234

dojo

Benutzer
Mitglied seit
14. Dez 2016
Beiträge
71
Punkte für Reaktionen
9
Punkte
8
Zur Erläuterung:
Ich habe mir ein kleines Bash-Script geschrieben, dass sich nachträglich per ssh an der Synology anmeldet und dort das synoacltool aufruft.

Vorbereitung:
1. Einen neuen Benutzer anlegen (synoacl)
2. KeyFile Authentifizierung anlegen
3. Benutzer in die Sudoers (~/fixacl Script) aufnehmen

fixacl - Script (abgelegt im Homeverzeichnis des synoacl Benutzers)
Bash:
#!/bin/bash

find "${1}" -execdir sudo /usr/syno/bin/synoacltool -enforce-inherit {} \;


Script das innerhalb des Containers aufgerufen wird (nur ein Auszug)
Bash:
#!/bin/bash

echo "fix synology acl permissions in '/volume1/foo/${1}'"
ssh -o StrictHostKeyChecking=no -i /config/id_rsa synoacl@172.20.0.1 -p 123 -t "./fixacl /volume1/foo/${1}"

/config/id_rsa
Ist der SSH-Schlüssel den man in den Container mounten muss

172.20.0.1
IP der Synology die Sie innerhalb des Containers zugewiesen bekommen hat

p
SSH Port der Synology (Da ich meinen geändert habe, muss dieser hier noch angepasst werden)
 
  • Like
Reaktionen: proxymus und geimist

proxymus

Benutzer
Mitglied seit
02. Mai 2013
Beiträge
3
Punkte für Reaktionen
0
Punkte
1
Danke für die Doku dazu. Sie hat mir bei einem ähnlichen Problem geholfen. (y)
Ich denke aber im fixacl - Script fehlt ein "-exec". So habe ich es bei mir umgesetzt.

Bash:
find *.zip -exec /usr/syno/bin/synoacltool -enforce-inherit {} \;
 


 

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