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 添加到你的系统中,并开始保护你的数据。
6 条评论