如何在 Linux 上使用 gocryptfs 加密文件

Gocryptfs 在文件级别进行加密,因此同步操作可以在每个文件上高效工作。
153 位读者喜欢这篇文章。
Filing papers and documents

Gocryptfs 是一个用户空间文件系统 (FUSE) 挂载的文件级加密程序。FUSE 挂载意味着加密文件存储在单个目录树中,该目录树像 USB 密钥一样使用 FUSE 接口挂载。这允许任何用户进行挂载——您无需成为 root 用户。由于 gocryptfs 在文件级别进行加密,因此复制文件的同步操作可以在每个文件上高效工作。这与磁盘级加密形成对比,磁盘级加密将整个磁盘加密为一个大型二进制 blob。

当您在正常模式下使用 gocryptfs 时,您的文件以加密格式存储在磁盘上。但是,当您挂载加密文件时,您可以像访问计算机上的任何其他文件一样,获得对文件的未加密访问权限。这意味着您的所有常规工具和程序都可以使用您的未加密文件。更改、新文件和删除会实时反映在存储在磁盘上的文件的加密版本中。

安装 gocryptfs

Fedora 上安装 gocryptfs 非常容易,因为它已为 Fedora 30 和 Rawhide 打包。因此,sudo dnf install gocryptfs 完成所有必需的安装工作。如果您未使用 Fedora,您可以在 快速入门 中找到从源代码、Debian 或通过 Homebrew 安装的详细信息。

初始化您的加密文件系统

要开始使用,您需要决定将加密文件存储在哪里。此示例将文件保存在 ~/.sekrit_files 中,以便在执行普通 ls 时它们不会显示出来。

首先初始化文件系统。这将要求您选择一个密码。强烈建议您使用一个从未在其他任何地方使用过的唯一密码,因为这是您解锁文件的密钥。项目作者建议使用介于 64 到 128 位熵之间的密码。假设您使用大小写字母和数字,这意味着您的密码应介于 11 到 22 个字符之间。如果您使用密码管理器,则应该很容易使用生成的密码来完成此操作。

当您初始化文件系统时,您将看到一个唯一的密钥。将此密钥安全地存储在某处,因为它允许您在需要恢复文件但忘记密码时访问您的文件。密钥无需密码即可工作,因此请务必保密!

初始化例程如下所示

$ mkdir ~/.sekrit_files
$ gocryptfs -init ~/.sekrit_files
Choose a password for protecting your files.
Password: 
Repeat: 

Your master key is:

    XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-
    XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX

If the gocryptfs.conf file becomes corrupted or you ever forget your password,
there is only one hope for recovery: The master key. Print it to a piece of
paper and store it in a drawer. This message is only printed once.
The gocryptfs filesystem has been created successfully.
You can now mount it using: gocryptfs .sekrit_files MOUNTPOINT

如果您查看 ~/.sekrit_files 目录,您将看到两个文件:一个配置文件和一个唯一的目录级初始化向量。您无需手动编辑这两个文件。请确保不要删除这些文件。

使用您的加密文件系统

要使用您的加密文件系统,您需要挂载它。这需要一个空目录,您可以在其中挂载文件系统。例如,使用 ~/my_files 目录。正如您从初始化中看到的那样,挂载很容易

$ gocryptfs ~/.sekrit_files ~/my_files
Password: 
Decrypting master key
Filesystem mounted and ready.

如果您查看 ~/my_files 目录,您会发现它是空的。配置和初始化向量文件不是数据,因此它们不会显示出来。让我们在文件系统中放入一些数据,看看会发生什么

$ cp /usr/share/dict/words ~/my_files/
$ ls -la ~/my_files/ ~/.sekrit_files/
~/my_files/:
.rw-r--r-- 5.0M bexelbie 19 Jul 17:48 words

~/.sekrit_files/:
.r--------@  402 bexelbie 19 Jul 17:39 gocryptfs.conf
.r--------@   16 bexelbie 19 Jul 17:39 gocryptfs.diriv
.rw-r--r--@ 5.0M bexelbie 19 Jul 17:48 xAQrtlyYSFeCN5w7O3-9zg

请注意,~/.sekrit_files 目录中有一个新文件。这是您复制的字典的加密副本(文件名会有所不同)。您可以随意使用 cat 和其他工具来检查这些文件,并尝试添加、删除和修改文件。请务必使用一些应用程序进行测试,例如 LibreOffice。

请记住,这是一个文件系统挂载,因此 ~/my_files 的内容不会保存到磁盘。您可以通过运行 mount | grep my_files 并观察输出来验证这一点。只有加密文件被写入您的磁盘。FUSE 接口正在对文件进行实时加密和解密,并将它们作为文件系统呈现给您的应用程序和 shell。

卸载文件系统

当您完成文件操作后,您可以卸载它们。这将导致未加密的文件系统不再可用。~/.sekrit_files 中的加密文件不受影响。使用 FUSE 挂载程序 fusermount -u ~/my_files 卸载文件系统。

备份您的数据

gocryptfs 使用文件级加密的一个很酷的好处是,它使备份加密数据更容易。这些文件可以安全地存储在同步系统中,例如 OwnCloud 或 Dropbox。关于不同时修改同一文件的标准免责声明适用。但是,即使文件已挂载,也可以备份文件。您还可以以通常备份文件的任何其他方式保存数据。您不需要任何特殊的东西。

当您进行备份时,请确保包含 gocryptfs.diriv 文件。此文件不是秘密,可以与备份一起保存。但是,您的 gocryptfs.conf 是秘密。当您控制整个备份链(例如使用磁带)时,您可以将其与其余文件一起备份。但是,当文件备份到云端或公开时,您可能希望忽略此文件。理论上,如果有人获得此文件,那么唯一保护您文件的就是您的密码强度。如果您选择了 强密码,这可能就足够了;但是,您需要仔细考虑您的情况。更多详细信息请参见此 gocryptfs 上游问题

奖励:反向模式

gocryptfs 的一个巧妙功能是反向模式功能。在反向模式下,将 gocryptfs 指向您的未加密数据,它将创建一个挂载点,其中包含此数据的加密视图。这对于创建加密备份等事情很有用。这很容易做到

$ gocryptfs -reverse -init my_files
Choose a password for protecting your files.
Password: 
Repeat: 

Your master key is:

    XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX-
    XXXXXXXX-XXXXXXXX-XXXXXXXX-XXXXXXXX

If the gocryptfs.conf file becomes corrupted or you ever forget your password,
there is only one hope for recovery: The master key. Print it to a piece of
paper and store it in a drawer. This message is only printed once.
The gocryptfs-reverse filesystem has been created successfully.
You can now mount it using: gocryptfs -reverse my_files MOUNTPOINT

$ gocryptfs -reverse my_files sekrit_files
Password: 
Decrypting master key
Filesystem mounted and ready.

现在 sekrit_files 包含来自 my_files 的未加密数据的加密视图。这可以备份、共享或根据需要处理。该目录是只读的,因为除了备份这些文件之外,您无法对这些文件进行任何有用的操作。

一个新的文件 .gocryptfs.reverse.conf 已添加到 my_files 中,以提供稳定的加密视图。此配置文件将确保每个反向挂载都将使用相同的加密密钥。这样,例如,您可以仅备份已更改的文件。

Gocryptfs 是一款灵活的文件加密工具,可让您以加密方式存储数据,而无需显着更改您的工作流程或流程。该设计已通过安全审计,并且开发人员在其他系统(例如 encfs)方面拥有经验。我鼓励您立即将 gocryptfs 添加到您的系统中,并开始保护您的数据。

标签
User profile image.
Brian "bex" Exelbierd 是 RHEL 社区业务负责人,致力于通过社区努力为 RHEL 路线图提供信息,并支持操作系统社区。在 Red Hat,Brian 曾担任技术作家、软件工程师、内容策略师、社区架构师,现在担任产品经理。

6 条评论

这太棒了。我一直在使用 LUKS 来做这件事,但这似乎值得一看。

谢谢你的文章!

在我的个人笔记本电脑上,我同时使用了两者。LUKS 保护我的机器,尤其是在关机时。我使用 gocryptfs 加密一些我要备份到云存储空间的文件,以及我的机器设置 Ansible playbook 的文件。这样,当我的配置暴露数据时,它们在存储我的 playbook 的 git 存储库中是安全的。我一直在考虑写一篇关于此事的后续文章...

回复 作者 sethkenlon

我不知道 gocrypts。我会试试看!

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.