如何在 Dropbox 中保留所有权和权限?

如何在 Dropbox 中保留所有权和权限?

我有两台机器,一台 Mac 和一台运行 Linux 的 PC,我试图使用 Dropbox 保持某个文件同步。

我正在同步的其中一个文件需要由除我之外的另一个用户(同一台机器上的不同 UID,不是指另一个 Dropbox 用户)写入。更具体地说,这个其他 UID 实际上是一个守护进程。因此,要么该文件需要由该其他用户拥有,要么“组”和/或“其他”需要写入权限。最初我在两台机器上都这样设置。此外,包含该文件的目录已经由需要对该文件具有写入权限的用户拥有(chmod 777)。

但是,每当文件从一个框同步到另一个框时,Dropbox 似乎完全忽略了这两组权限,并将新更新文件的权限更改为我拥有的权限 0644(对我来说是 rw,对其他人来说是 r)。如果文件不属于我,它甚至会将所有权改回给我!因此,其他用户不再具有写入权限,直到我手动进入并重新修改文件的 chmod。

我还尝试过其他一些没有效果的方法:

  1. 确保两台机器上的用户帐户(对于“其他用户”)具有相同的 UID。不确定为什么需要这样做,因为我的主帐户在两台机器上的 UID 并不相同。

  2. chmod u+s <dir>chmod g+s <dir>包含该文件的目录在哪里?

  3. 将文件的所有权更改为其他用户,并将其放置在 Dropbox 目录之外,并在 Dropbox 目录中创建指向该文件的符号链接。Dropbox 实际上会删除符号链接,保留原始文件(Dropbox 目录之外)不变,并在符号链接所在的位置创建该文件的新副本!

我该如何设置才能保留我的权限和/或所有权?

答案1

好的,这是我找到的解决方案。目前还不确定这是否适用于 Dropbox 的未来版本。我已向 Dropbox 提交了服务请求,试图进一步解决该问题。

总的来说,解决方案是两件事的结合:

  1. 设置 Dropbox 进程的 umask,以便新创建的文件具有 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 缓存目录的 gid - 到目前为止,这只需要执行一次:

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

看起来所有新文件都首先在 ~/Dropbox/.dropbox.cache 目录下创建,因此上述命令赋予这些新文件适当的所有权和权限,即 Dropbox 创建的新文件具有正确的组。

答案2

如果您在两台计算机之间复制文件,则执行复制的软件会决定副本的权限。对于您正在做的事情,您需要一些相当细粒度的权限映射。Dropbox 权限映射功能仅限于保留权限如果两个系统都运行相同的操作系统. 在两个不同的操作系统之间进行复制并不能保证特定的结果。

即使你能找到某种方式以你想要的方式使用 Dropbox,我建议不要依赖它。未记录的软件怪癖总是会不经意间消失。你需要查看专为你的用例而设计的文件传输工具。我的第一选择是同步,这是 Linux 发行版的标准配置,并且易于在 Windows 上安装,特别是如果你有赛格威。对于必须同时使用 Windows 和 Linux 的人来说,Cygwin 通常很有用!

当然,rsync 需要直接连接 — 没有 Dropbox 提供的中央服务器。如何处理取决于您的网络设置细节。

相关内容