Skip to content

Releases

v1.0.1 —— 界面重做

Choose a tag to compare

@zdx8 zdx8 released this 09 Nov 15:21

界面重做

这一版把界面按 bencho(MIT)的设计语言重写为原生 SwiftUI:纸白/纯黑两套底色、发丝线代替投影、反色胶囊表示选中、液体开关、滚动数字、悬停倾斜与右下角 Toast。
没有引入任何 Web 运行时与第三方依赖,仍是单个原生二进制。

下载

文件 说明
FTPServer-macOS-universal.dmg 通用二进制(Apple Silicon + Intel),打开后把应用拖进「应用程序」
FTPServer-macOS-universal.dmg.sha256 SHA256 校验文件

系统要求:macOS 14.0 或更高。

永久下载链接(始终指向最新版):

https://github.com/zdx8/FTPServer/releases/latest/download/FTPServer-macOS-universal.dmg

本次附件的 SHA256:e98edab0beb34f0f662c4c4d70319142ebe0c1ad6a377b82f1f58cda27301e73

新增与改进

  • 侧边栏改为自绘反色胶囊,选中状态更明确
  • 统计卡数字滚动动画;悬停时 3.5° 轻微倾斜
  • 服务启停改为液体开关(胶囊拉伸后回弹)
  • 操作反馈改为右下角 Toast:复制地址、启停服务、账号增删、配置重载
  • 标题栏与内容区同色,浅色与深色都不再出现色带
  • 日志页:级别筛选改为磁吸分段控件,自动滚动改为开关

修复

  • 液态开关的光标栈失衡,鼠标离开后可能永久停在手形
  • 拖拽开关松手时的回弹闪跳
  • 端口输入框显示成 2,121(千分位)
  • 会话表列宽超订,窗口变窄时数据行与表头错位
  • Toast 遮挡启停按钮,显示期间整窗不可点击
  • 卡片头部右侧胶囊比标题高半行

其它

  • 仓库由 FTPServer-macOS 改名为 FTPServer
  • 发布附件由 zip 改为 DMG,命名统一为 <软件名>-<系统>-<架构>
  • 打包脚本修复 macOS 自带 bash 3.2 下空数组展开报 unbound variable
  • 协议一致性 100/100、Core 自检全部通过

已知边界(未变)

  • 不支持 FTPS(AUTH TLS 返回 502)与 SFTP,仅适合局域网明文传输
  • 口令哈希未做密钥拉伸;ad-hoc 签名,首次打开需右键「打开」

v1.0.0

Choose a tag to compare

@zdx8 zdx8 released this 13 Sep 06:41

首个正式发布

用 Swift 从零实现的原生 macOS FTP 服务端桌面应用。只依赖系统框架,无任何第三方依赖。

下载

文件 说明
FTPServer-macOS-universal.zip 通用二进制,同时支持 Apple Silicon 与 Intel
FTPServer-macOS-universal.zip.sha256 SHA256 校验文件

系统要求:macOS 14.0 或更高。

下载链接固定不变,始终指向最新版本:

https://github.com/zdx8/FTPServer-macOS/releases/latest/download/FTPServer-macOS-universal.zip

⚠️ 首次打开会被系统拦下

本应用使用 ad-hoc(临时)签名,从网络下载后会被 macOS 加上隔离属性,直接双击会提示
「无法验证开发者」或「已损坏」。这不是文件损坏,按下面任一方式即可解除:

  1. 把 FTPServer.app 拖进「应用程序」文件夹,在它上面按住 Control 点按(或右键)→ 选择「打开」,
    在弹窗中再点一次「打开」。之后即可正常双击启动。
  2. 打开终端执行:
    xattr -dr com.apple.quarantine /Applications/FTPServer.app
  3. 从源码自行构建,完全绕开签名问题(见文末)。

压缩包内附有同一份说明(使用前请先阅读.txt)。

校验下载

shasum -a 256 -c FTPServer-macOS-universal.zip.sha256

本次附件的 SHA256:

fbf449409564142f1439d649822650f0c1e00c7aa9fa34f979fce585e88214a3

功能

  • 协议:RFC 959 控制连接状态机,覆盖 40 余条命令;RFC 3659 结构化列举(MLSD / MLST,含 perm 事实);RFC 2428 扩展被动模式(EPSV / EPSV ALL)
  • 数据通道:被动(PASV / EPSV)与主动(PORT)双模式,PORT 施加回连地址校验以阻断 FTP bounce 攻击
  • 传输:二进制与 ASCII 双向转换(分块边界不错切 CR/LF)、REST 断点续传、APPE 追加写
  • 认证:匿名访问(可单独开关与授权)+ 多账号(每账号独立根目录与四项权限位)
  • 界面:SwiftUI 五区侧边栏、实时速率曲线、分级日志、菜单栏常驻、浅色/深色/跟随系统三态主题
  • 命令行:同一份二进制自带 --headless 模式,可被脚本或 launchd 驱动

安全模型

  • 越出根目录的 .. 是明确拒绝(550),而非静默钳制到根目录
  • 读、写、删、改名四条路径均做符号链接解析后的包含性校验;写入路径额外校验目标自身,
    阻断经共享目录内软链接写到范围之外(该缺陷在 1.0.0 开发期被发现并修复)
  • 口令加盐 SHA256 + 恒定时间比较;登录失败不区分「账号不存在」与「口令错误」,避免账号枚举
  • 日志中 PASS / ACCT 参数一律打码

测试

  • 协议一致性 100/100 通过(Python ftplib 真实客户端)
  • Core 层自检与界面层端到端测试全部通过
  • 本附件已实测:解压 → 启动 → 下载 → 上传 512 KB 哈希一致 → 建目录 → 删除,
    并确认软链接写入防护在发布版中生效

使用前须知

  • 访达无法连接:macOS 自 10.13 起已移除 FTP 支持。请使用 Cyberduck / FileZilla / Transmit,
    或命令行 curl ftp://127.0.0.1:2121/
  • 默认端口 2121 而非 21 —— 21 端口需要 root 权限,刻意避开以便双击即用
  • 首次启动自动创建 ~/FTP Share(共享根目录)与 ~/FTP Share/Public(匿名只读)

已知边界

  • 不支持 FTPS(AUTH TLS 返回 502)与 SFTP,当前仅适合局域网内的明文传输场景
  • 未实现 STOU / REIN / SMNT / SITE,统一返回 502
  • 无速率限制、无磁盘配额、无目录级 ACL(权限粒度是账号级的四个开关)
  • 口令哈希未做密钥拉伸(无 PBKDF2 / scrypt)。若要暴露到公网,建议先引入 KDF 并启用加密传输

从源码构建

git clone https://github.com/zdx8/FTPServer-macOS.git
cd FTPServer-macOS
swift build -c release --disable-sandbox
bash Scripts/package_app.sh      # 生成 dist/FTPServer.app
bash Scripts/make_release.sh     # 生成含通用二进制的发布压缩包

官网:https://zdx8.github.io/FTPServer-macOS/
完整文档:见 README