1. 安装和使用
1.1 安装vsftpd
yum install vsftpd -y
1.2 修改vsftpd的配置
vi /etc/vsftpd/vsftpd.conf
1.3 启动vsftpd服务
systemctl start vsftpd
2. 常用配置
2.1 关闭匿名访问
anonymous_enable=NO
2.2 允许使用本地用户访问
local_enable=YES
2.3 允许写入
write_enable=YES
2.4 设置本地用户模式下创建文件的掩码
local_umask=022
2.5 启动用户名单
userlist_enable=YES
userlist_deny=YES
userlist_deny设置为YES时拒绝名单内用户访问,设置为NO时只允许名单内用户访问。
2.6 设置被动模式
listen=YES
listen_ipv6=NO
pasv_enable=YES
pasv_address=*.*.*.*
pasv_min_port=9000
pasv_max_port=9099
使用云服务器搭建vsftpd时的配置,pasv_address对应的是服务器的ip,配置完后要在防火墙开放相应的端口。
3. 自定义用户根目录的两种方法
3.1 添加用户时设置根目录
mkdir /var/www
useradd username -d /var/www/html
passwd username
3.2 通过chroot_local_user配置修改根目录
local_root=/var/www/html
anon_root=/var/www/html
chroot_local_user=YES
chroot_list_enable=YES
设置chroot_list_enable为YES启动chroot_list清单文件,chroot_local_user为YES时,只有清单里的用户可以修改根目录,设置为NO时,只有清单里的用户不可更改根目录。同时,这种方法需要修改/var/www/html目录的访问权限为777,权限为755时会拒绝登录用户的写请求。
注:两种方法都需要配置或关闭selinux
4. FTP相关拓展
4.1 命令连接
客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的21端口发起一个建立连接的请求,FTP服务器接受来自客户端的请求,通过TCP三次握手完成连接的建立过程,这样的连接就称为命令连接。这条连接通道建立后用来传输FTP的命令。
4.2 数据连接
命令连接建立后,客户端和服务端会建立一条新的连接用来传输文件,该连接称为数据连接。
4.3 主动模式(port)
FTP客户端随机开启一个非特权端口N(端口号大于1024)向服务器的21号端口发起连接,然后开放N+1号端口(并不一定刚好是N+1号端口,此端口是随机分配的)进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。

4.4 被动模式(passive)
此模式下,FTP客户端同样会开启一个非特权端口N向服务器的21号端口发起连接,但不会发出PORT命令,而是发送PASV命令到服务端,然后服务器会开启一个非特权端口P,并发送PORT P命令到客户端,然后又客户端的N+1端口连接服务端的P端口。

5. 附录
配置目录: /etc/vsftpd
配置文件: vsftpd.conf
用户清单: user_list和ftpusers
chroot用户清单: chroot_list