Releases: zdx8/FTPServer-macOS
Releases · zdx8/FTPServer-macOS
Release list
v1.0.0
首个正式发布
用 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 加上隔离属性,直接双击会提示
「无法验证开发者」或「已损坏」。这不是文件损坏,按下面任一方式即可解除:
- 把
FTPServer.app拖进「应用程序」文件夹,在它上面按住 Control 点按(或右键)→ 选择「打开」,
在弹窗中再点一次「打开」。之后即可正常双击启动。 - 打开终端执行:
xattr -dr com.apple.quarantine /Applications/FTPServer.app
- 从源码自行构建,完全绕开签名问题(见文末)。
压缩包内附有同一份说明(使用前请先阅读.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 # 生成含通用二进制的发布压缩包