介绍
apache-ftpserver是apache提供的开源ftp服务器
Mina
Apache FTPServer(也称为 Apache Mina FTPServer)是基于 Apache Mina(一个高性能的 Java NIO 框架)构建的 FTP/FTPS 服务器,具有高度的可扩展性和定制性。
特性
| 特性 | 描述 |
|---|---|
| 协议支持 | 支持标准 FTP、FTPS(SSL/TLS 加密)、SFTP(需额外扩展) |
| 认证机制 | 支持匿名访问、文件/数据库/LDAP 认证、自定义认证插件 |
| 文件系统 | 支持本地文件系统、虚拟文件系统、内存文件系统 |
| 权限控制 | 细粒度的用户权限管理(上传/下载/删除/列表等) |
| 扩展性 | 模块化设计,支持自定义命令、事件监听器、拦截器 |
| 平台兼容 | 跨平台运行(Windows/Linux/macOS),支持 Java 8+ |
| 管理功能 | 支持远程管理、日志记录、连接限制、带宽控制 |
架构组成
- 核心模块:
ftpserver-core- 提供 FTP 协议处理和服务器核心功能 - 文件系统模块:
ftpserver-filesystem- 提供文件系统抽象和实现 - 认证模块:
ftpserver-auth- 提供认证机制和用户管理 - 扩展模块:
ftpserver-extensions- 提供 SFTP、数据库集成等扩展功能
下载
https://mina.apache.org/ftpserver-project/download_1_2.html
使用
1、解压后随意放在一个目录,比如D盘根目录,该软件主目录大概就是D:\apache-ftpserver-1.0.3;
2、dos命令,进入主目录,执行 "bin/ftpd.bat" res/conf/ftpd-typical.xml,注意 bin/ftpd.bat 要加双引号,这样就 启动了一个可以使用的ftp服务器,其端口号为 2121,支持 admin 和 anonymous 两个用户。
服务器配置
ftpd-typical.xml
服务器配置在 ftpd-typical.xml 文件中
配置说
<server xmlns="http://mina.apache.org/ftpserver/spring/v1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://mina.apache.org/ftpserver/spring/v1 https://mina.apache.org/ftpserver-project/ftpserver-1.0.xsd
"
id="myServer"
max-logins="50"
anon-enabled="true"
max-anon-logins="50"
max-login-failures="3"
login-failure-delay="30000"
>
<!-- id 设置server的标志符,必须 -->
<!-- max-logins 设置同时登陆的最大人数 -->
<!-- anon-enabled="false" 设置匿名登陆为不允许 -->
<!-- max-anon-logins 设置匿名登陆用户为允许数量 -->
<!-- max-login-failures 设置3次失败登陆后,关闭此链接 -->
<!-- login-failure-delay 设置失败登陆后下一次登陆所需的时间间隔,防止暴力破解,单位是微秒 -->
<listeners>
<nio-listener name="default" port="2121">
<ssl>
<keystore file="./res/ftpserver.jks" password="password" />
</ssl>
<data-connection idle-timeout="60" /><!-- 设置多少时间后关闭一个闲置的链接,单位是秒 -->
</nio-listener>
</listeners>
<!-- 设置用户登陆配置文件路径,“encrypt-passwords=‘clear’”设置密码加密方式,默认是“MD5”,设置成“clear”表示不加密,直接输入-->
<file-user-manager file="./res/conf/users.properties" encrypt-passwords="clear"/>
</server>
参考:https://blog.csdn.net/dapao123456789/article/details/45311941
用户密码为明文
在 ftpd-typical.xml 文件中将
<file-user-manager file="./res/conf/users.properties"/>
改为
<file-user-manager file="./res/conf/users.properties" encrypt-passwords="clear"/>
让外网能够访问
需要用 ### 让外网能够访问
需要用被动模式,配置如下:
<listeners>
<nio-listener name="default" port="2121">
<ssl>
<keystore file="./res/ftpserver.jks" password="password" />
</ssl>
<data-connection idle-timeout="60">
<!-- 设置被动链接配置,端口设置为“2122-2140” -->
<!-- address="0.0.0.0",本机ip -->
<!-- 扩展地址为“59.110.152.54”,当需要访问的服务器返回外网地址时使用 -->
<passive ports="2122-2140" address="0.0.0.0" external-address="59.110.152.54" />
</data-connection>
</nio-listener>
</listeners>
ports:是被动模式数据传输端口范围,注意防火墙要让其访问
address:外网ip,配置如下:
<listeners>
<nio-listener name="default" port="2121">
<ssl>
<keystore file="./res/ftpserver.jks" password="password" />
</ssl>
<data-connection idle-timeout="60">
<passive ports="2122-2140" external-address="59.110.152.54" />
</data-connection>
</nio-listener>
</listeners>
ports:是被动模式数据传输端口范围,注意防火墙要让其访问
address:外网ip
用户操作
user.properties 配置文件
查看 ftpd-typical.xml 发现用户配置信息出自同目录下的user.properties。该文件定义了用户的相关属性,除了密码属性外,其余的都可以手动修改。
用户配置信息在同目录下的 user.properties 文件中
#密码为空
tpserver.user.anonymous.userpassword=
#主目录
ftpserver.user.anonymous.homedirectory=./res/home
#当前用户可用
ftpserver.user.anonymous.enableflag=true
#具有上传权限
ftpserver.user.anonymous.writepermission=true
#最大登陆用户数为20
ftpserver.user.anonymous.maxloginnumber=20
#同IP登陆用户数为2
ftpserver.user.anonymous.maxloginperip=2
#空闲时间为300秒
ftpserver.user.anonymous.idletime=300
#上传速率限制为48字节每秒
ftpserver.user.anonymous.uploadrate=4800
#下载速率限制为48字节每秒
ftpserver.user.anonymous.downloadrate=4800
删除用户
将 user.properties 配置中的 enableflag 设置为 false 或者直接删除该用户的所有配置既可
修改用户
可以直接编辑 user.properties 文件,如果需要修改密码,可以先删除用户,再新建一个同名用户。