我正在尝试在 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 的替代方案。它不存在您所描述的问题。
答案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