带有 dropbox 的 eCryptfs:必须重新挂载才能看到同步更改

带有 dropbox 的 eCryptfs:必须重新挂载才能看到同步更改

我正在尝试在 Dropbox 上使用 eCryptfs,但遇到了一些问题。

我的系统是 GNU/Linux,确切地说是 openSUSE 12.2。

我的设置如下:我设置了两个运行 openSUSE 12.2 的 VirtualBox 实例,我们将它们称为 VM1 和 VM2。Dropbox 像往常一样同步 ~/Dropbox 中的所有内容。要创建我的 eCryptfs 设置,我在两个虚拟机上执行以下操作:

mkdir -m 500 ~/ecryptfs_upper
mkdir -m 700 ~/Dropbox/ecryptfs_lower
sudo mount -t ecryptfs Dropbox/ecryptfs_lower/ ecryptfs_upper/

我使用以下方式配置 eCryptfs:

key type: passphrase
cipher: aes
key bytes: 16
plaintext passthrough: no
filename encryption: yes

如果我现在继续在 VM1 上的 ~/ecryptfs_upper 中创建一个文件,它也会正确显示在 VM2 上。但是,当我在一台 VM 上更改此文件时,有时(出于某种原因,这种情况经常发生,但并非总是如此)它不会在另一台 VM 上显示更新。

如果我检查两个虚拟机上 ~/Dropbox/ecryptfs_lower 中的底层文件,它们是相同的(sha256sum 产生相同的哈希值),因此 dropbox 已正确设法同步它们。但 ~/ecryptfs_upper 中的相应文件仍然不同!我必须卸载然后再次安装 eCryptfs 才能正确显示更改。

问题似乎是,当 dropbox 更新 eCryptfs 下层目录中的文件时,eCryptfs 不会注意到这一变化。大概 eCryptfs 假设所有更改都将通过挂载进行。对于大多数用例来说,这显然是一个合理的假设,但当使用 eCryptfs 加密像 dropbox 这样的同步云存储时,这显然是一个大问题。

我看到有几个人提倡在 Dropbox 中使用 eCryptfs,但我没有看到有人提到这个问题。有没有人知道解决办法(例如,关闭 eCryptfs 似乎正在使用的缓存的方法),或者有没有不会出现此问题的 eCryptfs 替代方案?

答案1

看着恩夫斯作为 eCryptfs 的替代方案。它不存在您所描述的问题。

EncFS/Dropbox 设置教程

答案2

您偶然发现了 Linux 上 eCryptfs 的一个设计缺陷。没有机制通知 eCryptfs 下部页面缓存已发生更改,因此它不知道页面是否已从其下方更改。更改活动 eCryptfs 安装上的下部加密文件有点像在块设备上安装 EXT4 时翻转块设备上的位。EXT4 对块设备的状态有自己的看法,因为它假设它是唯一干扰块设备的东西,如果从其下方更改了它,事情很快就会变糟。

答案3

这不是解决方案,而是变通方法。已在 Linux Mint 17 上测试,运行良好,但应该也适用于其他 Linux 发行版。

/bin/bash #!/bin/bash

导出 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

xhome=${HOME}

# 如何
#
# 删除以前安装的 Dropbox - 所有目录 (~/.dropbox、~/.dropbox-dist、~/Dropbox) 并在命令行中输入:
#
# mkdir -p ${HOME}/.mount/dropbox
# dd if=/dev/zero of=${HOME}/.mount/dropbox.img bs=4K count=2M # 适用于 8GB
# mkfs.xfs ${HOME}/.mount/dropbox.img # 用于 XFS,但您可以使用您喜欢的 FS,例如 EXT4
# 创建目录 ${HOME}/bin
#
# 将此脚本放入 ${HOME}/bin
#
# chmod 0755 ${HOME}/bin/dropbox-mount.sh
#
# 添加到 /etc/sudoers 行:
#
# 你的用户名 ALL=NOPASSWD: /bin/mount
#
# 运行此脚本:${HOME}/bin/dropbox-mount.sh
#
# chown (id -u):(id -g) ${HOME}/.mount/dropbox
#
# 接下来启动 Dropbox App 并选择 ${HOME}/.mount/dropbox/ 作为基本目录,
# Dropbox 将自动创建 ${HOME}/.mount/dropbox/Dropbox。
#
# 重要的
# 在 Dropbox 偏好设置中关闭 Dropbox 自动启动。
# 将此脚本添加到系统自动启动(设置->启动应用程序)

xdropbox=".mount/dropbox"
xdropbox_dir="${xhome}/${xdropbox}"
xdropbox_img="${xhome}/${xdropbox}.img"

如果 [`mount | grep -c "${xhome}/${xdropbox}"` -eq 0]; 然后
    sudo mount -o loop ${xdropbox_img} ${xdropbox_dir}

睡眠 10 && dropbox 启动 &>/dev/null

出口 0

相关内容