EncFSGui:macOS加密文件系统的图形化利器

EncFSGui是基于encfs和OSXFuse开发的macOS图形化加密工具,提供直观的文件夹加密管理功能。文章详细介绍了其技术架构、安装步骤及使用指南,涵盖C++开发、依赖管理、密钥链集成等核心技术实现。

引言

三周前,我曾发表过一篇关于加密工具的吐槽文章,特别针对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命令行工具。安装完成后执行:

1
2
3
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
sudo chown -R $(whoami) /usr/local/lib
brew doctor

2. 安装osxfuse

访问https://sourceforge.net/projects/osxfuse/files/ 下载最新版本(当前2.x分支为2.8.3),双击安装包完成安装。

3. 安装encfs

通过Homebrew安装:

1
2
3
4
5
6
brew update
sudo chown -R $USER:admin /usr/local/include
sudo chown -R $USER:admin /usr/local/lib/pkgconfig
brew link xz libtool boost rlog
brew doctor
brew install homebrew/fuse/encfs

验证安装: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密码,未挂载卷可修改卷名和挂载点
  • 浏览功能:快速访问已挂载卷的明文版本

常见问题

  1. 密码安全性:密码通过expect脚本传递,敏感用户建议直接使用encfs命令行工具
  2. 卸载失败:因依赖系统umount命令,可能存在已知卸载问题(参考osxfuse文档)
  3. 功能扩展:未来可能添加更多osxfuse挂载选项
  4. 技术争议:接受代码改进建议(详见GitHub仓库)

参与贡献

欢迎通过GitHub参与开发,请创建新分支提交PR(勿包含dmg文件)。仓库包含完整的开发环境配置说明。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计