FTP(File Transfer Protocol,应用层文件传输协议) 最古老的传输协议之一,它的主要功能是在ServerClient之间使用TCP进行文件传输,ftp有两种连接:命令连接(21/TCP)和数据连接(20/TCP);其中数据连接又有两种模式:主动模式(active)和被动模式(passive),既FTP服务可以工作在主动模式(active)和被动模式(passive)两种模式,所说的主动/被动模式都是基于Server端来说的。

主动模式(active

Client>10232334)的随机端口向Server21端口发起命令连接请求,当命令连接建立完成之后,当两端需要传输数据的时候,Client通过命令通道发送一个PORT command告诉Server,我打开了另一个TCP Port做数据通道(通常这个端口是2334+1的端口,当2334+1端口被占用时,Client 查找2334+1+1的端口,以此类推直到找到Client未被使用的>1023的随机端口为止),这是Server使用TCP 20端口和Client通知的TCP端口建立数据连接,当完成TCP三次握手之后数据连接建立完成,此时就可以进行数据传送了。

被动模式(passive

Client>10233334)的随机端口向Server21端口发起命令连接请求,当命令连接建立完成之后,当两端需要传输数据的时候,Client通过命令通道发送一个PASV commandServer要求进入被动传输模式,而后Server随机选择一个未被使用>1023TCP端口,并通过控制连接通知ClientClient使用另一个>1023且未被使用的TCP端口连接Server指定的TCP端口,当TCP三次握手完成之后数据连接建立完成,此时就可以进行数据传输了。

注:不论是主动模式还是被动模式,Client总是命令连接的发起者;当数据传输完成之后,数据连接就会断开,但命令连接一般不会立即断开

VSFTPD概述

由于ftp这个协议使用明文传输文件,为了更安全使用ftp,这是轻量级vsftpd出现的原因。

vsftpd Very Secure FTP,非常安全的FTP)除了安全特性以外,还具有高速和稳定的特性,而且VSFTPD服务启动模式有两种:一种是vsftpd独立运行;一种是通过xinetd这个超级进程来管理的方式运行;此外vsftpd可以通过三种不同的方式来实现:

  1. 匿名用户形式:vsftpd默认就允许匿名用户以只读方式登录
  2. 本地用户形式:以vsftpd所在主机/etc/passwd中用户及密码作为认证用户的来源,这是默认配置
  3. 虚拟用户形式:vsftpd支持将用户及密码保存在本地数据文件、数据库或LDAP中。较FTP的本地用户,虚拟用户只是FTP Server 的专有用户,虚拟用户只能访问FTP Server所能提供的resources,大大增加了OS本身的安全性。与匿名用户相比,虚拟用户需要提供Account和password才能获取FTP中的资源,方便对用户多和资源的管理,鉴于主机的安全和管理FTP的方便,虚拟用户是一种很好的解决方案。

VSFTPD软件的结构

  1. /etc/vsftpd/vsftpd.conf:vsftpd的配置文件,通过man 5 vsftpd.conf了解详细信息
  2. /etc/pam.d/vsftpd:vsftpd使用PAM模块相关文件,主要用来用户身份认证
  3. /etc/vsftpd.ftpusers:与2相关,把禁止登录的账号写入此文件即可,一行一个用户
  4. /etc/vsftpd.user_list:此文件生效与否和userlist_enable、userlist_deny有关
  5. /etc/vsftpd.chroot_list:默认不存在,主要功能是把用户锁在家目录中,此文件是否生效与chroot_list_enable和chroot_list_file参数有关。
  6. /usr/sbin/vsftpd: vsftpd的执行文件
  7. /var/ftp/:vsftpd匿名用户登录的根目录

别的不多说,接下来我们来安装vsftpd,安装方式有两种:rpm安装和编译源码包安装

这里以rpm安装为例

一、安装

1、安装

  1. # yum install vsftpd –y  ###用yum安装 
  2. # rpm -ivh /media/cdrom/Server/vsftpd-2.0.5-16.el5.i386.rpm ##rpm命令安装 
  3. # rpm -ql vsftpd  ###查看安装vsftpd后生成的文件和目录 
  4. # rpm -qc vsftpd  ###查看vsftpd的配置文件 

2、把vsftpd 加入服务列表并让其开机自动启动

  1. # chkconfig --add vsftpd   ##加入服务列表 
  2. # chkconfig vsftpd on     ##开机自动启动 
  3. # service vsftpd start      ##启动vsftp服务 

二、vsftpd.conf 各个参数数明

  1. # grep -e "^\<.*" /etc/vsftpd/vsftpd.conf -e "^#[^[:space:]]\{1,\}" ###获取vsftpd.conf各项参数 
  2. anonymous_enable=YES|NO        ##是否允许匿名用户登录 
  3. allow_anon_ssl=YES|NO              ##是否允许匿名用户SSL连接FTP 
  4. local_enable=YES   |NO               #是否允许本地用户登录 
  5. write_enable=YES |NO                ##是否允许用户上传文件,此参数只对费匿名用户有效 
  6. local_umask=022                   ##授权用户上传文件的umask 
  7. anon_umask=022                        ##匿名用户上传文件的umask 
  8. download_enable=YES|NO           ##是否允许用户下载文件 
  9. #anon_upload_enable=YES           ##是否允许匿名用户上传 
  10. #anon_mkdir_write_enable=YES  ##是否允许匿名用户在FTP Server上建立目录 
  11. anon_other_write_enalbe=YES      ##是否允许匿名用户执行创建目录之外的其他操作(删除、重命名) 
  12. dirmessage_enable=YES              ##当用户切换目录时是否显示欢迎信息 
  13. xferlog_enable=YES                  ##是否记录用户上传/下载文件时记录日志 
  14. connect_from_port_20=YES        ##是否使用20端口传输数据 
  15. #chown_uploads=YES                 ##是否修改匿名用户上传文件的所有者 
  16. #chown_username=whoever        ##指定匿名用户上传文件的所有者 
  17. #xferlog_file=/var/log/xferlog ##指定使用的日志文件 
  18. xferlog_std_format=YES              ##是否使用标准日志文件记录日志 
  19. #idle_session_timeout=600           ##指定会话超时的时间 
  20. #data_connection_timeout=120     ##指定数据传输超时时间 
  21. #nopriv_user=ftpsecure               ##指定vsftpd服务运行的账户,默认ftp 
  22. #async_abor_enable=YES            ##是否允许客户端使用sync命令 
  23. #ascii_upload_enable=YES           ##是否在上传文件时使用ASCII传输模式 
  24. #ascii_download_enable=YES    ##是否在下载文件时使用ASCII传输模式 
  25. #ftpd_banner=Welcome           ##定义ftp的欢迎信息 
  26. #deny_email_enable=YES             ## 
  27. #banned_email_file=/etc/vsftpd/banned_emails 
  28. chroot_local_user=YES|NO          ##是否把所有用户锁在自己的家目录 
  29. #chroot_list_enable=YES       #是否把指定的用户锁在其家目录,只有chroot_local_user=YES时,才有效 
  30. #chroot_list_file=/etc/vsftpd/chroot_list ##把不能离开其家目录的用户写在指定的文件里,一行一个,只有当chroot_list_enable=YES时,该参数才有效 
  31. local_root=/directory path            ##指定所有用户的根目录,该参数对匿名用户无效 
  32. anon_max_rate=0                 ##单位Byte/s,限制匿名用户的最大传输速度,0表示不限制 
  33. local_max_rate=0                        ##和上面的参数一样限制用户的最大传输速度 
  34. deny_file={*.exe}                       ##指定不允许上传的文件类型 
  35. #ls_recurse_enable=YES            ##是否允许用户登录ftp后使用ls –R命令 
  36. dirlist_enable=YES|NO                 ##是否允许使用dir列出目录 
  37. listen=YES                    ##vsftpd服务运行的模式,YES表示独立运行,NO让xinetd管理 
  38. #listen_ipv6=YES                        
  39. listen_address=172.16.11.1           ##指定vsftpd监听的IP地址 
  40. listen_port=34                             ##指定vsftpd监听的端口,默认TCP的21端口 
  41. max_clients=300                         ##设定vsftpd允许的最大连接数 
  42. max_per_ip=8                             ##设定每个ip最大连接数 
  43. pam_service_name=vsftpd          ##指定vsftpd使用PAM模块的配置文件,默认在/etc/pam.d 
  44. userlist_file=/file path                   ##指定允许或禁止登录ftp用户的文件 
  45. userlist_enable=YES | NO            ##为YES时用户输入用户名后,vsftpd检查到输入的用户名在列表中,vsftpd就直接禁用此用户,不会再询问用户输入密码等后续操作 
  46. userlist_deny=YES|NO                 ##该参数决定禁止还是只允许userlist_file文件中用户登录ftp服务器,该参数只有在userlist_enable=YES时才生效,YES是其默认参数值,既是禁止用户列表中的用户登录ftp服务器 
  47. tcp_wrappers=YES | NO             ##是否允许tcp_wrapper管理