在 Ubuntu One 上使用 ecryptfs 来加密主目录

在 Ubuntu One 上使用 ecryptfs 来加密主目录

我喜欢在 Ubuntu One 上有一个加密文件夹的想法。互联网上目前有如何使用 EncFS 或 ecryptfs 进行设置的操作指南。我想使用 ecryptfs - 不是因为速度,因为如果你将数据存储在云中,速度其实并不那么重要 - 而是因为我已经使用过 ecryptfs,习惯了它,因此也不喜欢使用其他解决方案。

Ubuntu One 文件夹的问题在于它是用户主文件夹的一部分。在最近的 Ubuntu 版本中,许多情况下用户的主文件夹已使用 ecryptfs 加密,并且您无法在 ecryptfs(用户主目录)之上使用 ecryptfs(用于 Ubuntu One 文件夹)。

那么该怎么办呢?当然可以使用 EncFS。或者将 Ubuntu One 文件夹移出用户的主文件夹。

还有其他想法或建议吗?

答案1

正如前文所述,ecryptfs 无法解决我的问题,因为我的主文件夹已由 ecryptfs 加密。将“Ubuntu One”文件夹移出主目录也不是解决方案,因为这样“Ubuntu One”内容的其余部分就不再加密了。

我决定改用 EncFS。设置加密文件夹非常简单。但如何自动安装它,以便应用程序可以使用它来存储配置文件?有一些解决方案:

  1. pam_mount
  2. gnome-encfs
  3. 自动文件系统
  4. 熔断器

我不喜欢想法 1,因为我不想使用与我的登录密码相同的 EncFS 密码。

解决方案 2 我不喜欢,一方面是因为 Ubuntu 没有可用的 apt 包,另一方面我不想在登录后才挂载 EncFS 文件夹。如果出现故障或者文件夹被卸载,则每次后续访问都会失败。

解决方案 3 根本行不通。我使用 autofs 已经有一段时间了,通过 sshfs 挂载 CIFS 共享和文件夹,但 EncFS 就是不受支持。我尝试过几个脚本来通过 autofs 挂载 EncFS,但这太复杂了,而且容易出错。

因此,我目前使用的是解决方案 4。Afuse 可作为 apt 包使用。一旦访问该文件夹,Afuse 就会自动挂载 EncFS 文件夹,并在空闲一段时间后再次卸载它。

以下是如何设置一切的快速步骤(也许我将来会添加一些细节):

  • 安装 afuse
  • 创建“Ubuntu One”文件夹来存储加密内容

例子:

〜/ Ubuntu \ One / .encrypted

  • 创建一个文件夹作为 afuse 的顶层文件夹,用于挂载其中的文件夹

例子:

〜/ .fuse

  • 创建一些帮助脚本
  • 在 Gnome 中创建自动启动条目以启动 afuse

未加密的 EncFS 文件夹挂载在 ~/.fuse 下。在我的例子中,包含未加密内容的文件夹名为 U1Enc,因此所有数据都保留在 ~/.fuse/U1Enc 中。为了方便起见,我创建了一个从 ~/U1Enc 到 ~/.fuse/U1Enc 的链接,以便更轻松地到达那里。

这些想法和帮助脚本是我在几个网站上找到的。链接如下:

自动挂载 FUSE 文件系统
autofs:通过 sshfs 实现 encfs

我使用以下脚本:

〜/ .afuse-fstab

U1Enc  encfs --ondemand --idle=5 --extpass="/home/xxx/.creds/U1.encfs.sh" /home/xxx/Ubuntu\ One/.encrypted %m

~/.creds/U1.encfs.sh(标记为可执行文件,并且只能由用户自己访问)

#!/bin/sh
echo PASSWORD_FOR_ENCFS_IN_CLEARTEXT

〜/ bin / afuse-handler.pl(标记为可执行文件并在 $PATH 中包含 ~/bin)

#!/usr/bin/perl -w

$fstab="$ENV{HOME}/.afuse-fstab";
$afusedir=$ARGV[0];
$afuse_mountpoint=$ARGV[1];

print "afusedir:$afusedir\n";
print "afuse_mountpoint:$afuse_mountpoint\n";

system("logger -t afuse 1:$ARGV[0] 2:$ARGV[1]");

open(FSTAB, $fstab ) or die("Can not open afuse-fstab at $fstab\n");
while( <FSTAB> ) {
        if( /^$afusedir/ ) {
                s/[^\s\/]+[\s]*//;
                s/%r/$afusedir/g;
                s/%m/$afuse_mountpoint/g;
                chomp;
                $cmd = $_;
                print "$cmd\n";
                system($_) == 0
                        or die "execution of FUSE filesystem failed!\n"
                             . "command:$cmd\n"
                             . "reason:$?\n";
        }
}

最后~/bin/afuse.start.sh(再次标记为可执行文件)我在 Gnome/System/Settings 中注册了它,以便在登录后启动 afuse

#!/bin/sh
afuse -o mount_template="/home/xxx/bin/afuse-handler.pl %r %m" -o unmount_template="fusermount -u -z %m" ~/.fuse

最后一个脚本启动 afuse,一旦访问 ~/.fuse 下的 EncFS 文件夹,它就会启动 afuse-handler 来挂载该文件夹。afuse.handler 本身会检查 .afuse-fstab 如何挂载该文件夹。EncFS 密码由 U1.encfs.sh 回显,因此无需用户干预(因为此文件存储在我的主文件夹中,它由 ecryptfs 加密,因此我认为不存在重大安全问题)。

注意不同的 EncFS 版本。Natty 上目前安装的是 EncFS 版本 1.7.4。它与 Maverick 上的旧版本 1.6 不兼容。我还必须将 Maverick 上的 EncFS 更新到 1.7.4(通过固定 apt/preferences 完成)。

答案2

一种可能的方法是使用两个不同的目录:

~/my_secret_data 不会同步,但会加密添加到其中的所有文件,然后将加密文件从 ~/my_secret_data/文件夹移动到 ~/Ubuntu One/文件夹。如果您已将 GPG 密钥添加到所有计算机,那么您将能够自动打开加密文件,但其他计算机则不能。

我认为它不是很优雅,但它应该可以工作。

相关内容