Wie behalte ich Eigentumsrechte und Berechtigungen in Dropbox?

9

Ich habe zwei Computer, einen Mac und einen PC mit Linux, auf denen ich eine bestimmte Datei zwischen der Verwendung von Dropbox synchronisieren möchte.

Eine der Dateien, die ich synchronisiere, muss von einem anderen Benutzer (andere UID auf demselben Computer, die nicht auf einen anderen Dropbox-Benutzer verweist) außer mir selbst geschrieben werden können. Genauer gesagt ist diese andere UID tatsächlich ein Daemon. Entweder muss sich die Datei im Besitz dieses anderen Benutzers befinden, oder für "group" und / oder "other" ist eine Schreibberechtigung erforderlich. Anfangs habe ich es auf beiden Maschinen so eingerichtet. Darüber hinaus ist das Verzeichnis, in dem sich die Datei befindet, bereits im Besitz des Benutzers (chmod 777), der Schreibzugriff auf die Datei haben muss.

Wenn die Datei jedoch von einer Box zu einer anderen synchronisiert wird, scheint es, dass Dropbox beide Berechtigungssätze vollständig ignoriert und die Berechtigungen für die neu aktualisierte Datei so ändert, dass sie mir mit den Berechtigungen 0644 gehören (rw für mich, r für alle anderen) ). Wenn sich die Datei nicht in meinem Besitz befindet, wechselt sie sogar wieder in meinen Besitz! Infolgedessen hat der andere Benutzer keine Schreibrechte mehr, bis ich manuell hineingehe und die Datei erneut ändere.

Weitere Dinge, die ich ausprobiert habe und die nicht funktioniert haben:

  1. Stellen Sie sicher, dass das Benutzerkonto (für den "anderen Benutzer") auf beiden Computern dieselbe UID hat. Ich bin mir nicht sicher, warum dies notwendig sein sollte, da mein primärer Account auf beiden Computern nicht dieselbe UID hat.

  2. chmod u+s <dir>und chmod g+s <dir>wo ist das Verzeichnis, das die betreffende Datei enthält.

  3. Ändern des Eigentums an der Datei auf den anderen Benutzer und Platzieren außerhalb des Dropbox-Verzeichnisses sowie Erstellen eines Symlinks zu der Datei im Dropbox-Verzeichnis. Dropbox löscht den Symlink tatsächlich, lässt die Originaldatei (außerhalb des Dropbox-Verzeichnisses) unverändert und erstellt eine neue Kopie der Datei an der Stelle, an der sich der Symlink befand!

Wie kann ich die Einstellungen so vornehmen, dass meine Berechtigungen und / oder mein Eigentum erhalten bleiben?

Michael
quelle

Antworten:

5

Ok, hier ist die Lösung, die ich gefunden habe. Ob dies mit zukünftigen Versionen von Dropbox funktioniert, ist ungewiss. Ich habe eine Serviceanfrage mit Dropbox geöffnet, um das Problem weiter zu lösen.

Insgesamt ist die Lösung eine Kombination aus zwei Dingen:

  1. Festlegen der umask für den Dropbox-Prozess, sodass neu erstellte Dateien die Berechtigung 0660 haben. Dies ist Benutzer lesen / schreiben, Gruppe lesen / schreiben, andere keine.
  2. Festlegen der Gruppe für neu erstellte Dateien für die Gruppe, die Schreibzugriff auf die betreffenden Dateien haben muss.

Diese Lösung gilt für alle Dateien im Dropbox-Ordner, nicht nur für eine einzelne Datei. In meinem Fall ist das akzeptabel.

Unter Linux ändere ich das /etc/init.d/dropboxStartskript so, dass die Zeile, die dropbox als Daemon aufruft, lautet:

HOME="$HOMEDIR" start-stop-daemon --umask 0006 -b -o -c $dbuser:$dbgrp -S -u $dbuser -x $HOMEDIR/$DAEMON

Durch das Hinzufügen von wird die --umask 0006umask festgelegt, und durch den :$dbgrpTeil der Option -c wird die Gruppe auf die Gruppe festgelegt, zu der der Dämon gehört.

Auf der Mac-Seite führe ich die folgenden Befehle aus:

ps aux | grep -i dropbox

Daraus kann ich die Befehlszeilenoptionen sehen, die Dropbox gestartet haben, und daraus extrahiere ich die später verwendete $ mydropboxid. Dann beende ich Dropbox und öffne eine Eingabeaufforderung und gebe die folgenden Befehle ein:

umask 0006
/Applications/Dropbox.app/Contents/MacOS/Dropbox -psn_0_$mydropboxid &
exit

Ich plane, die oben genannten Befehle zu einem bestimmten Zeitpunkt zu automatisieren, damit ich sie nicht erneut ausführen muss, wenn mein Computer neu gestartet wird.

Hiermit wird die Maske für neu erstellte Dateien so festgelegt, dass die Gruppe für eine Datei Schreibzugriff hat. Um die Gruppe richtig einzustellen, muss ich jedoch das Dropbox-Cache-Verzeichnis setgid setzen - dies musste bisher nur einmal durchgeführt werden:

sudo chgrp -R $dbgrp ~/Dropbox/.dropbox.cache
sudo chmod -R g+s ~/Dropbox/.dropbox.cache

Es scheint, dass alle neuen Dateien zuerst im Verzeichnis ~ / Dropbox / .dropbox.cache erstellt werden. Mit den obigen Befehlen erhalten diese neuen Dateien den richtigen Besitz und die entsprechenden Berechtigungen, die von Dropbox erstellten neuen Dateien für die richtige Gruppe zugewiesen wurden.

Michael
quelle
Interessant. Können Sie uns etwas näher erläutern, was diese Zeile und die geänderte Datei im Allgemeinen bewirken?
Nixda
Der Start-Stop-Daemon ist ein Linux-Dienstprogramm, mit dem Sie verschiedene Einstellungen steuern können, unter denen ein Daemon ausgeführt wird. Die meisten Parameter werden in einer Shell-Variablen übergeben. Die wichtigsten Änderungen sind das Hinzufügen von "--umask 0006", das die R / W-Berechtigung für Benutzer und Gruppe verlässt, diese jedoch für andere entfernt, und das Hinzufügen des Gruppenparameters (": $ dbgrp") zum Parameter -c, der Legt die UID / GID fest, unter der der Dämonprozess ausgeführt wird. Der Mac-Befehl ist ähnlich, aber ich habe kein ähnliches Dienstprogramm gefunden. Daher müssen Sie diese Einstellungen in der Shell vornehmen, in der Dropbox ausgeführt wird.
Michael
Gilt das auch für die aktuelle Dropbox-Version? Mein dropboxd-Skript befindet PAR=$(dirname $(readlink -f $0)) OLD_LD_LIBRARY_PATH=$LD_LIBRARY_PATH LD_LIBRARY_PATH=$PAR${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH exec $PAR/dropbox $@sich in ./.dropbox-dist/ und wird über das mitgelieferte Python-Skript
bicycle
@bicycle Ich wurde seit der Entwicklung dieser Lösung nicht mehr aufgefordert, meinen Dropbox-Client zu aktualisieren.
Michael
@Michael, hat Dropbox jemals auf Ihre Serviceanfrage geantwortet?
bbozo
0

Legen Sie diese Datei in einem eigenen Ordner ab und geben Sie diesen Ordner für den anderen Benutzer frei. Auf diese Weise bearbeiten sie die neueste Version genauso wie Sie. Achten Sie darauf, nicht gleichzeitig daran zu arbeiten.

CodeMonkey
quelle
1
Aktualisieren meiner ursprünglichen Frage, um die Tatsache widerzuspiegeln, dass der Ordner, der die fragliche Datei enthält, bereits dem anderen Benutzer gehört. Es macht keinen Unterschied, Dropbox ignoriert immer noch die aktuellen Eigentumsrechte / Berechtigungen und setzt sie zurück, wenn die Datei mit dem Computer synchronisiert wird.
Michael
0

Wenn Sie eine Datei zwischen zwei Computern kopieren, entscheidet die Software, die das Kopieren durchführt, über die Berechtigungen für die Kopie. Für das, was Sie tun, benötigen Sie eine ziemlich detaillierte Berechtigungszuordnung. Dropbox-Berechtigungszuordnungsfunktionen beschränken sich darauf, Berechtigungen beizubehalten, wenn auf beiden Systemen dasselbe Betriebssystem ausgeführt wird . Für das Kopieren zwischen zwei verschiedenen Betriebssystemen werden keine bestimmten Ergebnisse garantiert.

Selbst wenn Sie herausfinden könnten, wie Sie Dropbox wie gewünscht einsetzen können, würde ich davon abraten, sich darauf zu verlassen. Undokumentierte Software-Macken können ohne Vorankündigung verschwinden. Sie müssen sich die Dateiübertragungstools ansehen, die für Ihren Anwendungsfall entwickelt wurden. Meine erste Wahl wäre rsync , das in Linux-Distributionen Standard ist und unter Windows einfach zu installieren ist, insbesondere wenn Sie Cygwin haben . Und Cygwin ist im Allgemeinen nützlich für Leute, die sowohl mit Windows als auch mit Linux arbeiten müssen!

Natürlich erfordert rsync eine direkte Verbindung - es gibt keinen zentralen Server wie den von Dropbox. Wie Sie damit umgehen, hängt von den Details Ihrer Netzwerkeinrichtung ab.

Isaac Rabinovitch
quelle
Ja, ich stimme dem zu, was Sie über Macken sagen. Meiner Meinung nach ist dies oft ein guter Grund, die Aktualisierung von Software zu beenden - wenn es das tut, was Sie wollen, warum sollten Sie riskieren, dass neuere Versionen das kaputt machen!
Michael
rsync ist nicht bidirektional und wird nicht jedes Mal automatisch aktualisiert, wenn Änderungen an der Datei vorgenommen werden.
Michael
@Michael Sie haben nicht immer die Wahl, Software zu aktualisieren. wenn es Cloud-basierte (wie Dropbox) Sie nie haben die Wahl. Und es ist schwer zu verstehen, warum Bidirektionalität oder automatisches Kopieren für das, was Sie versuchen, unerlässlich sind.
Isaac Rabinovitch
Solange der Dienst mit dem vorherigen Client abwärtskompatibel bleibt, haben Sie die Wahl. Und wenn Dropbox nicht jeden dazu zwingen kann, sofort ein Upgrade durchzuführen, könnte das Protokoll nur geringfügig geändert werden, was alte Clients zum Erliegen bringen würde. Der einzige Weg, wie ich sehe, dass sie es schaffen können, ist eine Art Übergang.
Michael
Ich versuche, eine Reihe von Dateien auf zwei verschiedenen Rechnern zu verwalten und zu einem bestimmten Zeitpunkt eine der beiden zu ändern. Kurze Zeit später gehe ich zur anderen und greife zu wo ich aufgehört habe, ohne irgendetwas manuell zu tun, wie ein rsync zu starten. Dies liegt hauptsächlich daran, dass ich die Änderungen möglicherweise remote (z. B. über eine Webschnittstelle) vornehmen kann und dass es aufgrund von Problemen wie Firewalls und Latenz unpraktisch ist, eine einzige zentralisierte Kopie der Daten zu verwalten.
Michael