引言
三周前,我曾发表过一篇关于加密工具的吐槽文章,特别针对macOS平台缺乏用户友好的点击式文件加密工具。我列出了个人对这类工具的功能和技术标准,但行业似乎对这些标准有不同的看法。事实上,过去唯一符合我所有标准的工具(BoxCryptor Classic)已不再支持当前操作系统版本,取而代之的是基于不同技术的工具,移除了我认为值得付费的核心功能。
我在推特上多次提及这些困扰,但遗憾的是没有获得任何解决方案。至少没有人指出我的标准列表毫无意义……但鉴于整体缺乏反馈,我不确定这意味着什么。
无论如何,自从2015年12月决定重新学习C++后,我认为自己编写一个易于使用、功能完备且兼容常用系统(主要是macOS Yosemite和El Capitan)的工具会是个有趣的挑战。
今天,我正式推出EncFSGui项目。项目仓库位于https://github.com/corelan/EncFSGui,包含源代码、Makefile和编译后的二进制文件。本项目开源但不免费(至少对我而言不免费,我在开发过程中不得不在工作、家庭和其他娱乐活动之间做出取舍)。没有免费的午餐,欢迎捐赠(我本可以在App Store上销售此应用,可能花费的精力相同)。
什么是EncFSGui?
EncFSGui是基于C++开发的macOS应用程序,使用wxWidgets框架构建图形界面。该工具依赖系统中已有的二进制工具,通过传递参数调用这些工具并处理输出结果,本质上是一个封装器。它不直接实现加密或文件系统功能,而是依赖两个默认未预装的工具:encfs和OSXFuse,同时使用mount、umount和expect等标准工具。为减少依赖,EncFSGui静态链接了wxWidgets和libcurl。
对于不熟悉encfs和osxfuse的用户:
- encfs是基于Fuse的免费加密文件系统,采用文件级加密技术,可透明加密/解密单个文件。当单个文件修改时,仅该文件会被同步更新,适合云同步场景。它通过osxfuse将加密文件夹挂载为明文卷,方便用户直接操作。
- osxfuse是"用户空间文件系统"的macOS实现,允许非特权用户创建自定义文件系统,被encfs用于提供解密版本的文件系统功能。osxfuse是已停止维护的MacFUSE的继任者,更多信息可见https://osxfuse.github.io/
由于EncFSGui不直接提供加密功能,启动/关闭工具不会影响加密文件夹的挂载状态。虽然封装器的实现方式不够硬核,但相比BoxCryptor Classic和EncFSMP等工具具有重要优势:无需持续运行应用即可保持卷挂载状态。
安装指南
当前在macOS系统运行EncFSGui需要四个步骤(未来将尝试简化为一步):
1. 安装Homebrew
使用Homebrew作为包管理器。若未安装gcc编译器,运行gcc
命令时会提示安装Xcode命令行工具。安装完成后执行:
|
|
2. 安装osxfuse
访问https://sourceforge.net/projects/osxfuse/files/ 下载最新版本(当前2.x分支为2.8.3),双击安装包完成安装。
3. 安装encfs
通过Homebrew安装:
|
|
验证安装:encfs --version
应返回版本信息。
4. 安装EncFSGui
从https://github.com/corelan/EncFSGui/raw/master/release/EncFSGUI.dmg 下载镜像文件,将应用拖入Applications文件夹。由于未经过苹果官方认证,需在系统偏好设置的"安全性与隐私"中手动授权运行。
技术细节
EncFSGui是独立二进制文件,配置存储在~/Library/Preferences/encfsgui Preferences
的INI格式文件中。运行时可能创建临时expect脚本(路径为/var/folders//Tcreateencfs.exp
)处理密码交互。工具不支持包含引号的密码,会自动过滤卷名中的特殊字符。
启动时通过解析mount
命令输出检测已挂载卷,运行期间在对象数组中维护挂载状态。虽然可移植到Linux系统,但当前包含macOS特定路径硬编码(如~/Library/Preferences
)。
启用"开机启动"选项时(默认关闭),会在~/Library/LaunchAgents
创建plist文件,禁用时自动移除。
使用指南
图形界面
首次启动显示主窗口和任务栏图标。状态栏显示已配置卷数量,右侧显示encfs信息。若未检测到encfs路径(默认/usr/local/bin/encfs
),除设置和退出外所有按钮将被禁用。
设置选项
- 二进制路径:可修改encfs等工具的绝对路径(未来版本将简化此设置)
- 启动选项:用户登录时启动、任务栏图标模式启动
- 退出选项:关闭时自动卸载卷(可逐卷覆盖)、禁用退出确认
- 更新检查:启动时自动检测更新(当前默认关闭)
创建加密文件夹
需要指定两个空文件夹:加密源文件夹和挂载点(明文访问位置)。卷名必须唯一且不含特殊字符。提供三种加密强度预设(可自定义),支持文件名编码机制(Stream/Block/Null等)。密码通过Keychain存储(条目名为EncFSGUI_<卷名>
),支持开机自动挂载和退出时保持挂载选项。
创建过程生成expect脚本并验证.encfs6.xml
配置文件。成功后卷被添加至列表但未挂载。
卷管理
- 挂载/卸载:通过主界面按钮或任务栏菜单操作,最多尝试5次密码验证
- 现有卷添加:通过验证
.encfs6.xml
文件添加已有encfs文件夹 - 编辑功能:已挂载卷可更新Keychain密码,未挂载卷可修改卷名和挂载点
- 浏览功能:快速访问已挂载卷的明文版本
常见问题
- 密码安全性:密码通过expect脚本传递,敏感用户建议直接使用encfs命令行工具
- 卸载失败:因依赖系统umount命令,可能存在已知卸载问题(参考osxfuse文档)
- 功能扩展:未来可能添加更多osxfuse挂载选项
- 技术争议:接受代码改进建议(详见GitHub仓库)
参与贡献
欢迎通过GitHub参与开发,请创建新分支提交PR(勿包含dmg文件)。仓库包含完整的开发环境配置说明。