eCryptfs

出自 ArchWiki

本文介绍了 eCryptfs 的基本用法。它将指导您完成在您的 home 目录下创建一个私有的、安全的加密目录,以存储敏感文件和私人数据的过程。

在实现上,eCryptfs 与 dm-crypt 不同,后者提供块设备加密层,而 eCryptfs 实际上是一个文件系统 – 一个 堆叠式加密文件系统。要比较两者,您可以参考 数据静态加密#块设备与堆叠式文件系统加密。一个显著的特点是加密堆叠在现有文件系统之上;eCryptfs 可以挂载到任何单个现有目录,并且不需要单独的分区(或预先分配大小)。

基础知识

正如摘要中提到的,eCryptfs 不需要特殊的磁盘存储分配工作,例如单独的分区或预分配空间。相反,您可以将 eCryptfs 挂载到任何单个目录之上以保护它。这包括,例如,用户的整个 home 目录或其中的单个专用目录。所有加密元数据都存储在文件的标头中,因此加密数据可以轻松移动、存储备份和恢复。还有其他优点,但也存在缺点,例如 eCryptfs 不适合加密完整分区,这也意味着您无法使用它来保护交换空间(但您当然可以将其与 Dm-crypt/交换空间加密 结合使用)。如果您刚开始设置磁盘加密,交换空间加密以及其他需要考虑的点,请参阅 数据静态加密#准备工作

为了熟悉 eCryptfs,以下是一些要点

  • 作为堆叠式文件系统,挂载 eCryptfs 目录是指在 Linux 内核运行时将(堆叠的)加密目录挂载到另一个加密的挂载点(目录)。
  • 可以在用户之间共享加密目录。但是,加密链接到一个密码,因此也必须共享该密码。也可以共享具有不同加密文件的目录(不同的密码)。
  • 在整个文档中使用了几个 eCryptfs 术语
    • 加密目录在整个 eCryptfs 文档和本文中被称为下层目录,而未加密目录被称为上层目录。虽然与本文无关,但 Linux 3.18 中引入的 Overlay 文件系统 对于文件系统的堆叠使用了 相同的上层/下层命名法
    • 挂载密码(或密钥)是访问加密文件的方式,即解锁加密。eCryptfs 使用术语包装密码来指代加密安全的挂载密码。
    • FEKEK 指的是文件加密密钥加密密钥(参见 内核文档)。
    • FNEK 指的是文件加密密钥,用于(可选地)加密存储在加密目录中的文件名的密钥。

在使用 eCryptfs 之前,应检查以下缺点是否适用。

缺陷

  • 易用性
ecryptfs-utils 软件包提供了几种不同的设置 eCryptfs 的方法。#Ubuntu 工具 高级工具最容易使用,但它们硬编码了下层目录路径和其他设置,限制了它们的实用性。该软件包还包括低级工具,这些工具是完全可配置的,但与 EncFS 等替代方案相比,它们的使用难度稍高。
  • 文件名长度
当堆叠在最大文件名长度为 255 字节的文件系统上时,超过 143 字节的文件名无法加密(使用 FNEK 选项)。[1] 这可能会破坏您 home 目录中的某些程序(例如 Symfony 缓存)。
  • 网络存储挂载
当在 NFS 和可能其他网络文件系统之上使用时,eCryptfs 存在长期存在的 错误,例如,#通过 Mosh 连接时,远程主机上可能无法挂载。始终可以在本地目录上使用 eCryptfs,然后将加密文件从本地目录复制到网络主机。但是,如果您想直接在 NFS 挂载之上设置 eCryptfs,而没有文件的本地副本,则 eCryptfs 可能会崩溃或行为不正确。如果有疑问,EncFS 在这种情况下可能是更好的选择。
  • 稀疏文件
写入 eCryptfs 的 稀疏文件 将在下层目录中生成更大的、非稀疏的加密文件。例如,在运行 truncate -s 1G file.img 的 eCryptfs 目录中,将在底层文件系统上创建一个 1GB 的加密文件,并具有相应的资源(磁盘空间、数据吞吐量)需求。如果相同的文件是在未加密的文件系统或使用 块设备加密 的文件系统上创建的,则它只会占用几千字节。
在加密目录结构的大部分内容之前,应考虑这一点,尽管在大多数情况下,缺点将是次要的。如果您需要使用大型稀疏文件,您可以通过将稀疏文件放在未加密的目录中或对它们使用块设备加密来解决此问题。

设置与挂载

在开始设置之前,请查看 eCryptfs 文档。该软件附带了一套非常全面的 手册页

eCryptfs 自 2.6.19 版本以来已包含在 Linux 中。首先加载 ecryptfs 模块

# modprobe ecryptfs

要实际挂载 eCryptfs 文件系统,您需要使用 ecryptfs-utils 软件包提供的用户空间工具。不幸的是,由于这些工具的设计不佳,您必须在三种设置 eCryptfs 的方式之间进行选择,每种方式都有不同的权衡

  1. 使用高级 #Ubuntu 工具,它会自动设置,但要求下层目录为 ~/.Private/,并且每个用户只允许一个加密文件系统。
  2. 使用 ecryptfs-simple,这是一种使用任何下层目录和上层目录挂载 eCryptfs 文件系统的简便方法。
  3. #手动设置,这包括加载密码和挂载 eCryptfs 的单独步骤,但允许完全控制目录和加密设置。

Ubuntu 工具

ecryptfs-utils 软件包安装的大多数用户友好型便捷工具都假定正在使用非常特定的 eCryptfs 设置,即 Ubuntu 官方使用的设置(在安装过程中可以选择它作为选项)。不幸的是,这些选择不仅仅是默认选项,而是实际硬编码在工具中。如果此设置不适合您的需求,那么您将无法使用便捷工具,而必须按照 #手动设置 中的步骤进行操作。

这些工具使用的设置如下

  • 每个用户只能有一个加密目录,由这些工具管理
    • 完全 $HOME 目录加密,或
    • 单个加密数据目录(默认为 ~/Private/,但这可以自定义)。
  • 每个用户的下层目录始终为 ~/.Private/
    提示: 在完全 home 目录加密的情况下,这将是一个指向 /home/.ecryptfs/username/.Private/ 中实际位置的符号链接。
  • 使用的加密选项
    • 密码: AES
    • 密钥长度: 16 字节(128 位)
    • 密钥管理方案: 密码
    • 明文直通: 已启用
  • 加密目录的配置/控制信息存储在 ~/.ecryptfs/ 中的一堆文件中
    提示: 在完全 home 目录加密的情况下,这将是一个指向 /home/.ecryptfs/username/.ecryptfs/ 中实际位置的符号链接。
    • Private.mnt [纯文本文件] - 包含上层目录应挂载到的路径(例如 /home/lucy/home/lucy/Private
    • Private.sig [纯文本文件] - 包含用于标识内核密钥环中挂载密码的签名
    • wrapped-passphrase [二进制文件] - 挂载密码,使用登录密码加密
    • auto-mountauto-umount [空文件] - 如果它们存在,pam_ecryptfs.so 模块将(假设已加载)在用户登录/注销时自动挂载/卸载此加密目录

加密数据目录

有关完整 $HOME 目录加密,请参阅 #加密 home 目录

在设置数据目录加密之前,请确定稍后应手动挂载还是使用用户登录自动挂载。

要以用户身份加密单个数据目录并在以后手动挂载它,请运行

$ ecryptfs-setup-private --nopwcheck --noautomount

并按照说明操作。--nopwcheck 选项使您可以选择与用户登录密码不同的密码,--noautomount 选项是不言自明的。因此,如果您希望以后在登录时自动设置加密目录,只需省略这两个选项即可。

该脚本将自动创建如上框所述的 ~/.Private/~/.ecryptfs/ 目录结构。它还会询问两个密码

登录密码
这是您每次要挂载加密目录时都必须输入的密码。如果您希望登录时自动挂载工作,则它必须与您用于登录用户帐户的密码相同。
挂载密码
这用于派生实际的文件加密主密钥。因此,除非您知道自己在做什么,否则不应输入自定义密码 - 而是按 Enter 键让它自动生成一个安全的随机密码。它将使用登录密码加密,并以加密形式存储在 ~/.ecryptfs/wrapped-passphrase 中。稍后,它将在需要时在 RAM 中自动解密(“解包”),因此您永远不必手动输入它。确保此文件不会丢失,否则您将永远无法再次访问您的加密文件夹!您可能需要运行 ecryptfs-unwrap-passphrase 以查看未加密形式的挂载密码,将其写在一张纸上,并将其保存在保险箱(或类似物)中,这样您就可以在 wrapped-passphrase 文件意外丢失、损坏或您忘记登录密码的情况下使用它来恢复您的加密数据。

加密文件夹的挂载点(“上层目录”)默认为 ~/Private/。但是,您可以在设置命令运行完成后立即手动更改它,方法是执行

$ mv ~/Private /path/to/new/folder
$ echo /path/to/new/folder > ~/.ecryptfs/Private.mnt

要实际使用您的加密文件夹,您必须挂载它 - 请参阅下面的 #挂载

加密 home 目录

包装脚本 ecryptfs-migrate-home 将为用户设置加密的 home 目录,并负责迁移他们尚未加密的 home 目录中的任何现有文件。

要运行它,用户必须注销并且不拥有任何进程。实现此目的的最佳方法是注销用户,以 root 用户身份登录到控制台,并检查 ps -U username 是否没有返回输出。您还需要确保已安装 rsynclsofwhich。满足先决条件后,运行

# modprobe ecryptfs
# ecryptfs-migrate-home -u username

并按照说明操作。包装脚本完成后,按照自动挂载的说明进行操作 - 请参阅下面的 #自动挂载。要完成此过程,用户必须在下次重启之前登录。

一切正常后,应删除用户 home 目录的未加密备份,该备份已保存到 /home/username.random_characters

挂载

手动

执行包装器

$ ecryptfs-mount-private

并输入密码是挂载加密目录到 #Ubuntu 工具 中描述的上层目录 ~/Private/ 所需的全部操作。

同样,执行

$ ecryptfs-umount-private

将再次卸载它。

提示: 如果不需要在用户会话期间永久访问私有数据,则可以定义 别名 以加快手动步骤。

这些工具包括另一个有用的脚本,用于访问加密的 .Private 数据或 home 目录。以 root 身份执行 ecryptfs-recover-private 将搜索系统(或可选的特定路径)以查找目录,交互式查询其密码,并挂载目录。例如,它可以从 live-CD 或不同的系统使用,以便在恢复情况下访问加密数据。请注意,如果从 Arch Linux ISO 启动,您必须首先安装 ecryptfs-utils。此外,它只能挂载使用 Ubuntu 工具创建的 .Private 目录。

自动挂载

自动挂载加密目录的默认方法是通过 PAM。请参阅 pam_ecryptfs(8) 以及 - 更多详细信息 - 'PAM MODULE' 在

/usr/share/doc/ecryptfs-utils/README

对于自动挂载,需要加密目录密码与用户的登录密码相同。

使用以下步骤设置自动挂载

1. 检查 ~/.ecryptfs/auto-mount~/.ecryptfs/auto-umount~/.ecryptfs/wrapped-passphrase 是否存在(这些是由 ecryptfs-setup-private 自动创建的)。

2. 将 ecryptfs 添加到 pam-stack 中,完全如下所示,以便在登录时透明地解包密码

打开 /etc/pam.d/system-auth 并在包含 auth required pam_unix.so 的行之后(如果存在 auth [default=die] pam_faillock.so authfail)添加

auth [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
auth    required    pam_ecryptfs.so unwrap

接下来,在包含 password required pam_unix.so 的行之上(如果存在 -password [success=1 default=ignore] pam_systemd_home.so)插入

password    optional    pam_ecryptfs.so

最后,在 session required pam_unix.so之后添加

session [success=1 default=ignore] pam_succeed_if.so service = systemd-user quiet
session    optional    pam_ecryptfs.so unwrap
注意: pam_succeed_if.so 指令告诉进程,如果请求身份验证的服务是 systemd-user(它与您的用户会话并行运行,并且也通过 PAM 进行身份验证),则跳过下一行。如果 home 目录第二次挂载,PAM 将无法卸载它。这被称为与 systemd 的 中断,并且已针对它提交了错误 : [2] [3] [4]。此处公开的方法是一种解决方法。

3. 重新登录并检查 mount 的输出,现在应该包含一个挂载点,例如

/home/username/.Private on /home/username/Private type ecryptfs (...)

对于用户的加密目录。它应该在 ~/Private/ 中完全可读。

注意: 上述对 system-auth 的更改启用了正常登录的自动挂载。如果您改为使用 su -l 切换用户,则还需要对 /etc/pam.d/su-l 应用类似的更改。

后者应在用户注销时自动卸载并使其不可用。

注意: 如果您使用 systemd-user 持久 服务,或其他在您注销后仍然存在的单独进程,则您的 home 目录将不会被卸载,直到它们退出。这是预期的,因为用户进程应始终能够保存其状态。

ecryptfs-simple

如果您只想使用 eCryptfs 来挂载任意目录,就像使用 EncFS 一样,请使用 ecryptfs-simple。ecryptfs-simple 不需要 root 权限或 /etc/fstab 中的条目,也不限于硬编码目录,例如 ~/.Private/。该软件包可以作为 ecryptfs-simpleAURXyne 的仓库 安装

顾名思义,用法很简单

简单挂载

$ ecryptfs-simple /path/to/foo /path/to/bar

自动挂载:在目录的首次挂载时提示选项,然后在下次重新加载它们

$ ecryptfs-simple -a /path/to/foo /path/to/bar

按源目录卸载

$ ecryptfs-simple -u /path/to/foo

按挂载点卸载

$ ecryptfs-simple -u /path/to/bar

手动设置

以下详细说明了如何手动设置 eCryptfs 加密目录。这涉及两个步骤。首先,处理密码并将其加载到内核密钥环中。其次,使用密钥环中的密钥实际挂载文件系统。

在第一步中,有两种方法可以将密码添加到内核密钥环。更简单的选项是 ecryptfs-add-passphrase,它使用单个密码来加密文件。缺点是您以后无法更改密码。它的工作方式如下

$ ecryptfs-add-passphrase
Passphrase:
Inserted auth tok with sig [78c6f0645fe62da0] into the user session keyring

您也可以将密码通过管道传递到 ecryptfs-add-passphrase -。请记住,如果您将密码留在文件中,通常会破坏使用加密的目的。

作为纯密码的替代方法,您可以使用“包装密码”,其中文件使用随机生成的密钥加密,该密钥本身使用您的密码加密并存储在文件中。在这种情况下,您可以通过使用旧密码解包密钥文件并使用新密码重新包装它来更改您的密码。

在下面,我们 提示 输入包装密码,并执行类似于 源代码 的生成,然后使用 ecryptfs-wrap-passphrase 将其与给定的密码包装到 ~/.ecryptfs/wrapped-passphrase

$ mkdir ~/.ecryptfs
$ ( stty -echo; printf "Passphrase: " 1>&2; read PASSWORD; stty echo; echo 1>&2; head -c 48 /dev/random | base64; echo "$PASSWORD"; ) \
  | ecryptfs-wrap-passphrase ~/.ecryptfs/wrapped-passphrase >/dev/null

不要使用超过 64 个字符的密码,因为这会在以后使用 ecryptfs-insert-wrapped-passphrase-into-keyring 时导致错误。

接下来,我们可以输入我们的密码以将密钥加载到密钥环中

$ ( stty -echo; printf "Passphrase: " 1>&2; read PASSWORD; stty echo; echo $PASSWORD; ) | ecryptfs-insert-wrapped-passphrase-into-keyring ~/.ecryptfs/wrapped-passphrase -
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring

在任何一种情况下,当您成功将密码添加到内核密钥环时,您都将获得一个“密钥签名”,例如 78c6f0645fe62da0,您将在下一步中需要它。

手动挂载 eCryptfs 有两种不同的方法,在以下部分中介绍。第一种方法,使用 mount.ecryptfs_private,可以作为普通用户运行,并且涉及设置一些配置文件。此方法不允许您更改加密设置,例如密钥大小。第二种方法是使用原始 mount 命令,它可以让您完全控制所有设置,但需要您以 root 身份运行它,或者向 /etc/fstab 添加一个条目,让用户可以挂载 eCryptfs。

提示: 以下示例使用与 Ubuntu 工具中默认的、硬编码的 .Private 不同的加密目录 (.secret)。这是故意的,以避免在系统已为 PAM 设置自动挂载时出现错误的 #自动挂载 问题,以及其他工具使用硬编码默认值的问题。

使用配置文件

此方法涉及在首先加载密码后,从 ecryptfs-utils 软件包运行 mount.ecryptfs_private。默认情况下,此二进制文件不需要 root 权限即可工作。

首先在 ~/.ecryptfs/ 中为您的配置文件选择一个名称,并确定下层目录和上层目录。在此示例中,我们使用 secret 作为配置文件的名称,将加密数据放在 ~/.secret/ 中,并将解密的文件挂载到 ~/secret/。创建所需的目录

$ mkdir ~/.secret ~/secret ~/.ecryptfs

现在在 ~/.ecryptfs/secret.conf 中指定目录,使用完整路径。其格式看起来像 /etc/fstab 中的格式,没有挂载选项

$ echo "$HOME/.secret $HOME/secret ecryptfs" > ~/.ecryptfs/secret.conf

将您从 ecryptfs-add-passphraseecryptfs-insert-wrapped-passphrase-into-keyring 获取的密钥签名(见上文)写入 ~/.ecryptfs/secret.sig

$ echo 78c6f0645fe62da0 > ~/.ecryptfs/secret.sig

如果您还想启用文件名加密,请向密钥环添加第二个密码(或重用第一个密码),并将密钥签名附加~/.ecryptfs/secret.sig

 $ echo 326a6d3e2a5d444a >> ~/.ecryptfs/secret.sig

最后,将 ~/.secret/ 挂载到 ~/secret/

$ mount.ecryptfs_private secret

完成后,卸载它

$ umount.ecryptfs_private secret

原始挂载命令

通过手动运行实际的 mount 命令,您可以完全控制加密选项。缺点是您需要以 root 身份运行 mount,或者为每个 eCryptfs 目录向 /etc/fstab 添加一个条目,以便用户可以挂载它们。

首先创建您的私有目录。在此示例中,我们使用与上一节相同的目录

$ mkdir -m 700 ~/.secret
$ mkdir -m 500 ~/secret

总结

  • 实际的加密数据将存储在下层 ~/.secret/ 目录中
  • 挂载时,解密的数据将在 ~/secret/ 目录中可用
    • 未挂载时,任何内容都无法写入此目录
    • 挂载时,它具有与下层目录相同的权限

现在,假设您已创建了上面的 包装密钥密码,您需要将加密密钥插入 root 用户的密钥环一次

# ( stty -echo; printf "Passphrase: " 1>&2; read PASSWORD; stty echo; echo $PASSWORD; ) | ecryptfs-insert-wrapped-passphrase-into-keyring /home/username/.ecryptfs/wrapped-passphrase -
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring

以便以下挂载命令成功

# mount -i -t ecryptfs /home/username/.secret /home/username/secret -o ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs
注意: 截至 2022 年,由于 systemd 中的错误,此命令不起作用(请参阅 FS#55943)。解决方法是在挂载前运行 keyctl link @u @s
  • ecryptfs_sig 设置数据密码密钥签名。
  • ecryptfs_fnek_sig 设置文件名密码密钥签名;如果您不想加密文件名,可以省略此选项。
  • ecryptfs_key_bytes 可以是 16、24 或 32,以更改加密密钥大小。
  • ecryptfs_unlink_sigs 将在您卸载时从密钥环中删除密码,因此您必须再次添加密码才能重新挂载文件系统。
  • ecryptfs(7) § OPTIONS 中列出了一些其他选项。
提示: 有一个 mount.ecryptfs 工具,您可以以 root 身份运行它以交互式输入挂载设置。一旦您使用它来挂载 eCryptfs,您可以检查 /etc/mtab 以找出它使用了哪些选项。

一旦您选择了正确的挂载选项,您可以向 /etc/fstab 添加一个条目,以便普通用户可以在这些目录上挂载 eCryptfs。将挂载选项复制到新的 /etc/fstab 条目,并添加选项 usernoauto。完整条目将类似于(粗体条目已添加)

/etc/fstab
/home/username/.secret /home/username/secret ecryptfs noauto,user,ecryptfs_sig=7c5d3dd8a1b49db0,ecryptfs_fnek_sig=7c5d3dd8a1b49db0,ecryptfs_cipher=aes,ecryptfs_key_bytes=32,ecryptfs_unlink_sigs 0 0
  • noauto 选项非常重要,因为否则 systemd 会在启动时尝试直接挂载该条目时报错。
  • user 选项允许以用户身份挂载目录。
    • 用户挂载默认使用 noexec 选项。 如果您希望在您的私有目录中至少拥有可执行文件,您可以将 exec 添加到 fstab 选项中。

现在设置已完成,该目录应该可以由用户挂载。

挂载

要以用户身份挂载加密目录,必须解包密码短语并使其在用户的密钥环中可用。 按照上面章节的示例

$ ecryptfs-insert-wrapped-passphrase-into-keyring ~/.ecryptfs/wrapped-passphrase
Passphrase:
Inserted auth tok with sig [7c5d3dd8a1b49db0] into the user session keyring

现在可以挂载目录而无需挂载助手提问。

$ mount -i ~/secret

并且可以将文件放入 secret 目录中。 以上两个步骤是每次手动挂载目录时都必须执行的。

要再次卸载它

$ umount ~/secret

最后,可以更改用于包装加密密码短语的初步密码短语。

$ ecryptfs-rewrap-passphrase ~/.ecryptfs/wrapped-passphrase
Old wrapping passphrase:
New wrapping passphrase:
New wrapping passphrase (again):

卸载还应清除密钥环,以检查用户的密钥环或手动清除它。

$ keyctl list @u
$ keyctl clear @u
注意: 应该记住 /etc/fstab 仅用于系统范围的分区,并且通常不应用于用户特定的挂载。
自动挂载

可以采用不同的方法在登录时自动挂载先前在 /etc/fstab 中定义的用户挂载。 作为第一个通用步骤,请按照 #自动挂载 的第 (1) 和 (2) 点进行操作。

然后,如果您通过控制台登录,一个简单的方法是在用户的 shell 配置文件中指定 用户交互式mountumount,例如 Bash#配置文件

本文或本节内容的 factual accuracy 存在争议。

原因
- 本节应该比现在更通用
- 所描述的方法不适用于用户,对于遇到的问题:(在 Talk:ECryptfs#Automounting 中讨论)

另一种方法是使用 pam_mount 在用户登录时自动挂载 eCryptfs 目录。 要配置此方法,请将以下行添加到 /etc/security/pam_mount.conf.xml

<luserconf name=".pam_mount.conf.xml" />
<mntoptions require="" /> 
<lclmount>mount -i %(VOLUME) "%(before=\"-o\" OPTIONS)"</lclmount> 

请优先手动编写这些行,而不是简单地复制/粘贴它们(特别是 lclmount 行)。 否则,您可能会得到一些损坏的字符。 解释

  • 第一行指示用户配置文件的位置(此处为 ~/.pam_mount.conf.xml
  • 第二行覆盖了默认的必需挂载选项,这些选项是不必要的(“nosuid,nodev”)
  • 最后一行指示要运行的挂载命令(eCryptfs 需要 -i 开关)。

然后设置卷定义,最好设置为 ~/.pam_mount.conf.xml

<pam_mount>
    <volume noroot="1" fstype="ecryptfs" path="/home/username/.secret/" mountpoint="/home/username/secret/" />
</pam_mount>

需要 "`noroot`" 是因为加密密钥将被添加到用户的密钥环中。

最后,按照 pam_mount 文章中的描述,编辑 /etc/pam.d/system-login

可选步骤

为了避免不必要地浪费时间解包密码短语,您可以创建一个脚本来检查 pmvarrun 以查看打开会话的数量。

/usr/local/bin/doecryptfs
#!/bin/sh
exit $(/usr/sbin/pmvarrun -u$PAM_USER -o0)

在 PAM 堆栈中的 eCryptfs 解包模块之前添加以下行

auth    [success=ignore default=1]    pam_exec.so     quiet /usr/local/bin/doecryptfs
auth    required                      pam_ecryptfs.so unwrap

该文章建议将这些添加到 /etc/pam.d/login,但是这些更改将需要添加到您登录的所有其他位置,例如 /etc/pam.d/kde

用法

本文或本节需要扩充。

原因: 仍然可能需要涵盖的内容

- 指向上面的 “设置 & 挂载” 部分,了解如何挂载和卸载 [本节将涵盖所有其他(即独立于设置的)用法信息]
- 引用先前章节中未使用/提及的 ecryptfs 工具(例如,提供在线手册页的简短链接并提及其他工具的用法,因为它看起来很有用(尚未涵盖的工具包括 ecryptfs-stat、ecryptfs-find、ecryptfs-rewrite-file。))
- 提及在用户之间共享加密文件夹以及将未加密文件或文件夹放置在加密容器中的选项(“直通”)(这些点的参考:[5] 和(可能)[6]

(在 Talk:ECryptfs#Major_restructuring/rewrite 中讨论)

符号链接到加密目录中

除了将您的私有目录用作敏感文件和私有数据的存储之外,您还可以使用它来保护应用程序数据。 例如,Firefox 具有内置的密码管理器,但浏览历史记录和缓存也可能很敏感。 保护它们很容易

$ mv ~/.mozilla ~/Private/mozilla
$ ln -s ~/Private/mozilla ~/.mozilla

移除加密

如果您想移除您的私有目录,则无需特殊步骤。 确保它已卸载,并删除相应的下层目录(例如 ~/.Private/)以及所有加密文件。 在删除 ~/.ecryptfs/ 中的相关加密签名和配置后,一切都将消失。

如果您正在使用 #Ubuntu 工具 设置单目录加密,您可以直接按照以下步骤进行操作

$ ecryptfs-setup-private --undo

并按照说明进行操作。

备份

如果您想将文件移出私有目录,只需在 ~/Private/ 挂载时将其移动到新目标位置即可。

使用 eCryptfs,加密元数据存储在文件的标头中。 本文解释的设置变体将包含加密数据的目录与挂载点分开。 未加密的挂载点是完全透明的,可用于备份。 显然,如果必须避免将敏感的未加密数据泄漏到备份中,则必须在自动备份中考虑这一点。

您可以对加密的目录(例如 ~/.Private/)进行备份或增量备份,将其视为任何其他目录。

需要注意的更多要点

  • 如果您使用了 Ubuntu 工具进行 #加密主目录,请注意包含加密文件的下层目录的位置常规用户的 $HOME 之外,位于 /home/.ecryptfs/username/.Private/
  • 应确保将 eCryptfs 设置文件(通常位于 ~/.ecryptfs/ 中)包含在常规备份或单独备份中。
  • 如果您使用特殊的文件系统挂载选项,例如 ecryptfs_xattr,请在恢复完整性时进行额外检查。

已知问题

通过 Mosh 连接时,在远程主机上挂载可能会失败。

这是 Mosh 服务器的 已知问题,该服务器不会保持 eCryptfs /home 目录挂载。

参见

  • eCryptfs - 手册页和项目主页
  • Taylor Hornby 于 2014 年 1 月 22 日对 eCryptfs 的 安全审计
  • Adrian C. (anrxc) 的 eCryptfs 和 $HOME - 包含安装说明和 eCryptfs 用法讨论的文章
  • Chromium 数据保护(2009 年 11 月)- 详细说明 Chromium OS 加密选项的设计文档,包括对其 eCryptfs 用法的解释
  • Michael Halcrow 于 2005 年 5 月编写的 eCryptfs 设计 - 详细说明和讨论 eCryptfs 的原始设计文档