FTP(File Transfer Protocol),即文件传输协议,是基于TCP/IP协议簇的应用层协议之一。它的主要功能是文件的传输。FTP也是一个C/S架构。数据传输格式主要以二进制和文本为主。客户端可通过资源管理器或者命令行访问ftp服务器。FTP部署简单、访问起来也简单。
一、FTP通信方式
FTP采用的是双通道协议,就是客户端和服务器完成文件的传输需要双方开启两个端口,一个通道用于传输命令,一个通道用于传输数据。在服务器端口21通常用来传送命令等控制信息,20端口用来传送数据。
FTP有两种模式(站在服务器角度),分别为主动(PORT)模式和被动(PASV)模式。
(1).主动模式
在主动模式下,服务器向客户端传输数据。整个过程为:客户端的随机端口向服务器的21端口发送连接命令,完成三次握手之后服务器开启数据传送端口20,主动向客户端数据传送端口发送连接请求。而客户端数据传送端口的端口号,在建立命令通道后客户端向服务端就告知给了服务器。
(2).被动模式
在被动模式下,客户端向服务器传输数据。整个过程为:客户端的随机端口向服务器的21端口发送连接命令,完成三次握手之后服务器通过命令通道将自己的数据传送端口号发给客户端,而后等待客户端数据传送端口发送连接请求。

而服务器的数据传输端口号的格式为: ip,端口高字节,端口低字节
例如 在被动模式下, 172,16,0,1,224,59 ,服务器的数据端口号就为 224*256+59
注意:主动模式和被动模式都有自己的特点。在主动模式下,服务器向客户端数据要考虑客户端防火墙问题。在被动模式下,要考虑服务器的防火墙问题,企业服务器通常是用硬件防火墙,可以利用防火墙的连接跟踪功能,可以通过分析得出客户端和服务器在命令通道中的数据传输端口号。
二、构建FTP服务器(Linux 环境 CentOs)
(1) 登录root,服务器安装FTP
yum -y install vsftpd
(2) 服务器启停FTP服务
service vsftpd start #启动
systemctl start vsftpd.service #启动
systemctl stop vsftpd.service #关闭
systemctl restart vsftpd.service #重启
systemctl enable vsftpd.service #开机自启
(3).检查服务连接情况
ss -ntl #获取 socket 统计信息
可以看见21端口已经开启
(4)修改FTP的配置文件:在/etc/ 目录下,通常是/etc/vsftpd/vsftpd.conf
具体常用配置信息见目录三。
(5)在root下建立ftp专属用户
#新增用户
useradd -d /home/ftpusr ftpusr
#为ftp用户设置密码
passwd ftpuser
#设置拥有文件权限
chown -R ftpuser:ftpuser /home/ftpuser
#建立用户组
groupadd application
#向组内加入用户
usermod -a ftpuser -G application
(6) 设置目录权限
setfacl -m u:ftp:rwx /var/ftp/pub/
三、vsftpd.conf常见配置。
/etc/vsftpd/vsftpd.conf配置信息
| 说明 | 配置 | 示例/备注 |
| 修改命令端口,默认21 | listen_port=2121 | ftp 10.0.0.8 2121 |
| 修改主动模式端口,默认为20 | ftp_data_port=20 | |
| 修改被动模式端口区间底 | pasv_min_port | |
| 修改被动模式端口区间顶 | pasv_max_port | |
| 是否使用当地时间 | use_localtime=YES | YES为北京时间,NO为Linux(默认) |
| 支持匿名用户登录 | anonymous_enable=YES | CentOS8 不支持 |
| 匿名用户忽略口令检查 | no_anon_password=YES | 默认为no |
| 匿名用户上传 | anon_upload_enable=YES | |
| 匿名用户建目录 | anon_mkfir_wirte_enable=YES | |
| 只允许匿名用户下载全员可读的文件 | anon_world_readable_only=YES | |
| 匿名用户上传文件umask的默认值 | anon_umask=0333 | 默认077 |
| 可删除和修改上传的文件 | anon_other_write_enable=YES | |
| 指定匿名用户上传文件的所有者进行修改 | chown_uploads=YES | 默认NO |
| 指定修改匿名用户上传文件的所有者 | chown_username=wang | 默认ftp |
| 指定修改匿名用户上传文件的权限 | chown_upload_mode=0644 | |
| 允许linux用户登录 | local_enable=YES | |
| 允许linux用户上传文件 | write_enable=YES | |
| linux系统用户上传文件的默认权限 | local_umask=022 | |
| 所有系统用户都映射成guest | guest_enable=YES | |
| 指定guest用户 | guest_username=ftp | |
| guest用户登录目录 | local_root=/ftproot | |
| 限定所有用户只能访问自己的用户目录 | chroot_local_user=YES | |
| 启用限定列表 | chroot_list_enable=YES | |
| 设置限定列表文件名 | chroot_list_file=/etc/vsftpd/chroot_list | 当上两个选项为YES时,就是白名单,当第一个为NO,第二个为YES就是黑名单 |
| 启用记录上传下载wu日志 | xferlog_enable=YES | 该为默认值 |
| 使用wu-ftp日志格式 | xferlog_std_format=YES | 该为默认值 |
| 设置日志文件 | xferlog_file=/var/log/xferlog | 该为默认值 |
| 最大并发连接数 |
max_client=0 | |
| 每个ip同时发起的最大连接数 | max_per_ip=0 | |
| 本地用户最大传输速率限制 | local_max_rate=0 | |
| 匿名用户最大传输速率限制 | anon_max_rate=0 | |
| 主动连接超时时长 | connect_timeout=60 | |
| 被动连接超时时长 | accept_timeout=60 | |
| 无数据连接超时时长 | data_connection_timeout=300 | |
| 无命令连接超时时长 | idle_session_timeout=60 |
本文介绍了FTP协议的工作机制,包括主动和被动模式,以及在LinuxCentOS环境下安装、配置和管理FTP服务器(vsftpd)的过程,详细解读了vsftpd.conf中的常见配置选项。
1万+

被折叠的 条评论
为什么被折叠?



