NeoAtlantis最近使用了Dropbox存储它的一些重要数据。Dropbox提供2GB的空间,不算多,所以NeoAtlantis打算用之存储最重要的那些文件。

这样就带来一个问题:NeoAtlantis不信任任何这类在线存储。Dropbox看起来真的不错,软件是开源的,性能也很好,但是NeoAtlantis也不愿意将它的数据就这样保存在它的数据中心。因为,虽然Dropbox声称自身使用了AES-256加密,但是AES-256是对称加密。它的密钥一定在某些人那里保管,但这人不是我。

如何平衡云存储的易用性和资料的安全性?我们需要的技术很简单,就是在资料在被同步到云服务器之前就将其加密。在Linux下,软件encfs很有帮助。

安装

安装很简单,以Fedora为例,和任何软件一样:

$ sudo yum install encfs

使用encfs

encfs工作时,可以将一个目录A作为存储密文的目录,另一个目录B作为访问的入口。这样,对B目录进行读写操作,就和一般目录一般。所有写入的新文件,直接被加密,放置在A目录中。

通过encfs建立从A到B的“映射”的命令是:

$ encfs /到/A目录/的/绝对路径 /到/B目录/的/绝对路径

断开这一映射,使得B目录中不再可以看到这些被加密的文件的方法是:

$ fusermount -u /到/B目录/的/绝对路径

注意是绝对路径。,如果写encfs ./DirA ./DirB是不行的。

第一次使用encfs建立基于A目录中的加密时,需要根据向导进行初始化设定。这个向导应该是中文的。安全性设定到最大就很好了。需要唯一注意的大概就是设定安全的密码,尽可能地长。

实际一点!

举一个具体的例子:假设我想在/home/neoatlantis下建立一个名字叫做网盘的目录,我希望将它的数据加密放在同一目录下的.dropbox-encrypted目录中。这样,我访问“网盘”目录,就和普通的文件操作一样。然后.dropbox-encrypted中就是被映射出去的密文,也是我打算放到网盘上的数据。

首先在/home/neoatlantis下分别建立网盘.dropbox-encrypted目录:

$ cd /home/neoatlantis
$ mkdir 网盘 .dropbox-encrypted

这样,启动和停止加密目录的命令就是:

$ encfs /home/neoatlantis/.dropbox-encrypted /home/neoatlantis/网盘   # 启动
$ fusermount -u /home/neoatlantis/网盘    # 停止

然而这样使用很麻烦。我希望能在Linux的命令行设定两个指令:netdisk-onnetdisk-off。前者用来启动,后者停止。于是编辑shell的配置文件,我用的是zsh,所以编辑.zshrc,您如果用的是bash,应该编辑.bashrc,他们都应该在您的用户主目录下。

加入如下两行:

alias netdisk-on="chmod 700 /home/neoatlantis/网盘; encfs /home/neoatlantis/.dropbox-encrypted /home/neoatlantis/网盘"
alias netdisk-off="fusermount -u /home/neoatlantis/网盘; chmod 000 /home/neoatlantis/网盘"

注意到我用了chmod来在挂载前和卸载后设定网盘目录的访问权限。这样可以避免误操作,在没有启动加密时就写入数据。

最后一步:下载和安装Dropbox,将它的同步目录设定为/home/neoatlantis/.dropbox-encrypted,然后去你的Dropbox网盘查看下,是否都是密文了。