FTP服务器,也称为文件传输协议服务器,是一种允许通过网络传输文件的软件应用程序。它为用户提供了一种在远程服务器上上传、下载和管理文件的方法。
在搭建私有化文件服务器时有许多软件可以选型,其中开源FTP服务器选型范围更广,主要优势如下:
- 可定制性:开源FTP服务器允许用户根据自己的特定需求定制和修改代码。这种灵活性使用户能够添加或修改功能,增强安全性并优化性能。
- 透明性:开源FTP服务器提供透明性,因为源代码可免费供审查。这使用户能够了解服务器的功能并验证其安全性和可靠性。
- 社区支持:开源FTP服务器通常拥有活跃的开发人员和用户社区,他们为服务器的开发做出贡献并提供支持。包括帮助解决问题、提供安装和使用方面的指导等。
- 成本效益:开源FTP服务器通常免费使用,无需软件许可费用。这使得它们成为预算有限的个人和组织的经济有效的解决方案。
- 安全性:开源FTP服务器受益于社区的集体知识和专业知识,使其更安全。可以及时识别和解决漏洞,并快速共享和实施安全增强措施。
- 灵活性:开源FTP服务器在平台兼容性和集成方面提供了灵活性。它们可以部署在各种操作系统上,并轻松与其他工具和系统集成。
鉴于开源FTP服务器的优势,本文主要推荐一些较好的开源FTP服务器应用程序。
1.Vsftpd
https://security.appspot.com/vsftpd.html
Vsftpd是各类Linux服务器管理员的首选,它提供了开箱即用的安全性,以及一组功能来配置服务器上的FTP和FTP虚拟用户。
Vsftpd被Red Hat、openSUSE、Debian、FreeBSD、Gnome、KDE使用。下面图表展示的是Vsftpd的性能,在一台机器上通过Vsftpd提供2.6TB的文件服务,在24小时内并发用户数超过1500。
亮点:
- 开源GPL许可
- 与许多Linux服务器发行版兼容
- 具有庞大的用户社区支持
功能特性:
- 虚拟IP配置
- 用户管理功能:创建、管理、删除、虚拟用户
- 支持每用户配置
- 支持带宽限制
- 支持IP源配置
- 支持每IP的限制设置
- 支持IPv6
- 支持SSL
2.Apache FTP-Server
https://mina.apache.org/ftpserver-project/
Apache FTP服务器是一个开源的跨平台FTP服务器,它基于Java开发,可以在Windows服务器上流畅运行,在Linux服务器上也是如此。可以作为独立的服务器运行,也可以嵌入到Java服务器应用程序中运行,因此它为开发人员和系统管理员提供了更多的选择。Apache FTP Server可以与基于Spring的应用程序集成,为Spring开发人员提供支持。 对于独立运行方面,Apache FTP可以作为Windows服务以及Linux服务或Unix/Linux守护进程运行。
亮点:
- 基于java开发
- 支持跨平台
- 可以集成到Java应用程序中
功能特性:
- 基于多线程设计
- 支持虚拟目录
- 用户管理
- 队列管理
- 可恢复的文件上传和下载
- 处理ASCII和二进制数据传输
- IPs管理
- 支持IP禁令
- 事件通知
- 支持Z模式,上传下载速度更快
- 支持隐式/显式 SSL/TLS
- 可自定义的FTP消息
- 通过MDTM内置支持更改文件日期/时间戳
- 支持事件日志记录
3.ProFTP (Linux)
http://www.proftpd.org/
ProFTPd是一个用于Unix/Linux系统的FTP服务器。它易于安装、易于使用、高度可配置。可通过“.ftpaccess”配置文件提供多个虚拟FTP服务器支持,该文件与Apache的“.htaccess”非常类似。
亮点:
- 开源协议GPL
- 模块化设计:许多模块已经为数据库,LDAP服务器,TLS/SSL加密,RADIUS编写。
- 支持多个虚拟FTP服务器
功能特性:
- 类似于Apache的“.htaccess”的目录配置“.ftpaccess”
- 支持匿名FTP
- 配置单个或多个虚拟FTP服务器或匿名FTP服务
- 支持基于Linux文件系统权限的隐藏文件和目录
- 日志
- 支持IPv6
- 过期账户配置
- 可在独立模式下作为非特权用户使用
4.CrossFTP
http://www.crossftp.com/crossftpserver.htm
CrossFTP是一个跨平台的FTP服务器,可在Windows和Unix/ Linux系统上运行。使用Java开发,很容易安装、管理和更新。CrossFTP有一个简单的用户图形操作界面,提供了一个易于配置的设置管理器模块,可以配置连接、IP控制、文件目录、FTP消息等,CrossFTP图形操作界面还提供了日志记录配置选项和服务器使用情况统计信息。
亮点:
- 纯Java应用程序支持多平台
- 高度可配置
- 适用于所有类型用户的命令行和GUI
- 基于Apache v2.0开源协议
- 为高级用户和初学者提供教程
- 丰富的手册和常见问题解答(FAQ)知识库
功能特性:
- 易于安装、管理、维护和更新
- 基于UTF-8的目录编码
- 支持用户虚拟目录
- 支持用户写/读权限配置
- 支持空闲时间配置
- 支持上传/下载限制配置
- 支持匿名登录
- IP管理:过滤、绑定、屏蔽。
- 支持数据库存储或者LDAP存储
- 可自定义的FTP消息
- 支持隐式/显式SSL/TLS
- 支持发现协议
- 支持通过数据时间戳查询文件
- 支持“MODE Z”以加快上传/下载速度
- 支持ASCII和二进制数据传输
5.uFTP (Linux, Unix)
https://www.uftpserver.com/
uFTP是一个开源的、轻量级的、可移植的FTP服务器,采用C语言编写,因此具备较高性能。它主要是为Unix/ Linux(POSIX)的服务器编写的。 另外,uFTP非常易于使用,支持FTP命令行来运行所有FTP服务器功能。它是在MIT许可下发布的,但用户应该知道它包含了由OpenSSL项目开发OpenSSL Toolkit软件,因此在使用的时候建议查看OpenSSL许可。
亮点:
- MIT开源许可
- 轻量级
- 采用C语言写。
- 可移植
- 单个配置文件(uftpd.cfg)
- 兼容所有主要的FTP客户端
- 文档齐全(https://www.uftpserver.com/wiki/opensource-ftp-server)
功能特性:
- 支持FTP命令
- 性能流畅
- 容易安装
- 配置简单
- 易于使用
6.glFTPd (Linux, Unix)
https://glftpd.io/
glFTPd是Unix/ Linux操作系统的开源免费FTP服务器。这是个古老的免费软件,它的第一个版本可以追溯到1998年初,glFTPd代表GreyLine FTP(原始创建者的名字)。glFTPd可以流畅地运行在Unix系统上,如FreeBSD、OpenBSD、Ubuntu等。glFTP支持许多FTP/ site命令,并在chroot环境中运行,这使得它相对安全。
功能特性:
- 在chroot模式下运行
- 虚拟用户管理
- 支持全局或者按用户限制带宽
- 支持TLS/SSL加密
- 上传/下载比率控制
- 用户管理:创建、更新、删除
- IPv6支持
- 允许向用户添加IPv6掩码
- 下载(DL)和上传(UL)使用量统计
- cookie支持
- 支持ECDHE密钥交换,使PFS适用于ECC证书
- 支持显示磁盘空间、使用情况、可用空间、已使用空间
- 在文件列表中隐藏真实的用户名和组名
- 支持“dirlog”缓存
- 支持XCWD、XMKD、XRMD、XPWD、XCUP 等FTP命令
- 支持SSCN命令作为执行SSL FXL的替代方法。
7.ColoradoFTP(Windows, Linux)
https://cftp.coldcore.com
ColoradoFTP是一个基于Java的开源FTP服务器,支持跨平台,可以轻松地在Windows和Linux服务器上运行,能够在最新的JavaVM上流畅运行。ColoradoFTP兼容RFC 959和RFC 3659文件协议。
亮点:
- 基于Java开发,支持在Windows、macOS、Linux、Unix系统上运行
- 嵌入到项目代码中运行
功能特性:
- 支持命令行操作
- 基于xml的配置
- 无限制账户
- 轻松的用户管理
- 支持用户分组
- 权限管理
- 插件支持
- 多种下载和安装选项
8.Waarp
http://waarp.github.io/Waarp/index.html
Waarp是一个开源Web服务器,它提供多种协议(HTTP、FTP、FTPS、SSH、SFTP)和多种专有协议,是一个功能齐全的服务器。Waarp支持开发人员在项目中进行自定义开发,可以构建自定义FTP服务器。Waarp的团队发布了WaarpGatewayFTP,这是一个强大的FTP服务器,正是构建在WaarpFTP之上。
亮点:
- LGPL开源协议。
- 支持多种协议
- 提供开发API
功能特性:
- 配置简单
- 支持FTP、FTPS和SFTP
- 多种身份验证选项(包括:基于文件、数据库、LDAP)
- 支持命令前/命令后活动
- 支持记录仪
- 远程文件MD5、SHA-1计算
- 允许关闭远程服务器
- [WaarpGatewayFtp]:支持通过扩展的SITE命令动态更改身份验证的能力
- [WaarpGatewayFtp]:指定要在(RETR)之前或之后(类似STOR的操作)执行的显式命令的能力
- 提供基于HTTPS的管理界面
- 为每个用户指定命令行能力
- 支持在数据库中保存传输日志
- 支持限制CPU或连接数量
9.FileZilla FTP Server
https://filezilla-project.org/
FileZilla是一个开源的免费FTP客户端和服务器,FileZilla Server可以在Windows上运行,支持Windows 7,8,8.1和10等版本的32和64位,FileZilla客户端则支持多平台。FileZilla已经存在多年,它与许多商业付费软件竞争。
亮点:
- 仅适用于Windows。
- 支持32位和64位。
- 易于最终用户安装和使用
- 适合用于家庭服务器、小型公司或者个人使用
- 多协议支持
功能特性:
- 提供简单的UI以支持快速安装
- 提供配置管理器
- 支持自定义端口
- 提供用户管理器
- 支持速度限制
- 通过易于使用的管理器支持被动模式
- TLS/SSL支持
- IP过滤器和管理器
- 每用户的连接限制
- 共享文件夹管理器
- 支持文件传输压缩
- 文件夹/目录权限设置选项
- 可控制线程数
- 网络连接、无传输、登录等方面的超时设置
- 支持在另一台机器上远程共享文件夹
- 支持匿名用户登录
10.DrFTPD
http://drftpd.org/
DrFTP是一个用Java开发的分布式FTP服务器,它可以在Windows以及Linux/Unix 服务器上运行。它使用主从架构来提供更好的文件传输效率和安全性能。可以用通过分布式FTP守护进程来创建一个FTP网格或多FTP网点。
亮点:
- 免费
- 插件
- 使用主从概念来控制文件传输
- 支持大多数流行的FTP客户端
功能特性:
- 没有root/管理员权限的网络服务器。
- 支持被动(PASV)模式
- 基于缓存校验的内存文件列表。
- 支持插件功能
- 提供监控插件
- 根据用户带宽选择从机。
- 在从机之间传输文件。
- 试用账户选项
11.Python FTP(Star 1.6k)
https://github.com/giampaolo/pyftpdlib
Python FTP服务器库提供了一个高级的可移植接口,可以轻松地使用Python编写非常高效、可扩展的、异步的FTP服务器。
12.SFTPGo(Star 7K)
https://github.com/drakkan/sftpgo
SFTPGo是一个多功能的文件传输服务器,支持各种存储后端,虚拟文件夹,自定义命令和钩子,多种身份验证方法,LDAP/Active Directory集成,配额支持,带宽限制,速率限制,IP过滤器,shell模式过滤器,空闲连接终止,阻止用户列表管理,Geo-IP过滤,Git存储库,SCP,rsync,FTP/S,WebDAV。
它还支持TLS证书的ACME协议,双向TLS身份验证,Prometheus指标,HAProxy PROXY协议,从Linux系统用户帐户轻松迁移,可移植模式,SFTP子系统模式,性能分析,灵活的配置格式,准确的日志文件,插件系统和Terraform提供程序的基础设施即代码(IaC)支持。
13.LightFTP
https://github.com/hfiref0x/LightFTP
LightFTP是一个基于BSD-2-Clause License协议的轻量级开源FTP服务器。
14.Golang FTP Server
https://github.com/fclairamb/ftpserver
这个FTP服务器是老式FTP设备和现代云文件系统之间的网关,使用afero(https://github.com/spf13/afero)的Fs接口,并作为ftpserverlib(https://github.com/fclairamb/ftpserverlib)的参考实现。
15.Portable FTP server
https://github.com/FubarDevelopment/FtpServer
这个FTP服务器被编写为.NET标准2.0库,并有一个抽象的文件系统。
16.uftpd(Star 164)
https://github.com/troglobit/uftpd
uftpd是一个UNIX守护进程,有默认的常规内置配置项。
功能特性:
- 支持FTP和/或TFTP
- 没有复杂的配置文件
- 可以在标准UNIX inetd运行或单独运行
- 根据/etc/passwd或自定义路径,使用ftp用户的$HOME
- 使用ftp/tcp中的tftp/udp和/etc/services或自定义端口
- 权限分离,解除绑定到端口的根权限
- 可以在FTP主目录之外使用符号链接
- 可以按照用户组分配可写FTP主目录
17.MinimalFTP Server(Star 144)
https://github.com/Guichaguri/MinimalFTP
这是一个轻量级的、简单的FTP服务器。纯Java开发,没有其他底层库依赖。
主要特征包括:
- Although it's named "minimal", it supports a bunch of features:虽然它被命名为“minimal”,但它支持一系列功能:
- 100% Java开发
- 轻量级
- 支持57个FTP命令
- 支持TLS/SSL
- 支持自定义文件系统
- 支持自定义用户身份验证
- 支持自定义命令
- 支持某些FTP客户端可能仍然使用的过时的命令
18.ftpd
https://github.com/goftp/ftpd
这是一个基于github.com/goftp/server的开源FTP服务器。但这个项目目前已经没有在维护。
19.SimpleFTPServer
https://github.com/xreef/SimpleFTPServer
这是一个简单小巧的FTP服务器,可以安装在Arduino、ArduinoSAMD WiFiNINA、esp8266、esp32、stm32或者树莓派上。
20.Portable FTP server
https://github.com/dubasdey/portable-ftp-server
这是一个Java开发的开源的跨平台便携式FTP服务器,适用于Windows、Linux Mac等系统。支持命令行模式或GUI模式。
21.Open TFTP Server
https://sourceforge.net/projects/tftp-server/
这是一个免费的多线程TFTP服务器,支持Windows/Unix的PXEBOOT,支持硬件加载,支持tsize、blksize,大型文件的块号滚动,可以作为服务独立运行。
主要特征包括:
- 支持几乎所有行业标准
- 总大小(tsize)、数据块大小、间隔时间、数据块滚动
- 支持进程所有者权限,而不是root。
- 支持扩展日志记录、历史日志记录
- 可以指定服务器接口和端口
- 支持端口区间
- 支持线程池
- 支持Unix守护进程或Windows服务
- 对系统的影响非常小
22.bftpd
https://sourceforge.net/projects/bftpd/
bftpd是一个基于Unix系统的FTP服务器。它支持inetd和独立运行模式,支持大多数RFC FTP命令,并且非常容易配置。
23.Java FTP服务器
https://sourceforge.net/projects/pj-ftp-server/
这是一个免费开源的纯Java FTP服务器。
主要功能特点包括:多线程、多平台、高速、支持GUI和CMD模式、IP过滤、读/写支持、接口选择、限速配置、匿名模式、TCP端口选择、文件夹选择、日志记录和登录限制等。
24.FtpServer Library .Net
https://github.com/taoyouh/FtpServer
这是一个可以用于.NET Core的FTP服务器程序以及用于自定义开发的.NET标准核心库。
25.UniFTP
https://github.com/UlyssesWu/UniFTP
UniFTP是一个用C#编写的FTP服务器库。
26.ZeptoServer
https://github.com/junk-machine/ZeptoServer
ZeptoServer是一个极简的轻量级FTP服务器,具备强大功能和灵活性。
关键特性是高效和安全。另外,其采用模块化设计,可以轻松扩展任何文本协议。这意味着无论您需要HTTP、SMTP或任何其他基于文本的协议的服务器,ZeptoServer都可以轻松搞定。
ZeptoServer的另一个优势是它在托管选项方面的功能非常丰富。它可以作为一个独立的服务器托管,同时也提供了在进程中托管的选项。还可以利用ServerHost项目中的ZeptoServer类,您可以无缝地将ZeptoServer直接集成到现有的应用程序中。
27.SmallHTTP Server
https://sourceforge.net/projects/smallsrv/
SmallHTTP Server是一个小型的、开源的、免费的HTTP服务器,提供了邮件、DNS、FTP和代理服务器等一系列功能。
它提供了CGI脚本、服务器端、虚拟主机和目录服务等。另外它还提供详细的数据统计、Web管理、本地管理、IPv6和SSL/TLS支持,GZip压缩和HTTP TLS VPN服务器。