Como preservar a propriedade e as permissões no Dropbox?

9

Eu tenho duas máquinas, um Mac e um PC executando Linux, que estou tentando manter um determinado arquivo sincronizado entre o uso do Dropbox.

Um dos arquivos que estou sincronizando precisa ser gravável por outro usuário (UID diferente na mesma máquina, sem se referir a outro usuário da caixa de depósito) além de mim. Para ser mais específico, esse outro UID é realmente um daemon. Portanto, o arquivo precisa pertencer a esse outro usuário ou então é necessária permissão de gravação para "group" e / ou "other". Inicialmente, configurei dessa maneira nas duas máquinas. Além disso, o diretório que contém o arquivo já pertence (chmod 777) ao usuário que precisa ter acesso de gravação ao arquivo.

No entanto, sempre que o arquivo é sincronizado de uma caixa para outra, parece que o Dropbox ignora completamente os dois conjuntos de permissões e altera as permissões no arquivo recém-atualizado que pertencer a mim com as permissões 0644 (rw para mim, r para todos os outros) ) Se o arquivo não é de minha propriedade, ele muda de propriedade para mim mesmo! Como resultado, o outro usuário não tem mais permissões de gravação até eu manualmente entrar e re-chmod o arquivo.

Tentei coisas adicionais que não funcionaram:

  1. certificou-se de que a conta do usuário (para o "outro usuário") nas duas máquinas tenha o mesmo UID. Não sei por que isso seria necessário, pois minha conta principal não tem o mesmo UID em ambas as máquinas.

  2. chmod u+s <dir>e chmod g+s <dir>onde está o diretório que contém o arquivo em questão.

  3. alterando a propriedade do arquivo para o outro usuário e colocando-o fora do diretório do Dropbox e criando um link simbólico para o arquivo no diretório do Dropbox. O Dropbox na verdade exclui o link simbólico, mantém o arquivo original (fora do diretório Dropbox) inalterado e cria uma nova cópia do arquivo onde o link simbólico costumava estar!

Como posso configurar as coisas para que minhas permissões e / ou propriedade sejam preservadas?

Michael
fonte

Respostas:

5

Ok, aqui está a solução que encontrei. Se isso funcionará ou não com versões futuras do Dropbox é incerto. Abri uma solicitação de serviço com o Dropbox para tentar resolver o problema ainda mais.

No geral, a solução é uma combinação de duas coisas:

  1. Configurando o umask para o processo do Dropbox para que os arquivos recém-criados tenham permissões 0660. Trata-se de leitura / gravação do usuário, leitura / gravação do grupo, outra nenhuma.
  2. Definir o grupo para arquivos recém-criados como o grupo que precisa ter acesso de gravação aos arquivos em questão.

Esta solução se aplicará a todos os arquivos na pasta Dropbox, não apenas a um único arquivo. No meu caso, isso é aceitável.

No Linux, modifico o /etc/init.d/dropboxscript de inicialização para que a linha que chama o dropbox como um daemon leia:

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

A adição de --umask 0006realiza a configuração de umask e a :$dbgrpparte da opção -c realiza a configuração do grupo ao qual o daemon pertence.

No lado do Mac, eu executo os seguintes comandos:

ps aux | grep -i dropbox

A partir disso, posso ver as opções da linha de comando que iniciaram o Dropbox e extraí o $ mydropboxid usado posteriormente. Então, encerrei o Dropbox, abro um prompt de comando e insiro os seguintes comandos:

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

Pretendo automatizar os comandos acima em algum momento, para que não precise executá-los novamente sempre que minha máquina for reiniciada.

Isso lida com a configuração da máscara para arquivos recém-criados, para que o grupo de um arquivo tenha acesso de gravação. No entanto, para obter o grupo configurado corretamente, preciso definir o diretório de cache do Dropbox - até agora, isso só precisa ser feito uma vez:

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

Parece que todos os novos arquivos foram criados primeiro no diretório ~ / Dropbox / .dropbox.cache, portanto, os comandos acima concedem a esses novos arquivos a propriedade e as permissões adequadas de que os novos arquivos criados pelo Dropbox têm o grupo correto.

Michael
fonte
Interessante. Você pode explicar um pouco mais o que essa linha e o arquivo modificado em geral fazem?
Nixda
O start-stop-daemon é um utilitário Linux que permite controlar várias configurações sob as quais um daemon é executado. A maioria dos parâmetros é passada em variáveis ​​de shell. As principais modificações são a adição de "--umask 0006", que deixa a permissão R / W para usuário e grupo, mas a remove para outros, e a adição do parâmetro group (": $ dbgrp") ao parâmetro -c, que define o UID / GID que o processo daemon executa como). O comando Mac é semelhante, mas eu não encontrei um utilitário semelhante, por isso depende da definição dessas configurações no shell que executa o Dropbox.
Michael
Isso também se aplica à versão atual do dropbox? Meu script dropboxd é 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 $@e está localizado na ./.dropbox-dist/ e é gerido através do script python fornecido
bicicleta
@bicycle Não fui solicitado a atualizar meu cliente do dropbox desde a criação desta solução.
Michael
@ Michael, o Dropbox já respondeu à sua solicitação de serviço?
Bbozo # 26/16
0

Coloque esse arquivo em sua própria pasta e compartilhe-a com o outro usuário. Dessa forma, eles estão editando a versão mais recente como você. Cuidado para não trabalhar ao mesmo tempo.

CodeMonkey
fonte
11
Atualizando minha pergunta original para refletir o fato de que a pasta que contém o arquivo em questão já pertence ao outro usuário. Não faz diferença, o Dropbox ainda ignora a propriedade / permissões atuais e as redefine sempre que o arquivo é sincronizado com a máquina.
Michael
0

Se você copiar um arquivo entre dois computadores, o software que faz a cópia decide quais são as permissões na cópia. Para o que você está fazendo, você precisa de um mapeamento de permissão detalhado. Os recursos de mapeamento de permissão do Dropbox são limitados à preservação de permissões se ambos os sistemas executam o mesmo sistema operacional . Não são garantidos resultados específicos para copiar entre dois sistemas operacionais diferentes.

Mesmo que você possa descobrir uma maneira de usar o Dropbox da maneira que quiser, eu aconselho a não confiar nele. Peculiaridades de software não documentadas podem desaparecer sem aviso prévio. Você precisa examinar as ferramentas de transferência de arquivos projetadas com o seu caso de uso em mente. Minha primeira opção seria o rsync , que é padrão nas distribuições Linux e fácil de instalar no Windows, especialmente se você tiver o Cygwin . E Cygwin é geralmente útil para pessoas que precisam trabalhar com Windows e Linux!

Obviamente, o rsync requer uma conexão direta - não há servidor central como o Dropbox. Como você lida com isso depende dos detalhes da sua configuração de rede.

Isaac Rabinovitch
fonte
Sim, eu concordo com o que você está dizendo sobre peculiaridades. Na minha opinião, isso geralmente é um bom motivo para parar de atualizar o software - se ele faz o que você quer, por que correr o risco de versões mais recentes quebrarem isso!
Michael
O rsync não é bidirecional e não é atualizado automaticamente toda vez que uma alteração é feita no arquivo.
Michael
@ Michael Você nem sempre tem a opção de atualizar um software; quando é baseado em nuvem (como o Dropbox), você nunca tem escolha. E é difícil perceber por que a bidirecionalidade ou a cópia automática são essenciais para o que você está tentando fazer.
Isaac Rabinovitch
Enquanto o serviço permanecer compatível com o cliente anterior, você poderá escolher. E, a menos que o Dropbox possa forçar todos a atualizar imediatamente, duvido que eles possam fazer algo como fazer alterações de baixo nível no protocolo que quebraria clientes antigos. A única maneira de ver que eles conseguiram é através de algum tipo de transição.
Michael
Com relação ao que estou tentando fazer, estou tentando manter um conjunto de arquivos em duas máquinas diferentes e poder modificar um deles a qualquer momento, depois pular para o outro pouco tempo depois e pegar onde parei, sem ter que fazer nada manualmente, como iniciar um rsync. Isso principalmente porque eu posso fazer a modificação remotamente (por exemplo, por meio de uma interface da web), e há problemas como firewalls e latência que tornam inconveniente a manutenção de uma única cópia centralizada dos dados.
Michael