环境:centos8.1
安装
1 | yum -y install vsftpd |
配置
1 | # 进入root用户 |
匿名登录
1 | 匿名登录开启 |
启动ftp服务
1 | systemctl start vsftpd.service |
防火墙配置
1 | firewall-cmd --zone=public --add-port=21/tcp --permanent |
selinux配置
基本
- selinux是内核级加强型火墙
- 开启或关闭selinux,需要重启电脑
selinux的状态:
状态 | 解释 |
---|---|
Enforcing | 警告并拒绝 |
Permissive | 警告并允许 |
Disabled | 关闭 |
查看selinux状态
1 | getenforce |
更改selinux的状态
1 | setenforce 1 ##更改selinux的状态为Enforcing |
FTP相关
vsftpd 默认被 SELinux 拦截,会碰到如下问题:
- 226 Transfer done (but failed to open directory).(传输完成,但是打开路径失败)
- 550 Failed to change directory(更改路径失败)
- 553 Could not create file.
- 或者干脆在发送了LIST命令以后,服务器没响应,超时断开。
方法1:降低SELinux安全级别,把enforcing降低到permissive 或disabled
1 | 打开文件 |
方法2:只修改SELinux的FTP相关内容
1 | 查看SELinux中有关FTP的设置状态 |
路径问题
无论匿名用户还是实名用户都要注意可访问目录的权限问题。
匿名FTP的根路径,权限:1
2drwxr-xr-x 3 root root 17 6月 6 05:01 user
drwxr-xr-x 3 root root 19 6月 6 05:01 wlw
配置的最佳实践是将【var/ftp/pub】(/user/wlw/share)目录所有者改为ftp,文件操作仅在share目录进行。
1 | chown ftp:ftp -R /var/ftp/pub |
总言之,
在/etc/vsft pd/vsftpd.conf查看根路径。
默认是/var/ftp/pub【此时将路径写成pub】。
1 | 根目录是/user/wlw |
即在真正调用ftp路径时候,只需要将share
目录作为路径(应该忽略ftp根路径),不需要配/user/wlw/share整个路径。
windows客户端工具
FTP配置后,先使用客户端工具尝试访问成功之后,再使用程序测试。
浏览器
资源管理器
cmd命令
cmd命令的匿名用户名是ftp,密码为空
Java程序
Java中与FTP服务器交互的客户端程序有两种:
- 【推进】使用第三方依赖包commons-net的FTPClient
- 使用JDK自带sun.net.ftp.FtpClient(JDK自带程序存在一些问题)
目前,commons-net的FTPClient使用更为普遍。
安装依赖
1 | <!-- https://mvnrepository.com/artifact/commons-net/commons-net --> |
常用API
初始化
1 | FTPClient ftp = new FTPClient() |
连接/断连
1 | ftp.connect(host, port); |
登录/注销
1 | ftp.login(username, password); |
FTP状态码
1 | int replyCode = ftp.getReplyCode(); |
replyCode含义
代码 | 描述 |
---|---|
FTP服务器: 220 | 链接成功 |
FTP客户端: USER useway | 输入用户名 |
FTP服务器: 331 Please specify the password. | 请输入密码 |
FTP客户端: PASS !@#$%abce | 输入密码 |
FTP服务器: 230 Login successful. | 登录成功 |
FTP客户端: CWD /home/useway | 切换目录 |
FTP服务器: 250 Directory successfully changed. | 目录切换成功 |
FTP客户端: EPSV ALL | 为EPSV被动链接方式 |
FTP服务器: 200 EPSV ALL ok. | OK |
FTP客户端: EPSV | 链接 |
FTP服务器: 229 Entering Extended Passive Mode(62501) | 被动链接端口为62501 |
FTP客户端: LIST | 执行LIST显示文件列表 |
FTP服务器: 150 Here comes the directory listing. | 列表从62501端口被发送 |
FTP服务器: 226 Directory send OK. | 发送完成 |
FTP客户端: QUIT | 退出FTP |
FTP服务器: 221 Goodbye. | 再见 |
属性设置
1 | ftp.setConnectTimeout(60000); |
目录/文件操作
1 | // 切换到目录(是否成功) |
案例
配置文件
1 | performance.ftp.ip=192.168.145.128 |
1 | /** |
1 |
|
参考
Java FTPClient实现文件上传下载
https://blog.csdn.net/qq_36248731/article/details/91038014
JAVA FTPClient FTP简单操作