EncFSGui – macOS上的EncFS图形界面封装工具
引言
三周前,我发表了一篇关于加密工具的抱怨,特别针对macOS上缺乏点即用、用户友好的基于加密的文件保护工具。我列出了个人功能和技术标准,并得出结论:行业似乎对这些标准有不同的看法。事实上,过去唯一满足我所有标准的工具(BoxCryptor Classic)不再支持当前操作系统版本,并被基于不同技术的工具取代,移除了我认为足够重要以至于值得付费的功能。
我多次在推特上提及我的抱怨,但遗憾的是没有收到任何解决方案。至少没有人指出我的标准列表毫无意义……但鉴于整体缺乏反馈,我不确定这是否意味着什么。
无论如何,由于我决定在2015年12月重新开始学习C++,我认为自己编写一个易于使用、实现所需功能并在我使用的系统(主要是macOS Yosemite和El Capitan)上运行的工具会是一个有趣的挑战。
今天,我准备介绍EncFSGui项目。您可以在https://github.com/corelan/EncFSGui找到项目仓库。仓库包含源代码、Makefile和编译后的二进制文件。它是开源的,但不是免费的。(至少,对我来说不是免费的。我花了很多时间编写这个应用程序,这需要我在工作、家庭和其他有趣的事情之间做出选择。)总之,没有免费的午餐。捐赠总是受欢迎的。(我本可以在App Store上出售这个应用程序……可能对我来说工作量相同。)
是什么?
EncFSGui是一个用C++编写的macOS应用程序。它依赖wxWidgets框架来实现GUI方面。EncFSGui依赖于系统中某些二进制文件/工具的存在,并简单地启动这些工具并传递必要的参数,捕获和处理输出。换句话说,它是一个封装器。它本身不实现加密,也不实现文件系统的创建,而是依赖于两个默认不在macOS上的工具:encfs和OSXFuse。此外,它使用标准工具如“mount”、“umount”和“expect”。为了限制您需要自行安装的依赖项数量,EncFSGui静态链接了wxWidgets和libcurl。
对于那些不熟悉encfs和osxfuse的人: encfs是一个基于Fuse的免费加密文件系统。它是基于文件的,这意味着它会透明地加密/解密单个文件。换句话说,如果对单个文件进行了更改,只有该文件会被更改。如果这个encfs加密文件夹同步到云端,只有更改的文件需要更新。它使用一个任意配置为“encfs”加密源文件夹的文件夹,并使用osxfuse将其挂载为一个您可以使用的明文版本。这个明文版本的行为类似于系统上的卷,使其非常易于使用。当encfs和osxfuse安装后,您可以:
- 使用“encfs”创建一个新的encfs加密文件夹
- 通过将其挂载为明文卷来解密encfs加密文件夹
- 与明文版本交互,允许encfs在后台实时加密/解密
- 当您不再需要访问解密/明文版本时,卸载明文卷
osxfuse是“用户空间文件系统”的macOS实现。它允许非特权用户创建自己的文件系统,并被encfs用来在encfs加密文件夹的解密版本中提供实际的文件系统。osxfuse是MacFUSE的继任者,后者不再维护。您可以在https://osxfuse.github.io/上获取更多关于osxfuse的信息。
由于EncFSGui不提供实际的加密或文件系统功能,您可以启动和停止该工具,而不会改变加密文件夹的挂载状态。尽管我同意封装器不是构建事物最令人兴奋的硬核方式(因为其功能依赖于它所使用工具的参数和输出),但它比BoxCryptor Classic和EncFSMP等工具有一个重要优势,因为您不需要保持应用程序运行来保持卷挂载。至少,我发现这在某些情况下非常有用。
安装EncFSGui
在macOS系统上运行EncFSGui是一个四步过程。我将尝试找到一种方法将其变为一步过程,同时不失去不需要保持工具运行即可访问挂载的encfs文件夹的优势。无论如何,目前您需要运行下面列出的四个步骤。
记录一下,我只在macOS Yosemite和El Capitan上尝试了这些步骤。我不知道在旧版本的macOS上程序是否会有所不同。
1. 安装Homebrew
我决定使用Homebrew作为包管理器。在安装包之前,您必须安装Homebrew本身。如果您已经安装了,可以跳过此步骤。(只需确保Homebrew是最新的。)
为了能够使用Homebrew并安装包,您需要gcc编译器。在最近版本的macOS上,当您尝试运行“gcc”时,会提示安装Xcode命令行工具。如果不是这种情况,您也可以通过App Store安装Xcode,然后自行安装命令行工具。
因此,首先打开终端(命令提示符)并运行“gcc”。如果您收到消息“clang: error: no input files”,则gcc已正确安装。如果提示安装Xcode命令行工具,请安装。如果您没有安装gcc且没有收到提示,您必须先安装Xcode,然后使用“xcode-select –install”安装命令行工具。
安装gcc后,您可以继续安装Homebrew。从终端命令提示符运行以下命令:
|
|
2. 安装osxfuse
安装osxfuse要简单得多。访问https://sourceforge.net/projects/osxfuse/files/并下载最新版本。在撰写本文时,2.x分支的最新版本是2.8.3。如果您决定运行3.x版本,我不期望会有重大问题,但我自己没有测试过。
无论如何,下载最新版本(.dmg镜像文件)。打开dmg文件并双击“Install OSXFUSE 2.8.pkg”图标。点击完成安装过程,您就完成了。
3. 安装encfs
安装Homebrew后,此步骤就像运行以下命令一样简单。一次只运行一个命令,以确保在需要时可以输入密码。
|
|
要检查encfs是否工作,运行“encfs –version”。您应该得到类似这样的输出:
|
|
4. 安装EncFSGui
要获取EncFSGui的最新副本,请从https://github.com/corelan/EncFSGui/raw/master/release/EncFSGUI.dmg下载镜像文件。
打开dmg文件,只需将“encfsgui.app”图标拖到“Applications”图标上。这将把.app捆绑包复制到您的本地/Applications文件夹。等待复制完成,您就全部设置好了。
如果您打开Launchpad(或查看已安装应用程序列表),您应该看到EncFSGui应用程序。
由于我不是注册的Apple开发者,应用程序需要您的权限才能运行。当尝试启动EncFSGui时,您(很可能)会收到如下警告:
如果您决定信任我的预编译二进制文件(即,如果您不想自己编译源代码),并想覆盖限制,启动“系统偏好设置”实用程序并打开“安全与隐私”面板。
在“通用”窗格中,您会看到一个名为“允许从以下位置下载的应用程序”的部分。在该部分中,您应该看到对encfsgui.app的引用和一个“无论如何打开”按钮。
点击该按钮。您会收到另一个请求确认的对话框。
点击“打开”。就这样。从此时起,您将能够运行此应用程序而无需提示或警告。请记住每次更新EncFSGui应用程序时都要这样做。
注意:如果您不信任我的二进制文件,请务必检查github仓库页面。它包含了如何设置开发环境的所有详细步骤。我甚至提供了Makefile,因此您可以自己编译源代码。可重现的构建FTW。
EncFSGui技术细节
EncFSGui是一个独立的二进制文件。它将配置存储在~/Library/Preferences中,一个名为“encfsgui Preferences”的文件中。该文件由应用程序创建,并包含一个类似纯文本“ini文件”的结构。尽管很容易读取和操作该文件,但强烈建议不要自行更改此文件。
除了这个永久配置文件外,EncFSGui可能会创建一个名为Tcreateencfs.exp的临时文件(存储在/var/folders//
如果expect脚本不包含正确的内容(因为您的encfs二进制文件在输出(问题等)方面与我的不同),可能会导致应用程序挂起。这是反对使用封装器的论点之一。另一方面,由于我自己使用EncFSGui(并且我计划尽可能保持encfs更新),我可能会自己发现问题并尝试修复它们。(是的,我也接受拉取请求。)
EncFSGui不喜欢带有引号或双引号的密码。(它不会从密码字段中过滤它们,我将尝试找到解决方案。)此外,EncFSGui也会拒绝卷名中的空格、引号和双引号。实际上,EncFSGui会在保存新名称之前从卷名字段中删除这些字符。
启动时,EncFSGui将监控“mount”命令的输出以捕获已挂载的卷。如果其中一个卷与应用程序中配置的卷匹配,它将将它们标记为“已挂载”。运行时,EncFSGui在一个对象数组中记住所有配置卷的挂载状态。
尽管为Linux变体编译EncFSGui相当容易,但它确实包含一些硬编码路径(如对~/Library/Preferences和~/Library/LaunchAgents的引用),以及encfs、mount和umount二进制文件的默认路径(可以通过编辑设置覆盖)。无论如何,更新源代码并构建操作系统检查以更通用的方式确定位置应该是可行的。
最后,为了允许EncFSGui在启动时启动(这是一个默认禁用的全局选项),将在~/Library/LaunchAgents下创建一个名为“org.corelan.encfsgui.LaunchAtLogin.plist”的文件。这仅在您启用该选项时发生。当您再次禁用该选项时,该文件将被删除。
使用EncFSGui
GUI
首次启动EncFSGui时,您会看到两件事:GUI本身和一个任务栏图标。GUI将显得相当空,只有4个按钮激活:“创建”、“打开现有”、“设置”和“退出”。
在窗口底部的状态栏中,您将看到在EncFSGui中配置的卷数。在右侧,您将获得encfs特定信息。如果EncFSGUI无法在/usr/local/bin/encfs(应用程序中的默认值)找到encfs,所有GUI按钮将被禁用,除了“设置”和“退出”。您可以通过设置更改encfs路径。
当您点击任务栏图标时,您会得到一个包含以下项目的弹出菜单:
设置
让我们先看看设置。在撰写本文时,当前版本包含以下选项:
这些选项大多是不言自明的。您基本上可以设置/更改一些重要二进制文件的绝对路径。老实说,我可能会保留encfs的路径,但删除mount和umount的路径,因为那些是标准二进制文件(我可以告诉EncFSGui自行找到它们)。这将与目前无法设置“expect”二进制文件完整路径的事实一致。无论如何,这个区域的事情很快就会更新。
接下来,您可以设置一些启动和退出选项:
- 登录时启动encfsgui:这是一个用户特定的设置,将在您登录时导致encfsgui启动。
- 启动encfsgui作为任务栏图标:这允许您在启动应用程序时隐藏GUI(仅在任务栏中显示图标)。您可以使用任务栏图标弹出菜单中的“启动EncFSGui”菜单项再次使GUI可见。
- 关闭应用程序时自动卸载卷:这允许您在关闭应用程序时卸载所有挂载的卷。可能值得提及的是,您可以按卷覆盖此设置。(换句话说,您可以卸载所有卷,除了“受保护”的卷。)
- 退出时不要求确认:如果您是效率狂热者,不喜欢关闭应用程序时的额外“您确定吗”消息,那么这个选项就是您需要的。
- 启动时自动检查更新:尽管此时默认仍禁用,我可能会在未来的版本中默认启用此选项。(一旦大量更改减少一点)
点击“取消”将忽略您所做的任何更改。点击“应用”将保存更改并关闭对话框。
这带我们到应用程序的主要目的:管理加密文件夹。
创建一个新的encfs加密文件夹
创建一个新的encfs文件夹涉及两个空文件夹:
- 一个将被配置为encfs加密文件夹。
- 另一个将被用作挂载点(即加密文件夹的明文/解密版本将被挂载的位置)。这也是您必须与之交互的位置(打开文件、保存文件等)。永远不要直接在加密的encfs文件夹中更改任何文件或文件夹!!
此外,您需要指定一个“卷”名称。这只是一个逻辑名称,但它是一个相当重要的名称:
- 它必须是唯一的
- 当您请求挂载encfs文件夹时,它将用作卷的名称
幸运的是,您可以更改此卷的名称(只要它没有挂载)。不要在此名称中使用空格、引号或双引号。保持简单和相关。
除了指定卷名和两个文件夹位置外,您必须选择一个EncFS配置文件。此配置文件确定将用于此文件夹的加密强度,从而也影响性能。我尝试围绕三个预设做出平衡的决定,但如果您不同意我的选择,您始终可以使用“自定义”配置文件设置自己的偏好。请记住,您之后无法更改这些设置。您可以在encfs手册页中找到关于其中一些设置(及其对安全性与性能的影响)的更多详细信息。
首次打开“创建”功能时,EncFSGui将为您设备填充支持的文件名编码机制。最常见的