Skip to content

Releases: zdx8/FTPServer-macOS

Release list

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:

07f49b7c327241a539a1e1b80366cd385d5302049081470ac9d0fc5ce0203aae

功能

  • 协议: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