Как сохранить права собственности и разрешения в Dropbox?

9

У меня есть две машины, Mac и ПК под управлением Linux, и я пытаюсь синхронизировать определенный файл между Dropbox.

Один из файлов, которые я синхронизирую, должен быть доступен для записи другому пользователю (другой UID на той же машине, не относящийся к другому пользователю Dropbox), кроме меня. Чтобы быть более конкретным, этот другой UID на самом деле является демоном. Таким образом, либо файл должен принадлежать этому другому пользователю, либо требуется разрешение на запись для «группы» и / или «другого». Первоначально я настроил это на обеих машинах. Кроме того, каталог, содержащий файл, уже принадлежит (chmod 777) пользователю, которому необходимо иметь доступ для записи в файл.

Однако всякий раз, когда файл синхронизируется из одного ящика в другой, создается впечатление, что Dropbox полностью игнорирует оба набора разрешений и изменяет разрешения для вновь обновленного файла, которым я владею, с разрешениями 0644 (rw для меня, r для всех остальных ). Если файл не принадлежит мне, он даже меняет владельца обратно на себя! В результате у другого пользователя больше нет прав на запись, пока я не войду и не перефразирую файл вручную.

Дополнительные вещи, которые я пробовал, которые не работали:

  1. убедитесь, что учетная запись пользователя (для «другого пользователя») на обеих машинах имеет одинаковый UID. Не уверен, почему это будет необходимо, так как моя основная учетная запись не имеет одинаковый UID на обеих машинах.

  2. chmod u+s <dir>и chmod g+s <dir>где находится каталог, содержащий рассматриваемый файл.

  3. смена владельца файла на другого пользователя и размещение его вне каталога Dropbox, а также создание символической ссылки на файл в каталоге Dropbox. Dropbox фактически удаляет символическую ссылку, оставляет исходный файл (вне каталога Dropbox) без изменений и создает новую копию файла, где раньше была символическая ссылка!

Как я могу настроить все так, чтобы мои права и / или права собственности были сохранены?

Майкл
источник

Ответы:

5

Хорошо, вот решение, которое я нашел. Будет ли это работать с будущими версиями Dropbox, пока неясно. Я открыл запрос на обслуживание с Dropbox, чтобы попытаться решить проблему дальше.

В целом, решение представляет собой сочетание двух вещей:

  1. Установка umask для процесса Dropbox так, чтобы вновь созданные файлы имели права доступа 0660. Это чтение / запись пользователя, чтение / запись группы, остальные нет.
  2. Установка группы для вновь создаваемых файлов в группу, которая должна иметь права на запись в рассматриваемые файлы.

Это решение будет применяться ко всем файлам в папке Dropbox, а не только к одному файлу. В моем случае это приемлемо.

Под Linux я /etc/init.d/dropboxизменяю сценарий запуска, чтобы строка, вызывающая dropbox как демон, читала:

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

Добавление --umask 0006завершений устанавливает umask, и :$dbgrpчасть опции -c завершает установку группы, к которой принадлежит демон.

На стороне Mac я запускаю следующие команды:

ps aux | grep -i dropbox

Из этого я вижу параметры командной строки, которые запускают Dropbox, и из этого я извлекаю $ mydropboxid, использованный позже. Затем я закрываю Dropbox, открываю командную строку и вводю следующие команды:

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

Я планирую автоматизировать приведенные выше команды в какой-то момент, чтобы мне не приходилось их перезапускать всякий раз, когда моя машина перезагружалась.

Это позволяет установить маску для вновь создаваемых файлов, чтобы у группы для файла был доступ на запись. Однако для правильной настройки группы мне нужно установить директорию кеша Dropbox - пока что это нужно сделать только один раз:

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

Похоже, что все новые файлы сначала создаются в каталоге ~ / Dropbox / .dropbox.cache, поэтому приведенные выше команды дают этим новым файлам надлежащее право собственности и разрешения на то, что новые файлы, созданные Dropbox, имеют правильную группу.

Майкл
источник
Интересно. Можете ли вы объяснить немного больше, что делает эта строка и измененный файл в целом?
Никда
Start-stop-daemon - это утилита Linux, которая позволяет вам управлять различными настройками, в которых работает демон. Большинство параметров передаются в переменных оболочки. Ключевыми модификациями являются добавление «--umask 0006», которое оставляет разрешение R / W для пользователя и группы, но удаляет его для других, и добавление параметра группы («: $ dbgrp») к параметру -c, который устанавливает UID / GID, под которым запускается процесс демона). Команда Mac похожа, но я не нашел подобной утилиты, поэтому полагаюсь на настройку этих настроек в оболочке, которая запускает Dropbox.
Майкл
Это относится и к текущей версии Dropbox? Мой 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 $@и находится в ./.dropbox-dist/ и управляется с помощью прилагаемого питон сценария
велосипедом
@bicycle Мне не предлагалось обновить мой клиент Dropbox с тех пор, как я предложил это решение.
Майкл
@ Майкл, Dropbox когда-нибудь отвечал на твой запрос на обслуживание?
bbozo
0

Поместите этот файл в его собственную папку и поделитесь этой папкой с другим пользователем. Таким образом, они редактируют последнюю версию, как и вы. Будьте осторожны, чтобы не работать над этим одновременно.

CodeMonkey
источник
1
Обновление моего исходного вопроса, чтобы отразить тот факт, что папка, содержащая рассматриваемый файл, уже принадлежит другому пользователю. Это не имеет значения, Dropbox по-прежнему игнорирует текущее владение / разрешения и сбрасывает их каждый раз, когда файл синхронизируется с машиной.
Майкл
0

Если вы копируете файл между двумя компьютерами, программное обеспечение, которое выполняет копирование, решает, какие разрешения у этой копии. Для того, что вы делаете, вам нужно довольно детализированное сопоставление разрешений. Функции сопоставления разрешений Dropbox ограничиваются сохранением разрешений, если обе системы работают на одной и той же ОС . Никаких конкретных результатов не гарантируется при копировании между двумя разными ОС.

Даже если бы вы могли найти способ использовать Dropbox так, как вам хочется, я бы посоветовал не полагаться на него. Недокументированные нюансы программного обеспечения могут исчезать без уведомления. Вам нужно взглянуть на инструменты передачи файлов, разработанные с учетом вашего варианта использования. Мой первый выбор был бы rsync , который является стандартным в дистрибутивах Linux, и его легко установить в Windows, особенно если у вас есть Cygwin . А Cygwin, как правило, полезен для людей, которые должны работать как с Windows, так и с Linux!

Конечно, для rsync требуется прямое соединение - нет центрального сервера, подобного тому, который предоставляет Dropbox. То, как вы справитесь с этим, зависит от настроек вашей сети.

Исаак Рабинович
источник
Да, я согласен с тем, что вы говорите о причудах. На мой взгляд, это часто хорошая причина прекратить обновление программного обеспечения - если оно делает то, что вы хотите, зачем рисковать новыми версиями, ломая это!
Майкл
rsync не является двунаправленным и не обновляется автоматически каждый раз, когда в файл вносятся изменения.
Майкл
@Michael У вас не всегда есть выбор в отношении обновления программного обеспечения; когда он основан на облаке (например, Dropbox), у вас никогда не будет выбора. И трудно понять, почему двунаправленность или автоматическое копирование необходимы для того, что вы пытаетесь сделать.
Исаак Рабинович
Пока сервис остается обратно совместимым с предыдущим клиентом, у вас есть выбор. И если Dropbox не может заставить всех обновиться сразу, я сомневаюсь, что они могли бы сделать что-то вроде низкоуровневого изменения протокола, что сломало бы старых клиентов. Единственный способ, которым я вижу, что они могли это сделать, - это какой-то переход.
Майкл
Что касается того, что я пытаюсь сделать, я пытаюсь сохранить набор файлов на двух разных машинах и иметь возможность изменить любой из них в любой момент времени, а затем перейти на другой через некоторое время и забрать где я остановился, без необходимости делать что-либо вручную, как запустить rsync. Это в основном потому, что я могу вносить изменения удаленно (например, через веб-интерфейс), и существуют такие проблемы, как брандмауэры и задержки, которые делают неудобным ведение единой централизованной копии данных.
Майкл