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

Mic*_*ael 9 dropbox ownership file-permissions

我有两台机器,一台 Mac 和一台运行 Linux 的 PC,我试图在使用 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 目录之外)不变,并在符号链接曾经所在的位置创建文件的新副本!

如何进行设置以保留我的权限和/或所有权?

Mic*_*ael 5

好的,这是我找到的解决方案。这是否适用于未来版本的 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
Run Code Online (Sandbox Code Playgroud)

添加--umask 0006完成设置 umask,并且:$dbgrp-c 选项的部分完成将组设置为守护程序所属的组。

在 Mac 端,我运行以下命令:

ps aux | grep -i dropbox
Run Code Online (Sandbox Code Playgroud)

从中我可以看到启动 Dropbox 的命令行选项,并从中提取了稍后使用的 $mydropboxid。然后我退出 Dropbox 并打开命令提示符并输入以下命令:

umask 0006
/Applications/Dropbox.app/Contents/MacOS/Dropbox -psn_0_$mydropboxid &
exit
Run Code Online (Sandbox Code Playgroud)

我计划在某个时候自动执行上述命令,以便在我的机器重新启动时不必重新运行这些命令。

这处理为新创建的文件设置掩码,以便文件组具有写访问权限。但是,为了正确设置组,我需要设置 Dropbox 缓存目录 - 到目前为止只需要完成一次:

sudo chgrp -R $dbgrp ~/Dropbox/.dropbox.cache
sudo chmod -R g+s ~/Dropbox/.dropbox.cache
Run Code Online (Sandbox Code Playgroud)

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