前言
端口
使用的端口
控制连接端口(可修改):21
主动模式的数据连接端口(可修改):20
被动模式的数据连接端口(可修改):55536-55567
主动模式和被动模式
FTP支持两种模式,一种方式叫做Standard (也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。
主动模式和被动模式都是通过连接端口进行连接,区别在于数据连接的方式
- 主动模式:服务器主动连接客户端通过20端口。
- 被动模式:客户端连接服务端通过指定的被动模式数据端口。
大部分情况下我们都是使用的被动模式:
因为大多数防火墙和 NAT 设备默认允许客户端发起的出站连接,因此可以更轻松地穿越网络限制,确保数据传输的正常进行。
主动模式如果客户端处于防火墙或 NAT 设备之后,客户端的防火墙可能会阻止来自服务器 20 端口的数据连接请求,导致数据传输失败。
主动模式:
1 | 命令连接:客户端(>1023端口) -> 服务器 21端口 |
被动模式:
1 | 命令连接:客户端(>1023端口) -> 服务器 21端口 |
环境部署
关闭SELINUX
打开配置文件
1 | vi /etc/selinux/config |
修改
1 | #SELINUX=enforcing #注释掉 |
保存
1 | :wq! #保存退出 |
配置立即生效
1 | setenforce 0 #使配置立即生效 |
安装vsftpd
1 | #查询vsftpd是否安装 |
ftp的配置文件主要有三个,位于/etc/vsftpd/
目录下,分别是:
ftpusers
该文件用来指定那些用户不能访问ftp服务器。user_list
该文件用来指示的默认账户在默认情况下也不能访问ftpvsftpd.conf
vsftpd的主配置文件
新建系统用户vsftpd
1 | #用户目录为/data/wwwjarapi, 用户登录终端设为/bin/false(即使之不能登录系统) |
vsftp配置
1 | #备份默认配置文件 |
修改配置文件
1 | vi /etc/vsftpd/vsftpd.conf |
内容如下
1 | anonymous_enable=NO |
使用IPV4
解决服务器发回了不可路由的地址,使用服务器地址代替的问题。
1 | listen=YES |
开启被动模式
1 | #开启被动模式 |
说明
pasv_address 是所在服务器的公网IP。
开启被动模式后主动和被动都是支持的。
端口的开放最好是一个范围,假如只有1端口开放,FTP中设置并发传输的数量也只能是1,否则会报错。
修改主动模式数据端口
如果要使用主动模式并且不能用默认的20端口,可以修改主动的数据端口。
修改主动模式数据端口:
1 | connect_from_port_20=NO |
配置文件说明
1 | anonymous_enable=NO # 设定不允许匿名访问 |
虚拟用户
建立虚拟用户名单文件
1 | touch /etc/vsftpd/virtusers |
编辑虚拟用户名单文件:(单行账号,双行密码,注意:不能使用root做用户名,系统保留)
1 | vi /etc/vsftpd/virtusers |
输入
1 | zhangjian |
保存退出
1 | :wq! |
查看
1 | cat /etc/vsftpd/virtusers |
生成虚拟用户数据文件
1 | rm -rf /etc/vsftpd/virtusers.db |
虚拟用户配置
建立虚拟用户个人Vsftp的配置文件和子账号FTP权限
在user_config_dir
指定的目录下,文件名要和虚拟用户名保持一致。
1 | mkdir /etc/vsftpd/vconf |
输入以下内容
1 | local_root=/data/wwwjarapi/schoolfile/ |
保存退出
1 | :wq! |
认证配置
备份原配置
1 | mv /etc/pam.d/vsftpd /etc/pam.d/vsftpdbak |
添加新配置
1 | vi /etc/pam.d/vsftpd |
加入下面部分
1 | auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers |
注意:如果系统为32位,上面改为lib,否则配置失败
重启vsftpd服务器
1 | systemctl restart vsftpd.service |
日志查看
可通过下面指令,查看服务器安全日志,便于分析错误问题,设置操作效果一定要仔细
1 | tail -f /var/log/secure |
修改端口
打开配置文件
1 | vi /etc/vsftpd/vsftpd.conf |
修改
1 | listen_port=15875 |
重启
1 | systemctl restart vsftpd.service |
开放端口
1 | firewall-cmd --zone=public --add-port=15875/tcp --permanent |
检查开放情况
1 | firewall-cmd --zone=public --list-ports |
开启防火墙ftp端口
默认的ftp服务端口是21。
假如15875端口是ftp服务端口;15876到15896是Vsftpd被动模式需要的端口,可自定义一段大于1024的tcp端口
阿里云服务器记得开放上面的端口
firewall
1 | firewall-cmd --zone=public --add-port=15875/tcp --permanent |
检查开放情况
1 | firewall-cmd --zone=public --list-ports |
如果想移除
1 | firewall-cmd --zone=public --remove-port=15876/tcp --permanent |
iptables
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。
关闭firewall:
1 | systemctl stop firewalld.service #停止firewall |
编辑防火墙配置文件
vi /etc/sysconfig/iptables
1 | -A INPUT -m state --state NEW -m tcp -p tcp --dport 15875 -j ACCEPT |
重启防火墙使配置生效
1 | systemctl restart iptables.service #最后重启防火墙使配置生效 |
客户端
FileZilla
https://filezilla-project.org/index.php
个人最推荐,能设置并发传输的数量,进度会以进度条显示。
WinSCP
https://winscp.net/eng/index.php
能设置并发传输的数量,进度会以百分比显示。
XFTP
https://www.xshell.com/zh/free-for-home-school/
不能设置并发传输的数量,进度会以进度条显示。