vsftpd是现在大多数linux发行版默认的FTP服务,它是一款以安全著称的ftp软件。

1.FTP的原理


FTP会话包括两个端口,一个是控制端口,一个是数据端口。

控制端口:控制端口也就是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是由控制端口完成的。

数据端口:是和FTP服务器之间进行数据传输时候使用的通道。

FTP协议中,控制连接都是由客户端发起的,而数据连接有两种方式:PORT(主动方式)和PASV(被动方式)。

主动方式过程:首先由客户端发起连接,使用TCP连接服务器的21号端口,之后客户端在控制通道发送PORT指令,里面描述了客户端使用什么端口号接收数据(一般大于1024),然后服务器使用TCP在自己的20号端口和客户端建立连接。

被动方式过程:首先还是由客户端发起连接,使用TCP连接服务器的21号端口,然后客户端通过控制端口发送PASV指令,然后服务器协商出一个端口(大于1024)告诉客户端使用该端口传输数据,之后客户端去连接该端口建立连接。


注意:若企业内使用防火墙,主动方式建立连接时候将有一些问题!!!


2.vsftpd的安装

若配有yum源使用yum安装

[root@localhost ~]# yum install vsftpd

若使用debian系统

[root@localhost ~]# apt-get install vsftpd

若使用RPM安装

[root@localhost ~]# rpm -ivh vsftpd*.rpm 

也可以使用源码安装。

安装完之后记得  service vsftpd start,然后

[root@localhost ~]# chkconfig vsftpd on 开机自动启动

3.vsftpd的一些配置说明

/etc/vsftpd/vsftpd.conf主配置文件
/usr/sbin/vsftpdvsftpd的主程序
/etc/rc.d/init.d/vsftpdvsftpd的启动脚本
/etc/pam.d/vsftpdPAM认证文件
/etc/vsftpd/ftpusers禁止使用vsftpd的用户列表
/etc/vsftpd/user_list禁止或允许使用vsftpd的用户列表文件,这个文件中指定的用户缺省情况有说明
/var/ftpFTP的家目录,也就是匿名用户登录到FTP的家目录

下面对vsftpd.conf里面的文件做简要的说明:

anonymous_enable=YES

#是否允许匿名登录FTP服务器,默认设置为YES允许,用户可使用用户名ftp或anonymous进行ftp登录,如不允许匿名访问则设置为NO。

local_enable=YES

# 是否允许本地用户(即linux系统中的用户帐号)登录FTP服务器,默认设置为YES允许本地用户登录后会进入用户主目录,而匿名用户登录后进入匿名用户的下载目录/var/ftp/pub, 若只允许匿名用户访问,前面加上#注释掉即可阻止本地用户访问FTP服务器 。

write_enable=YES

# 是否允许本地用户对FTP服务器文件具有写权限,默认设置为YES允许。

local_umask=022

#掩码,本地用户默认掩码为077,可以设置本地用户的文件掩码为缺省022,也可根据个人喜好将其设置为其他值

anon_upload_enable=YES

#是否允许匿名用户上传文件,须将全局的write_enable=YES。默认为YES

anon_mkdir_write_enable=YES

#是否允许匿名用户创建新文件夹

dirmessage_enable=YES

# 是否激活目录欢迎信息功能

xferlog_enable=YES

#是否启用日志,在/var/log/xferlog

connect_from_port_20=YES

#是否使用20号端口作为数据端口

chown_uploads=YES
chown_username=whoever
#设置是否改变上传文件的所属着,下面一个是若要改变则改为的所属人,不推荐使用root用户xferlog_file=/var/log/xferlog

xferlog_std_format=YES

xferlog_enable=YES

#是否启用日志,在/var/log/xferlog,日志的一些设置。

idle_session_timeout=600

# 设置数据传输中断间隔时间,此语句表示空闲的用户会话中断时间为600秒,即当数据传输结束后,用户连接FTP服务器的时间不应超过600秒。可以根据实际情况对该值进行修改

data_connection_timeout=120

# 设置数据连接超时时间,该语句表示数据连接超时时间为120秒,可根据实际情况对其个修改

nopriv_user=ftpsecure

#运行vsftpd需要的非特权系统用户,缺省是nobody

async_abor_enable=YES

#是否识别异步ABOR请求。 如果FTP client会下达“async ABOR”这个指令时,这个设定才需要启用  而一般此设定并不安全,所以通常将其取消

ascii_upload_enable=YES

ascii_download_enable=YES

#是否以ASCII方式传输数据。默认情况下,服务器会忽略ASCII方式的请求。 启用此选项将允许服务器以ASCII方式传输数据。不过,这样可能会导致由"SIZE /big/file"方式引起的DoS***,故默认关闭

ftpd_banner=Welcome to blah FTP service.

登录FTP服务器时显示的欢迎信息,如有需要,可在更改目录欢迎信息的目录下创建名为.message的文件,并写入欢迎信息保存后。

deny_email_enable=YES

#黑名单设置。如果很讨厌某些email address,就可以使用此设定来取消他的登录权限,可以将某些特殊的email address抵挡住。

banned_email_file=/etc/vsftpd/banned_emails

#当上面的deny_email_enable=YES时,可以利用这个设定项来规定哪些邮件地址不可登录vsftpd服务器,此文件需用户自己创建,一行一个email address即可

chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

#你可以指定一个列表把本地用户锁定在他们的家目录,如果chroot_local_user=YES,这个列表(/etc/vsftpd/chroot_list)就是不把本地用户锁定家目录的列表,就是可以切换到/下,不安全

/etc/vsftpd/chroot_list

#是否允许递归查询。默认为关闭,以防止远程用户造成过量的I/O

listen=YES

listen_ipv6=YES

#是否允许监听,设为yes,vsftpd将以独立模式运行,监听ipv4和ipv6端口

pam_service_name=vsftpd

#设置PAM外挂模块提供的认证服务所使用的配置文件名,即/etc/pam.d/vsftpd文件

userlist_enable=YES

设置是否阻扯user_list文件中的用户登录FTP服务器,默认为YES。user_list文件里面(userlist_deny=YES/NO)若此项设为YES,则user_list文件中的用户允许登录FTP服务器,而如果同时设置了userlist_deny=YES,则user_list文件中的用户将不允许登录FTP服务器,甚至连输入密码提示信息都没有。

tcp_wrappers=YES

#是否使用tcp_wrappers作为主机访问控制方式。

tcp_wrappers可以实现linux系统中网络服务的基于主机地址的访问控制

在/etc目录中的hosts.allow和hosts.deny两个文件用于设置tcp_wrappers的访问控制

前者设置允许访问记录,后者设置拒绝访问记录。

如想限制某些主机对FTP服务器192.168.57.2的匿名访问,编缉/etc/hosts.allow文件,如在下面增加两行命令:vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY

表明限制IP为192.168.57.1/192.168.57.9主机访问IP为192.168.57.2的FTP服务器此时FTP服务器虽可以PING通,但无法连接。


登录时候一些数字提示信息

110 重新启动标记应答。
120 服务在多久时间内ready。
125 数据链路端口开启,准备传送。
150 文件状态正常,开启数据连接端口。
200 命令执行成功。
202 命令执行失败。
211 系统状态或是系统求助响应。
212 目录的状态。
213 文件的状态。
214 求助的讯息。
215 名称系统类型。
220 新的联机服务ready。
221 服务的控制连接端口关闭,可以注销。
225 数据连结开启,但无传输动作。
226 关闭数据连接端口,请求的文件操作成功。
227 进入passive mode。
230 使用者登入。
250 请求的文件操作完成。
257 显示目前的路径名称。
331 用户名称正确,需要密码。
332 登入时需要账号信息。
350 请求的操作需要进一部的命令。
421 无法提供服务,关闭控制连结。
425 无法开启数据链路。
426 关闭联机,终止传输。
450 请求的操作未执行。
451 命令终止:有本地的错误。
452 未执行命令:磁盘空间不足。
500 格式错误,无法识别命令。
501 参数语法错误。
502 命令执行失败。
503 命令顺序错误。
504 命令所接的参数不正确。
530 未登入。 
532 储存文件需要账户登入。
550 未执行请求的操作。
551 请求的命令终止,类型未知。
552 请求的文件终止,储存位溢出。  
553 未执行请求的的命令,名称不正确。