vsftpd是linux发行版中的一款ftp服务器程序,它的全称是“very secure ftp daemon”,号称是最安全的ftp服务器。它工作在21,20号端口,主要提供文件传输服务,可以跨越网络提供服务
ftp的工作原理:
    ftp的两种工作模式:
    1,主动模式
    工作原理:客户端从一个任意的非特权端口(大于1024)N连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)
    2,被动模式
    工作原理:当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(大于1024)N和N+1。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(大于1024)P ,并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据
    
    主动模式与被动模式的比较:       
    主动FTP对FTP服务器的管理和安全很有利,但对客户端的管理不利,因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。目前,ftp服务器一般工作在被动模式。
vsftpd服务器的特点:
  1、安全、高速、稳定
  2、可设定多个基于IP的虚拟FTP server
  3、匿名FTP多个基于IP的虚拟FTP server
  4、匿名FTP的根目录不需要任何特殊的目录结构,或系统程序或其他系统文件
  5、不执行任何外部程序,从而减少了安全隐患
  6、支持虚拟用户
  7、支持带宽限制
  8、支持inetd启动和独立FTP服务器两种运行方式
FTP用户有三种分别是:
  本地用户、虚拟用户、匿名用户
本地用户:
  用户在FTP服务器上的拥有账号,且该账号为本地用户可以通过输入的账号;
  自己的账号和口令进行授权登录;
  登陆目录为自己的home目录($HOME);
虚拟用户:
  用户在FTP服务器上拥有账号,但该账号智能用于文件传输服务
  登陆目录为某一指定的目录
  通常可以上传和下载
匿名用户:
  用户在FTP服务器上没有账号
  登陆目录为/var/ftp
vsftpd的配置文件:
  /etc/vsftpd/vsftpd.conf    #主配置文件
  /etc/vsftpd.ftpusers       #指定哪些用户不能访问FTP服务器
  /etc/vsftpd.user_list      #当在/etc/vsftpd/vsftpd.conf中设置了            userlist_enabl=YES,且userlist_deny=YES时,vsftpd.user_list中指定的用户不能访问FTP服务器 ;当在/etc/vsftpd/vsftpd.conf中设置了userlist.enable=YES,且userlist.deny=NO时,仅仅允许vsftpd.user_list中指定的用户访问FTP服务器。                     
vsftpd.conf的一些默认配置选项:
anonymous_enable=YES            #允许匿名登陆
local.enable=YES                #允许本地用户登陆
write.enable=YES                #开放本地用户的写权限
local_umask=022                 # 设置本地用户的文件生成掩码
dirmessage_enable=YES           #档切换目录是,显示目录下的.message隐含文                                 件的内容
xferlog_enable=YES               #激活上传和下载日志
connect_from_port_20=YES         #启用FTP数据段口德连接请求
xferlog_std_format=YES           #使用标准的ftpd xferlog日志格式
pam_service_name=vsftpd          #设置PAM认证服务的配置文件名称,该文件存                                  放在/etc/pam.d目录下
userlist_enable=YES    #激活vsftpd检查userlist_file指定的用户是否可以访问                         vsftpd服务器,userlist_file的默认值                                       是/etc/vsftpd.user_list文件,由于默认情况下,                             userlist.deny=YES,所以/etc/vsftpd.user_list文件中                         所列的用户均不能访问此vsftpd服务器。
listen=YES             #使用vsftpd处于独立启动模式
Tcp_wrappers=YES       #使用tcp_wrappers作为主机的访问控制方式
测试vsftpd的默认配置-匿名账号
  在匿名账号的下载目录/var/ftp/pub目录下,存放一个测试文件
   #echo"This is a test file" > /var/ftp/pub/test_file
   生成目录信息文件/var/ftp/pub/.message
   #echo "Welcome to this Directory." > /var/ftp/pub/.message
   使用FTP客户端连接FTP服务器
   下载test_file.txt    成功
   上传一个文件,  eg: /root/install.log   失败 
   查看日志文件/var/log/vsftpd.log
     需要打开配置选项xferlog_file=/var/log/vsftpd.log
测试vsftpd的默认配置本地帐号:
   以本地账号student测试vsftpd服务器
   使用root不能登录vsftpd服务器
     root用户被写在/etc/vsftp.ftpusers文件中
 关于vsftpd默认配置的小结
 
   允许匿名用户和本地用户登录;
   匿名用户的登录名为ftp或anonymous;
   匿名用户不能离开匿名服务目录/var/ftp,且只能下载不能上传;
   本地用户(vsftpd服务器)的登录名为本地用户名(FC3),口令为本地用户的口令(FC3);
   本地用户可以离开其家目录,切换到有权方位的其他目录,并且在权限允许的情况下进行上传和下载;
   写在文件/etc/vsftpd.ftpusers中的本地用户禁止登录。
常用vsftpd服务器的配置:
  允许匿名用户上传:
     创建匿名上传目录
       #mkdir /var/ftp/incomming
     修改上传目录权限
       #chmod 777 /var/ftp/incomming
     在/etc/vsftpd/vsftpd.conf中激活如下配置选项
        允许匿名用户上传:
          anon_upload_enable=YES
          anon_umask=022
        允许匿名用户创建目录
          anon_mkdir_write_enable=YES
        允许匿名用户进行写操作(如删除和重命名文件或目录)
           anon_other_write_enable=YES
        匿名用户仅被允许下载对于它可读的文件
          anon_world_readable_only=YES
        检查配置文件
           vsftpd /etc/vsftpd/vsftpd.conf
        重新启动vsftpd
           #service vsftpd restart
配置基本的性能和安全选项:
  idle_session_timeout=600     #设置空心啊用户会话中断时间(s)
  data_connection_timeout=120   #设置空闲的数据连接的中断时间(s)
  max_clients=200
  max_per_ip=3        #限制客户连接数
  local_max_rate=50000
  anon_max_rate=30000        #设置最大传输速率限制(B/s)
  chroot_list_enable=YES
  chroot_list_file=/etc/vsftpd_chroot_list   #不允许某些用户切换到其home目录以外的其他目录,/etc/vsftpd_chroot_list文件中指定的用户不能访问其home目录以外的其他目录;
   chroot_local_user=YES     #不允许所有用户切换到其home目录以外的其他目录
   chroot_local_user=YES
   chroot_list_enable=YES
   chroot_list_file=/etc/vsftpd.chroot_list    #仅允许某些用户切换到其home目录以外的其他目录,/etc/vsftpd.chroot_list文件中指定的用户能够访问其home目录外的其他目录
配置基于本地用户的访问控制: 
  是选项userlist_file对应的文件(默认值为/etc/vsftpd.user_list)中指定的本地用户不能访问,而其他用户可以访问
   userlist_enable=YES
   userlist_deny=YES
  使选项userlist_file对应的文件(默认值为/etc/vsftpd.user_list)中指定的本地用户可以访问,而其他用户不可以访问
     userlist_enable=YES
     userlist_deny=NO
配置基于主机的访问控制(独立模式)
   TCP_wrappers使用/etc/hosts.allow和/etc/hosts.deny两个配置文件实现访问控制。
     在hosts.allow可以使用DENY,通常使用他来实现访问控制
   对于vsftpd,hosts.allow中每条记录的语法格式如下
      vsftpd:主机表:setenv VSFTPD_LOAD_CONF配置文件名
配置vsftpd访问控制时主机表的书写语:
选项值含义
Hostname可解析的主机名
IP Address点分十进制表示IP地址
.domain匹配一个域中的所有主机
Network-number匹配IP地址的开始部分,不管使用的网络掩码如何
IP Address/netmask第一要匹配的网络或子网
配置主机访问控制的列子:
  要求:
    拒绝192.168.2.0/24访问
    对域smartraining.com和192.168.1.0/24内的所有主机不做连接数和最大传输速率限制
     对其他主机的访问控制限制每 IP 地址的连接数为 1 ,最大传输速率限制为 10kb/s 步骤
     修改 /etc/vsftpd/vsftpd.conf 文件,设置如下选项
                 tcp_wrappers=YES ( 默认情况)
          local_max_rate=10000
         anon_max_rate=10000
         max_per_ip=1
      修改 /etc/hosts.allow ,加入如下配置选项
         vsftpd: .smartraining.com, 192.168.1.0/24: setenv                          VSFTPD_LOAD_CONF /etc/vsftpd/vsftpd_tcp_wrap.conf                           vsftpd: 192.168.2.0/24: DENY
     编辑 /etc/vsftpd/vsftpd_tcp_wrap.conf
          local_max_rate=0  
          anon_max_rate=0 
          max_per_ip=0
      重新启动 vsftpd
 
配置vsftpd 在非标准端口下提供服务
 
      vsftpd 必须工作在独立启动方式下,才能在非标准端口提供服务
  例子:在 10021 端口提供服务
 修改 /etc/vsftpd/vsftpd.conf 文件,添加如下一行
    listen_port=10021
 重启 vsftpd 服务
配置基于IP的虚拟FTP服务器(1)
    配置虚拟 IP 地址
设本机现有的 IP 地址为 192.168.1.222
配置一个虚拟网络接口 eth0:1
        # ifconfig eth0:1 192.168.1.234 up
建立虚拟 FTP 的服务器目录并设置适当的权限
建立虚拟 FTP 的服务器目录
         # mkdir –d /var/ftp2/pub
         # chmod 755 –R /var/ftp2
在下载目录下生成测试文件
         # echo “hello” > /var/ftp2/pub/test_file.txt
     创建虚拟服务器的匿名用户所映射的本地用户 ftp2
# useradd –d /var/ftp2 –M ftp2
/etc/vsftpd/vsftpd.conf 中添加如下一行,将原 FTP 服务绑定到 eth0 接口
          listen_address=192.168.1.222
    建立虚拟 FTP 服务器的主配置文件
   用备份的 vsftpd 的默认主配置文件生成虚拟 FTP 服务器的主配置文件
       # cp /etc/vsftpd/vsftpd.conf.fc3 /etc/vsftpd/vsftpd_site2.conf

   

修改虚拟 FTP 服务器的主配置文件,添加如下一行
       listen_address=192.168.1.234
        ftp_username=ftp2
    ftpd_banner=This is the alternative FTP site

重新启动vsftpd 


注:添加本地ftp本地用户
有的ftp服务器需要用户名和密码才能登陆,就是因为设置ftp用户和权限
ftp用户一般是不能登陆系统的,只能进入ftp服务器自己的目录中,这是为了安全,这样的用户就叫做虚拟用户了,实际上并不是真正地虚拟用户,只是不能登陆shell了而已,没能力登陆系统。
/usr/sbin/adduser -d /opt/test_ftp -g ftp -s /sbin/nologin test
解释:使用命令adduser添加test用户,不能登陆系统(-s /sbin/nologin),自己的文件夹在(-d /opt/test_ftp)),属于组ftp(-g)