¿Cómo preservar la propiedad y los permisos en Dropbox?

9

Tengo dos máquinas, una Mac y una PC con Linux, que estoy tratando de mantener un cierto archivo sincronizado entre usar Dropbox.

Otro de los archivos que estoy sincronizando debe ser editable por otro usuario (UID diferente en la misma máquina, sin referirse a otro usuario de Dropbox) además de mí. Para ser más específicos, este otro UID es en realidad un demonio. Entonces, o bien el archivo debe ser propiedad de ese otro usuario, o bien se necesita permiso de escritura para "grupo" y / u "otro". Inicialmente lo configuré de esta manera en ambas máquinas. Además, el directorio que contiene el archivo ya es propiedad (chmod 777) del usuario que necesita tener acceso de escritura al archivo.

Sin embargo, cada vez que el archivo se sincroniza de un cuadro a otro, parece que Dropbox ignora por completo ambos conjuntos de permisos, y cambia los permisos en el archivo recientemente actualizado para que sea de mi propiedad con los permisos 0644 (rw para mí, r para todos los demás ) Si el archivo no me pertenece, ¡incluso cambia la propiedad a mí mismo! Como resultado, el otro usuario ya no tiene permisos de escritura hasta que entre manualmente y vuelva a modificar el archivo.

Cosas adicionales que he probado que no han funcionado:

  1. se aseguró de que la cuenta de usuario (para el "otro usuario") en ambas máquinas tenga el mismo UID. No estoy seguro de por qué esto sería necesario, ya que mi cuenta principal no tiene el mismo UID en ambas máquinas.

  2. chmod u+s <dir>y chmod g+s <dir>dónde está el directorio que contiene el archivo en cuestión.

  3. cambiar la propiedad del archivo al otro usuario y colocarlo fuera del directorio de Dropbox, y crear un enlace simbólico al archivo en el directorio de Dropbox. ¡Dropbox realmente elimina el enlace simbólico, deja el archivo original (fuera del directorio de Dropbox) sin cambios y crea una nueva copia del archivo donde solía estar el enlace simbólico!

¿Cómo puedo configurar las cosas para que se conserven mis permisos y / o propiedad?

Miguel
fuente

Respuestas:

5

Ok, aquí está la solución que he encontrado. Si esto funcionará o no con versiones futuras de Dropbox es incierto. He abierto una solicitud de servicio con Dropbox para intentar resolver el problema aún más.

En general, la solución es una combinación de dos cosas:

  1. Configurar la umask para el proceso de Dropbox para que los archivos recién creados tengan permisos de 0660. Esto es lectura / escritura de usuario, lectura / escritura grupal, otros ninguno.
  2. Configurar el grupo para los archivos recién creados para el grupo que necesita tener acceso de escritura a los archivos en cuestión.

Esta solución se aplicará a todos los archivos en la carpeta de Dropbox, no solo a un solo archivo. En mi caso esto es aceptable.

En Linux, modifico el /etc/init.d/dropboxscript de inicio para que la línea que invoca Dropbox como un demonio lea:

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

Si se agrega la --umask 0006configuración umask, y la :$dbgrpparte de la opción -c logra configurar el grupo al que pertenece el demonio.

En el lado de Mac, ejecuto los siguientes comandos:

ps aux | grep -i dropbox

De esto puedo ver las opciones de línea de comandos que iniciaron Dropbox y de esto extraigo el $ mydropboxid usado más tarde. Luego salgo de Dropbox y abro un símbolo del sistema e ingreso los siguientes comandos:

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

Planeo automatizar los comandos anteriores en algún momento para no tener que volver a ejecutarlos cada vez que se reinicie mi máquina.

Esto maneja la configuración de la máscara para los archivos recién creados para que el grupo de un archivo tenga acceso de escritura. Sin embargo, para que el grupo se configure correctamente, necesito configurar el directorio de caché de Dropbox, esto hasta ahora solo debe hacerse una vez:

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

Parece que todos los archivos nuevos se crean primero en el directorio ~ / Dropbox / .dropbox.cache, por lo que los comandos anteriores otorgan a esos archivos nuevos la propiedad y los permisos adecuados para que los archivos nuevos creados por Dropbox tengan el grupo correcto.

Miguel
fuente
Interesante. ¿Puedes explicar un poco más qué hace esta línea y el archivo modificado en general?
nixda
Start-stop-daemon es una utilidad de Linux que le permite controlar varias configuraciones en las que se ejecuta un daemon. La mayoría de los parámetros se pasan en un shell de variables. Las modificaciones clave son la adición de "--umask 0006" que deja el permiso R / W para el usuario y el grupo, pero lo elimina para otros, y la adición del parámetro del grupo (": $ dbgrp") al parámetro -c, que establece el UID / GID con el que se ejecuta el proceso demonio). El comando Mac es similar, pero no he encontrado una utilidad similar, por lo que depende de configurar estos ajustes en el shell que ejecuta Dropbox.
Michael
¿Esto también se aplica a la versión actual de Dropbox? Mi script dropboxd está 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 $@y está ubicado en ./.dropbox-dist/ y se administra a través del script python suministrado
bicicleta
@bicycle No me han pedido que actualice mi cliente de Dropbox desde que se me ocurrió esta solución.
Michael
@ Michael, ¿Dropbox respondió alguna vez a su solicitud de servicio?
bbozo
0

Coloque ese archivo en su propia carpeta y comparta esa carpeta con el otro usuario. De esta manera están editando la última versión como tú. Tenga cuidado de no trabajar en ello al mismo tiempo.

CodeMonkey
fuente
1
Actualizando mi pregunta original para reflejar el hecho de que la carpeta que contiene el archivo en cuestión ya es propiedad del otro usuario. No hace ninguna diferencia, Dropbox aún ignora la propiedad / permisos actuales y los restablece cada vez que el archivo se sincroniza con la máquina.
Michael
0

Si copia un archivo entre dos computadoras, el software que realiza la copia decide cuáles son los permisos de la copia. Para lo que está haciendo, necesita un mapeo de permisos bastante detallado. Las funciones de asignación de permisos de Dropbox se limitan a preservar los permisos si ambos sistemas ejecutan el mismo sistema operativo . No se garantizan resultados específicos para copiar entre dos sistemas operativos diferentes.

Incluso si pudieras encontrar alguna forma de usar Dropbox de la manera que quieras, te aconsejaría que no confíes en él. Las peculiaridades del software no documentado tienen una forma de desaparecer sin previo aviso. Debe mirar las herramientas de transferencia de archivos que están diseñadas teniendo en cuenta su caso de uso. Mi primera opción sería rsync , que es estándar en las distribuciones de Linux, y fácil de instalar en Windows, especialmente si tiene Cygwin . ¡Y Cygwin es generalmente útil para las personas que tienen que trabajar con Windows y Linux!

Por supuesto, rsync requiere una conexión directa: no hay un servidor central como el que proporciona Dropbox. La forma en que maneje eso depende de los detalles de la configuración de su red.

Isaac Rabinovitch
fuente
Sí, estoy de acuerdo con lo que estás diciendo sobre las peculiaridades. En mi opinión, esta suele ser una buena razón para dejar de actualizar el software. Si hace lo que quiere, ¿por qué arriesgarse a que las nuevas versiones lo rompan?
Michael
rsync no es bidireccional y no se actualiza automáticamente cada vez que se realiza un cambio en el archivo.
Michael
@ Michael No siempre tiene la opción de actualizar el software; cuando está basado en la nube (como Dropbox) nunca tienes otra opción. Y es difícil ver por qué la bidireccionalidad o la copia automática son esenciales para lo que está tratando de hacer.
Isaac Rabinovitch
Siempre y cuando el servicio siga siendo compatible con el cliente anterior, tiene una opción. Y a menos que Dropbox pueda obligar a todos a actualizarse de inmediato, dudo que puedan hacer algo como hacer cambios de bajo nivel al protocolo que rompería a los clientes antiguos. La única forma en que puedo ver que podrían hacerlo es a través de algún tipo de transición.
Michael
Con respecto a lo que estoy tratando de hacer, estoy tratando de mantener un conjunto de archivos en dos máquinas diferentes y poder modificar cualquiera de ellos en un momento dado, luego saltar al otro poco tiempo después y retomar donde lo dejé, sin tener que hacer nada manualmente como iniciar un rsync. Esto se debe principalmente a que podría hacer la modificación de forma remota (por ejemplo, a través de una interfaz web), y hay problemas como firewalls y latencia que hacen que sea inconveniente mantener una sola copia centralizada de los datos.
Michael