本文最后更新于 2022-02-18,文章内容可能已经过时。

理论基础

主动模式

在主动模式下,客户端会开启 N 和 N+1 两个端口, N 为客户端的命令端口, N+1 为客户端的数据端口

第一步:客户端使用端口 N 连接FTP服务器的命令端口 21 ,建立控制连接并告诉服务器我这边开启了数据端口 N+1
第二步:在控制连接建立成功后,服务器会使用数据端口 20 ,主动连接客户端的 N+1d 端口以建立数据连接。这就是FTP主动模式的连接过程

被动模式

第一步:客户端的命令端口 N 主动连接服务器命令端口 21 ,并发送PASV命令,告诉服务器用“被动模式”,控制连接建立成功后,服务器开启一个数据端口 P ,通过PORT命令将 P 端口告诉客户端
第二步:客户端的数据端口 N+1 去连接服务器的数据端口 P ,建立数据连接
在这种数据连接建立的过程中,服务器是被动的等待客户端来连接的,所以称这种模式为被动模式

vsftpd用户类型

  1. 匿名用户(anonymous):事实上是服务器端自动映射的一个系统用户
  2. 本地用户(local):即 /etc/passwd 中的用户
  3. 虚拟用户(guest):事实上服务器端自动映射的一个系统用户,多个虚拟用户被映射成一个系统用户,不同的虚拟用户可以有不同的访问权限

服务配置

安装vsftpd包

[root@localhost ~]# yum install -y vsftpd* ftp*

安装完成以后就已经可以用匿名用户访问了

[root@localhost ~]# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 3.0.2)
Name (127.0.0.1:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

主配置文件

[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf

anonymous_enable=YES    //允许匿名登录
local_enable=YES    //允许本地用户登录
write_enable=YES    //是否可写(删除 修改 上传 重命名)
local_umask=022        //本地用户上传文件的掩码