FTP
    伴随着互联网的发展,FTP(File Transfer Protocol,文件传输协议)绝对称的上为一个古老的协议。FTP的主要作用,就是让用户连接上一个远程计算机(这些计算机上运行着FTP服务器程序)察看远程计算机有哪些文件,然后把文件从远程计算机上拷到本地计算机,或把本地计算机的文件送到远程计算机去。
   
    常见的FTP服务器程序有很多,比如基于Windows的Serv-U,IIS,Filezilla,以及基于Linux平台的Filezilla,vsftp,wu-ftp,profipd,pureftp。基于安全性的考虑,RedHat默认提供VSFTP(Very Secure FTP)。顾名思义,这款软件在安全方面必然有其独到之处,下面就让我们来了解下这款ftp软件。
   
    该软件的安装软件包为vsftpd,其守护进程为/usr/sbin/vsftpd,执行的脚本为/etc/init.d/vsftpd,该服务启动是默认监听的端口为20(tcp,用于实现ftp控制命令的传输),21(tcp,用于实现数据的传输)。其配置文件有/etc/vdftpd/vsftpd.conf(主配置文件),/etc/vsftpd/user_list,/etc/vsftpd/ftpusers,/etc/pam.d/vsftpd。
   
    简单介绍其主配置文件/etc/vsftpd/vsftpd.conf
    anonymous_enable=YES            //允许匿名用户登录FTP服务器
    write_enable=YES                //普通用户具有上传权限
    anon_upload_enable=YES          //匿名用户具有上传权限(注:若真要实现此功能需要保证此类用户对FTP的指定的工作目录同样具有写权限)
    anon_mkdir_enable=YES           //匿名用户具有创建目录的权限
    dirmessage_enable=YES           //登录时显示.message文件内的欢迎信息
    message_file=.message           //定义.message文件
    xferlog_enable=YES              //打开传输日志功能
    xferlog_file=/var/log/vsftpd.log//定义日志文件
    chroot_local_user=YES           //锁定所有用户在其家目录中
    userlist_deny=NO                //不拒绝/etc/vsftpd/user_list中定义的用户登录ftp,且只允许这些用户登录
   
    基于FTP服务在设计之处的安全性缺陷,即所有数据包括用户名以及密码都是在网络中基于明文传输的,我们有必要构建安全的ftp服务,也就是FTPS(FTP Security)。下面就让我们来了解这个步骤。
       首先,需要有一个本地的或者外部的CA服务器,能够为我们的vsftpd服务发放证书,其次,我们的ftp服务要有自身的私钥文件,以及从CA那里申请而来的证书文件。最后才能修改主配置文件,并添加以下行。
       ssl_enable=YES
       ssl_tlsv1=YES
       ssl_sslv2=YES
       ssl_sslv3=YES
       allow_anon_ssl=NO
       force_local_data_ssl=YES
       force_local_logins_ssl=YES
       rsa_cert_file=/etc/vsftpd/ssl/vsftp.crt           //对应本地证书文件
       rsa_private_key_file=/etc/vsftpd/ssl/vsftp.key    //对应本地私钥文件
      
      
    能够访问FTP服务器的用户有多种,可以分为以下几类:
    Real帐户:这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。
    Guest用户:拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。
    Anonymous(匿名)用户:这也是我们通常所说的匿名访问,这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源,默认访问FTP的工作目录/var/ftp/pub。
    还有一类特别的用户,虚拟用户:在企业里常越到这样的情况,需要创建一些FTP账户让他们管理ftp服务,而又不想让他们拥有系统账号。尽管可以设置让他们无法登陆系统,如果有一堆Ftp账号需要建议,创建那么多系统账号也感觉很不爽,而且不是很安全。
   
    构建基于虚拟用户的vsftpd服务器(步骤):
    1.建立虚拟FTP用户的帐号数据库文件/etc/vsftpd/vusers.list,其中,单数行为用户名,双数行为其对应的密码。
    2.创建FTP根目录及虚拟用户映射的系统用户 //此类用户没有家目录
    3.建立支持虚拟用户的PAM认证文件/etc/pam.d/vsftpd.vu
    4.在vsftpd.conf文件中添加支持配置
      anonymous_enable=NO     //修改为NO
      local_enable=YES        //修改为YES
      guest_enable=YES        //添加新行
      guest_username=virtual    //添加新行,并对应用户名
    pam_service_name=vsftpd.vu  //对应文件名
    5.为个别虚拟用户建立独立的配置文件
    6.重新加载vsftpd配置
    7.使用虚拟FTP账户访问测试