EncFS

出自 ArchWiki
(重定向自 Encfs)
警告: 针对 encfs安全审查 (2014年2月) 发现了一些安全问题 (在 2014 年发布的稳定版本 1.7.4 中)。请在使用该版本之前考虑该报告及其中的参考资料以获取更新的信息,因为该开发已停止,并且并非所有问题都已修复

EncFS 是一个用户空间可堆叠的加密文件系统,类似于 eCryptfs,旨在以最小的麻烦保护数据。它使用 FUSE 将加密目录挂载到用户指定的另一个目录。它不使用像 TrueCryptdm-crypt 等其他可比较系统那样的环回系统。

如果您想在 Linux 上尝试磁盘加密,EncFS 绝对是最简单的软件。

EncFS 的优点:首先,它不需要任何 root 权限即可实现;任何用户都可以创建加密文件仓库。其次,不需要创建单个文件并在其中创建文件系统;它可以在现有文件系统上工作,无需修改。

缺点:加密文件未存储在它们自己的文件中,获得系统访问权限的人仍然可以看到底层目录结构、文件数量、文件大小以及修改时间。但是,他们看不到内容。

这种特定的数据安全方法显然不是完美的,但在某些情况下它很有用。

有关 EncFS 如何与其他磁盘加密解决方案进行比较的更多详细信息,请参阅Data-at-rest encryption#Comparison table

与 eCryptFS 的比较

eCryptFS 在内核空间中实现,因此配置起来稍微困难一些。您必须记住各种加密选项(使用的密码、密钥类型等)。使用 EncFS 则不然,因为它将加密元数据信息存储在每个目录的配置文件 (.encfs6.xml) 中。因此,您不必记住任何内容(口令除外)。

两者的性能取决于磁盘活动的类型。虽然 eCryptFS 在某些情况下可以执行得更快,因为上下文切换(内核和用户空间之间)的开销较小,但 EncFS 在其他情况下具有优势,因为加密元数据是集中的,而不是存储在各个文件的标头中。有关更多信息,EncFS 项目提供了 基准测试示例

安装

安装 encfs 软件包。

注意: encfs 项目已不再维护。[1]

用法

要创建安全存储库,请输入

$ encfs ~/.encrypted ~/origin

请注意,必须使用绝对路径。之后会提示您是否要使用默认选项、专家配置或偏执预设。第一个是相当安全的默认设置。第二个允许指定算法和其他选项。输入加密密钥后,将创建并挂载编码文件系统。在此示例中,编码文件存储在 ~/.encrypted 中,其未加密版本存储在 ~/origin 中。

提示: 在 FUSE 文件系统(例如 NTFS-3G)上使用 EncFS 可能会导致性能缓慢。如果可能,请考虑更改文件系统。

要卸载文件系统,请输入

$ fusermount -u ~/name

要重新挂载文件系统,请发出第一个命令,并输入用于编码它的密钥。输入后,文件系统将再次挂载。

更改密码

要更改 EncFS 加密的目录的密码,可以使用以下命令

$ encfsctl passwd ~/.name

在此示例中,~/.name 是包含编码文件的目录的路径。该工具将询问您当前的密码,之后,您将能够设置新密码。

用户友好的挂载

Gnome Encfs Manager

Gnome Encfs Manager 是一个易于使用的管理器和挂载器,用于 encfs 存储,具有每个存储的配置、Gnome Keyring 支持、受 Cryptkeeper 启发的托盘菜单(但使用 AppIndicator API)以及许多独特的功能。

gnome-encfs-manager-binAUR 和稍微更新的 gnome-encfs-manager-bzrAUR 均可用。

使用 encfsui 挂载

bash 脚本 encfsui 在 EncFS 命令行实用程序周围提供了一个简单的 zenity gui,用于挂载和卸载加密目录。它包括一个桌面启动器。从 encfsuiAUR 安装它。

通过 fstab 挂载

/etc/fstab 中添加条目将允许您使用简单的 mount /target/path 挂载 encfs 卷,并且系统将提示您输入密码。

/etc/fstab
encfs#/path/to/encfs/data  /mnt/decrypted  fuse  noauto,user  0  0

noauto 选项可防止在启动时尝试挂载卷,这可能会在等待输入密码时延迟启动过程。如果只有 root 用户应该能够挂载卷,则可以省略 user

在登录时使用 pam_encfs 挂载

本文或章节已过时。

原因: 这些说明基于非常旧版本的 pambase,因此令人困惑,需要对其进行审查/缩减,以使其符合添加模块所需的 /etc/pam.d/ 更改。pam_encfsAUR 软件包上次更新是在 2010 年,模板也可以选择更改为 Template:Remove,因为 #Mount at login using pam mount 是一个可用的替代方案。(在 Talk:EncFS 中讨论)

安装 pam_encfsAUR。另请参阅

单个密码

警告: 请注意,如果您将使用相同的密码(例如:使用 try_first_pass 或 use_first_pass)进行登录和 encfs(因此 encfs 将在您登录期间挂载),那么您应该使用 SHA 密码哈希(最好是使用大量轮次的 SHA512)和(最重要的是)安全密码,因为您的密码哈希可能以未加密的形式存储在 /etc/shadow 中,并且可以被破解以获取您的 encfs 密码(因为它与您的常规 unix 登录密码相同)。

/etc/pam.d/

请注意,当您对 pam_unix.so 使用 try_first_pass 参数时,您必须将 EncFS 设置为使用与您登录时相同的密码(或反之亦然),并且您只需输入一个密码。如果没有此参数,您将需要输入两个密码。

为所有登录方法设置 pam_encfs

按如下方式将 encfs 行添加到 /etc/pam.d/system-login

...
auth       sufficient pam_encfs.so
...
登录

本节介绍如何在通过虚拟终端登录时使 encfs 自动挂载。

注意: 如果您只想通过 GDM 使用它,您可以跳过此步骤,直接转到下面的 GDM 部分

编辑文件 /etc/pam.d/login

#%PAM-1.0

auth		required	pam_securetty.so
auth		requisite	pam_nologin.so
auth		sufficient	pam_encfs.so
auth		required	pam_unix.so nullok try_first_pass
#auth		required	pam_unix.so nullok
auth		required	pam_tally.so onerr=succeed file=/var/log/faillog
# use this to lockout accounts for 10 minutes after 3 failed attempts
#auth		required	pam_tally.so deny=2 unlock_time=600 onerr=succeed file=/var/log/faillog
account		required	pam_access.so
account		required	pam_time.so
account		required	pam_unix.so
#password	required	pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
#password	required	pam_unix.so md5 shadow use_authtok
session		required	pam_unix.so
session		required	pam_env.so
session		required	pam_motd.so
session		required	pam_limits.so
session		optional	pam_mail.so dir=/var/spool/mail standard
session		optional	pam_lastlog.so
session		optional	pam_loginuid.so
-session	optional	pam_ck_connector.so nox11
#Automatic unmount (optional):
#session	required	pam_encfs.so
警告: 请注意,即使存在另一个会话,自动卸载也会处理。例如:在 VC 上注销可能会卸载仍处于活动状态的 GDM 会话挂载的 encfs。
gdm

本节介绍如何在通过 GDM 登录时使 encfs 自动挂载。

注意: 为了调试目的,您可以先尝试在虚拟控制台登录时自动挂载。本文有一个关于在虚拟控制台登录时自动挂载的部分

编辑文件 /etc/pam.d/gdm-password

将以下内容插入(不要覆盖)gdm-password 的底部

#%PAM-1.0
auth            requisite       pam_nologin.so
auth            required        pam_env.so
auth            sufficient      pam_encfs.so
auth            required        pam_unix.so try_first_pass
auth            optional        pam_gnome_keyring.so
account         required        pam_unix.so
session         required        pam_limits.so
session         required        pam_unix.so
session         optional        pam_gnome_keyring.so auto_start
password        required        pam_unix.so
session         required        pam_encfs.so

保存并退出。

配置

编辑 /etc/security/pam_encfs.conf 

推荐:注释掉该行

encfs_default --idle=1

此标志将在不活动 1 分钟后卸载您的加密文件夹。如果您在登录时自动挂载它,您可能希望在您登录期间保持挂载状态。

在底部,注释掉任何现有的演示条目并添加

#USERNAME       SOURCE                                  TARGET PATH                 ENCFS Options           FUSE Options
archie          /home/archie/EncryptedFolder          /home/archie/DecryptedFolder    -v                    allow_other
注意: 使用 pam_encfs 无法在登录时挂载多个 EncFS 文件夹。如果在 /etc/security/pam_encfs.conf 中指定了多个条目,则只会挂载第一个条目,其余条目将被忽略。要在登录时挂载多个 EncFS 文件夹,必须使用 pam_mount。有关详细信息,请参阅 #Mount at login using pam_mount

此外,如果您看到以下行,请从选项中删除 allow_root。否则,它将与上面定义的 allow_other 冲突。

fuse_default allow_root,nonempty

接下来,编辑 /etc/fuse.conf:取消注释

user_allow_other

要测试您的配置,请打开一个新的虚拟终端(例如 Ctrl+Alt+F4)并登录。您应该看到 pam 成功挂载您的 EncFS 文件夹。

在登录时使用 pam_mount 挂载

按照其 wiki 页面上的说明安装和配置 pam_mount。EncFS 挂载可以在 pam_mount 的配置文件中按如下方式指定

/etc/security/pam_mount.conf.xml
<volume fstype="fuse" path="encfs#/path/to/encfs/encrypted/data" mountpoint="/path/to/decrypted/data/mountpoint" options="nonempty" />

EncFS 挂载需要与您的用户帐户具有相同的密码。nonempty 选项使得即使挂载点为非空,也可以挂载加密文件系统。如果这不是期望的行为,您可以删除此选项。

可以在登录时挂载多个 EncFS 文件夹,方法是在配置文件中指定多个连续的 <volume> 条目。

加密备份

警告: 如果您按照以下示例将加密选项文件与数据分开,那么您当然需要确保您也对明文选项文件进行了单独备份。如果您的磁盘崩溃,而您没有以明文形式备份它,那么单独的备份将无济于事,因为该文件包含加密元数据!好的一点是,该文件是静态的,除非您更改密码,否则您无需随着时间的推移重复备份它。

备份加密目录

加密目录可以像现在这样备份和恢复到另一个位置。这是可能的,因为加密选项/元数据的配置文件实际上以明文形式存储在目录本身的隐藏 .encfs6.xml 文件中。这不会造成直接问题,因为密码不在其中。

但是,如果您 - 例如 - 将备份存储在远程位置(例如在云中)或便携式设备上,您可能会对此感到不舒服。在这种情况下,在创建备份之前手动将文件移出目录也没有问题。您甚至可以永久移动它,并且仍然可以挂载和访问文件,如果您通过 ENCFS6_CONFIG 环境变量将其位置传递给 encfs。对于上面的 #用法 示例

$ mv ~/.name/.encfs6.xml ~/.
$ ENCFS6_CONFIG=~/.encfs6.xml encfs ~/.name ~/name

备份明文目录

以下示例假设您要为现有的明文目录 ~/mythesis 创建加密备份,该目录包含文件 thesis.txt

首先,我们为现有的明文目录创建加密备份

$ encfs --reverse ~/mythesis /tmp/thesisbackup 

请注意,在这种情况下,目录顺序与正常用法相反。使用 --reverse 选项有两个效果:首先,配置文件现在存储在明文目录中,而 /tmp/thesisbackup 仅包含加密形式。其次,/tmp/thesisbackup 中的文件不是持久性的。一旦卸载,它们将消失(不,这不是由于使用了 /tmp 挂载点)。

由于第二个原因,现在是将加密文件复制到所需备份位置的时候,再次卸载临时 encfs 目录之前

$ cp -R /tmp/thesisbackup/* /mnt/usbstick/
$ fusermount -u /tmp/thesisbackup 

完成。

要还原(或查看)备份,我们需要访问明文形式的加密选项,该选项必须通过环境变量 ENCFS6_CONFIG 传递给 encfs(我们使用不同的目录,以免弄乱现有的 ~/mythesis

$ ENCFS6_CONFIG=~/mythesis/.encfs6.xml encfs ~/mnt/usbstick/thesisbackup ~/restoremythesis 

如果您现在列出还原位置,它将包含两个文件

$ ls -la ~/restoremythesis
... 
-rw-r--r--  1 student student    1078  3. Jan 12:33 .encfs6.xml
-rw-r--r--  1 student student      42  3. Jan 12:33 thesis.txt
...

参见