目前我正在使用 EncFS 将我的目录“confidential”加密为“.encconfidential”,并且同步使用在线服务(例如 Dropbox、UbuntuOne 等)加密该目录。但是我的整个磁盘都已使用 LUKS 加密,因此双重加密会影响性能。
我想知道是否有“反转”的 EncFS 选项?未加密的目录被挂载,在挂载的目录中您只能看到加密的文件。因此我可以使用未加密的文档,而同步工具只能查看和读取/写入加密文件。
澄清:我的主要用例是同步不是备份。我希望能够安全地保持机器同步,而无需在本地操作时承受双重加密惩罚(当我点击保存时,我必须等待,与传输时间相比,加密操作是时间的最小增量 - 而且它是后台时间,而不是用户时间)
答案1
实际上,Encfs 有一个“反转”选项。摘自 Encfs 手册页:
--reverse
Normally EncFS provides a plaintext view of data on demand. Normally it stores enciphered data and displays plaintext data. With --reverse it
takes as source plaintext data and produces enciphered data on-demand. This can be useful for creating remote encrypted backups, where you do
not wish to keep the local files unencrypted.
For example, the following would create an encrypted view in /tmp/crypt-view.
encfs --reverse /home/me /tmp/crypt-view
You could then copy the /tmp/crypt-view directory in order to have a copy of the encrypted data. You must also keep a copy of the file
/home/me/.encfs5 which contains the filesystem information. Together, the two can be used to reproduce the unencrypted data:
ENCFS5_CONFIG=/home/me/.encfs5 encfs /tmp/crypt-view /tmp/plain-view
Now /tmp/plain-view contains the same data as /home/me
Note that --reverse mode only works with limited configuration options, so many settings may be disabled when used.
我还没有尝试同步,但我认为只要你.encfs5
在另一端使用相同的配置文件夹它就会起作用。
答案2
现在来了解如何准确执行您指定的操作:
您所要求的是一个只读文件系统视图,它会自动加密通过它读取的任何文件:
~/
confidential/
secret_file.txt # Stored unencrypted
.enc_confidential/ # Read-only view of files in confidential/
secret_file.txt # Encrypted view of corresponding file
执行此操作的标准方法是使用 FUSE(用户空间中的文件系统)。
对于您的用例,已经存在一个可以执行您想要的操作的 FUSE 文件系统,fuseflt
.fuseflt
提供文件系统的只读视图,其中对读取的每个文件应用任意用户指定的过滤器。
就您而言,您需要的过滤器是类似的加密程序gpg
。
看文档有关如何编写配置文件的信息。基本上,用作flt_cmd = gpg --encrypt [... your chosen encryption settings]
过滤命令。
请小心;如果您弄乱了配置,可能会将纯文本数据暴露给您的互联网服务。我建议大家使用我的其他答案。
由于您还需要写入支持才能使同步工作,因此看起来您必须编写自己的 FUSE 文件系统。修改源代码fuseflt
以添加写入支持可能并不难;只需填写未实现的写入函数即可。这将以与读取支持相同的方式工作,调用解密过滤器而不是加密过滤器。
为了编写你的 FUSE 文件系统,一些 教程可用。另请参阅FUSE 维基了解更多文档。
完成此操作后,将您的 FUSE 文件系统挂载命令添加到您的 .profile 中,以便它在登录时自动挂载。
答案3
原则上这是可能的(使用 FUSE 文件系统),但更简单的选择是使用现成的加密备份程序,使用您的在线服务作为备份目标。
我知道有 2 个合适的备份程序。这两个程序都能提供文件的完整历史记录。
双重身份/似曾相识
表里不一(Ubuntu 软件包) 是一款备份程序,可高效地将压缩、加密的增量备份写入远程位置。增量备份节省空间,因为它使用 rsync 算法来生成二进制差异。
您还可以使用 Deja-Dup 前端,它是最新 Ubuntu 版本中默认包含的。
Duplicity 支持写入许多远程位置,或者后端。具体来说,Duplicity 有一个 Ubuntu One 后端。我认为它不直接支持 Dropbox,但你可以告诉它备份到 Dropbox 同步的本地目录。
如果你要备份大量数据,Duplicity 就不合适了。由于增量备份的存储方式有限,它需要定期运行完整备份,这需要上传全部您的数据。
奥布南
对于较大的备份,请查看奥布南. 它存储加密数据去重在备份存储库中。要将其与远程存储服务一起使用,请告诉 Obnam 备份到 Dropbox/Ubuntu One 将同步的位置的存储库。由于 Obnam 使用基于 B 树的存储库格式,只需将新/更改的数据写入存储库,因此同步速度应该很快。
缺点是它需要在硬盘上存储 2 份数据副本(规范副本和备份存储库中的副本)。
Ubuntu 软件包链接。还有购电协议。
答案4
另一个现成的同步工具是 Seafile。它是一个类似 Dropbox 的单服务器多客户端解决方案。最新版本中有一个选项,可以以服务器不知道密钥的方式共享加密文件夹。
提示:为了更好地理解文档,Seafile 将共享文件夹称为“库”。