vsftpd笔记

248 阅读3分钟

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,进行数据传输。

主动模式.png
在主动模式下,服务器需要开启21端口的准入和20端口的准出,客户端需配置N端口的准出和N+1端口的准入,未配置N+1端口的准入的情况,传输过来的数据可能被防火墙拦截。

4.4 被动模式(passive)

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

被动模式.png
在被动模式下,服务器需配置21端口的准入和P端口的准入,客户端需配置N端口和N+1端口的准出,由于防火墙一般不拦截“准出”请求,所以客户端不需要额外的配置,而服务端需对两个端口都做开放配置。

5. 附录

配置目录: /etc/vsftpd

配置文件: vsftpd.conf

用户清单: user_list和ftpusers

chroot用户清单: chroot_list