一、 FTP介绍

FTP是比较常用的在服务器与客户端间进行文件的传输服务。FTP是以TCP数据包的模式进行服务器与客户端之间的连接,当连接建立后,用户可以在客户端连上FTP服务器,从而进行文件的下载与上传,此外,也可以直接管理用户在FTP服务器上面的文件。而提供FTP功能的软件有很多(例如:proftpvsftpdwuftp

使用到的端口号: * 命令通道的FTP---默认为端口21      

                 * 数据传输的FTP-data----默认为端口20

 实施环境:红旗Asianux3.0sp1  (该系统的ftp版本为vsftpd-2.0.5-10.2AX)

二、 配置说明

对于vsftp的配置最主要的便是是vsftpd.conf文件。下面将对其中比较重要的设置值进行介绍,其他内容大家可以根据man 5 vsftpd.conf的内容来查看。

1.     与主机相关的设置值

   pasv_enable=YES(NO)           启动被动式连接模式

说明:FTP的工作方式有两种(activepassive)

主动方式:客户机随即获取一个大于1024以上的端口(端口AA)来与FTP服务器的21端口连接(当然这个过程需要3次握手);客户端在需要数据的情况下会告知服务器以某种方式连接(这里假设是active方式),客户端会随机启用一个端口(端口BB),且通过命令通道告知FTP服务器这两个信息,并且等待FTP服务器的连接;FTP服务器由命令通道了解客户端的需求后,会主动由20端口向客户端的BB端口连接。

问题:以上在服务器和客户端都在公网上是没有问题的。但如果客户端是架设在NAT或防火墙后端时,BB端口的映射就会出现问题。(具体情况这里就不做过多介绍了)一般情况下是启动被动模式进行连接。

                 use_localtime=YES(NO)        是否使用本地时间

    write_enable=YES(NO)         是否允许用户上传数据

    max_clients=0                在同一时间内最多有多少client可以同时连上FTP服务器

    max_per_ip=0                 同一个ip同一时间允许多少连接

    banner_file=/path/file       用户登入FTP主机时所显示的欢迎文字

    pasv_max_port=0     pasv_min_port=0   两个是与 passive mode 使用的 port number 有关

2.     与实体用户相关的设置值

       guest_enable=YES (NO)        若这个值设定为 YES,那么任何非anonymous登入均会被假设为guest。访客在vsftpd中默认会取得FTP这个用户的相关限制。但可以通过guest_username来修改。

  guest_username=FTP           guest_enable=YES时才会生效,指定访客的身份。

  local_enable=YES (NO)        这个设定值为YES时,在/etc/passwd内的账号才能以实体用户的方式登录vsftpd主机

  local_max_rate=0             实体用户的传输速度限制,单位为bytes/second 0为不限制。

 chroot_local_user=YES (NO)    将用户限制在自己的家目录之内。默认是NO,因为有下面两个设置项目的辅助 

  chroot_list_enable=YES (NO)   是否启用将某些实体用户限制在他们的家目录内。建议设置为YES,并配合下面的设置值。

  chroot_list_file=/etc/vsftpd.chroot_list   规定哪一个实体用户会被限制在自己的家目录内而无法离开

说明:为了避免用户在您的Linux系统中离开自己的默认目录而进入到Linux系统的其他目录中,所以将用户的工作范围局限在用户的默认目录下。如此一来,由于用户无法离开自己的默认目录,而且登录FTP后,显示的根目录就是用户默认目录的内容。 

  userlist_deny=YES (NO)        是否借助vsftpd的阻止机制来处理某些不受欢迎的账号,与下面的设置有关。 

  userlist_file=/etc/vsftpd/ftpusers 上面的userlist_deny=YES时,在这个文件内的账号都无法使用vsftpd

3.     匿名用户登录的设置值

    

                anonymous_enable=YES (NO)        设定为允许anonymous登入vsftpd主机。默认为YES,只有该值为YES时下面的所有设置才会生效。

   anon_world_readable_only=YES (NO)  是否允许anonymous具有下载可读文件的权限

    anon_other_write_enable=YES (NO)   是否允许anonymous具有写入的权限

   anon_mkdir_write_enable=YES (NO)   是否让 anonymous 具有建立目录的权限

   anon_upload_enable=YES (NO)        是否让 anonymous 具有上传数据的功能

   no_anon_password=YES (NO)          当设置为YES时,表示anonymous将会略过密码检验步骤

      anon_max_rate=0                    限制 anonymous 的传输速度,该设置值后面接的数值单位为bytes/秒,0 则不限制

4.     系统安全方面的设置值

         

                 tcp_wrappers=YES (NO)              是否支持tcp_wrappers,建议设置YES

    xferlog_enable=YES (NO)             当设定为YES时,用户上传与下载文件都会被纪录起来。与下一个设定项目有关

    xferlog_file=/var/log/vsftpd.log    日志文件的文件名 

    pam_service_name=vsftpd             这个是pam模块的名称,放置在/etc/pam.d/vsftpd

三、 vsftpd 的不同身份用户的登录

1.       仅有实体用户登录的设置

     要求实体用户登录如下:

                   使用本地的时间取代GMT时间;

     用户登录时显示一些欢迎的信息;   

     但是系统账号(UID小于 500 的账号)均不能使用 vsftpd

     一般实体用户可以进行上传、下载以及修改文件等动作;

     用户新增的文件、目录的umask希望设置为002   

     对某些用户chroot

     限制数据的传输速度以及对客户登录数等的限制;

     *下面开始处理vsftpd.conf文件 

                    [root@redflag ~]# vi /etc/vsftpd/vsftpd.conf

      # 与匿名用户相关的信息,在这个案例中将匿名登录取消 

      anonymous_enable=NO 

      # 与实体用户相关的信息 

      local_enable=YES 

      write_enable=YES 

      local_umask=002

      # 设置抵挡某些用户登录的项目设置值。

      userlist_enable=YES

      userlist_deny=YES

      说明:在这里没有设置userlist_file的文件,则系统默认为/etc/vsftpd/user_list

      # 设置一些用户chroot

      chroot_list_enable=YES

      说明:在这里没有设置chroot_list_file文件,则系统默认为/etc/vsftpd/chroot_list

      # 关于主机与安全性的设定 

      use_localtime=YES 

      dirmessage_enable=YES 

      xferlog_enable=YES 

      connect_from_port_20=YES 

      pam_service_name=vsftpd 

      tcp_wrappers=YES 

      listen=YES

      banner_file=/etc/vsftpd/welcome.txt

      # 限制下载带宽以及最大上线人数与同一IP的来源数

      local_max_rate=100000      #最大带宽为100KBytes/s

      max_client=10              #最多只有10个人同时使用FTP服务器

      max_per_ip=1               #每个IP来源最多只能建立一条FTP的连接

      [root@redflag ~]# service vsftpd start

      [root@redflag ~]# vi /etc/vsftpd/welcome.txt

      欢迎使用FTP相关服务

      [root@redflag ~]# vi /etc/vsftpd/user_list       #将要限制登入的账号写入

      [root@redflag ~]# vi /etc/vsftpd/chroot_list     #将要chroot的账号写入

2.       仅有匿名用户登录的设置(匿名用户的默认目录为/var/ftp)

      

            对匿名用户的登录要求如下:

 使用本地时间而非GMT时间; 

 仅开放anonymous的登入且不需要输入密码; 

 文件传输的速限为30Kbytes/second 

 允许 anonymous 上传文件到 /var/ftp/upload 这个目录当中,并且允许 anonymous 建立目录; 

 数据连接的过程(不是命令通道) 只要超过60秒没有回应,就强制Client断线! 

 只要 anonymous 超过十分钟没有动作,就予以断线;

      * 下面开始处理vsftpd.conf文件 

         [root@redflag ~]# vi /etc/vsftpd/vsftpd.conf

 # 与匿名用户相关的信息

 anonymous_enable=YES

 # 不必提供密码,可直接登录

 no_anon_password=YES

 # 限制流速

 anon_max_rate=30000

 # 与连接时间有关的设置项目

 data_connection_timeous=60

 idle_session_tmeout=600

 # 建立上传/下载目录(需要配合文件系统权限)

 write_enable=YES

 anon_other_write_enable=YES

 anon_mkdir_write_enable=YES

 anon_upload_enable=YES

 # 与主机与安全性有关的设定 

 use_localtime=YES  

 dirmessage_enable=YES 

 xferlog_enable=YES 

 connect_from_port_20=YES 

 pam_service_name=vsftpd

 listen=YES 

 tcp_wrappers=YES 

 nopriv_user=ftp     #不加此行也可,系统默认匿名用户所取得的身份是FTP

 # 关于 anonymous 的设定 

 anonymous_enable=YES 

 anon_other_write_enable=YES 

 anon_mkdir_write_enable=YES 

  anon_upload_enable=YES 

  deny_email_enable=YES 

  banned_email_file=/etc/vsftpd.banned_emails 

  # 关于实体用户相关的设定,本案例中将它关闭

  local_enable=NO 

  [root@redflag ~]# service vsftpd restart

  [root@redflag ~]# mkdir /var/ftp/upload

  [root@redflag ~]# chown FTP /var/ftp/upload     #在系统配置文件中已经指明nopriv_user=ftp

说明:在vsftp中启动anonymous用户登录系统时,anonymous已经自动chroot了。不需要用户在另外设置。

四、 vsftp的高级设置

1.       更严格的chroot环境

     如果现在客户想要的是:所有用户默认为chroot,但某些用户可不受限制的环境。

                  [root@redflag ~]# vi /etc/vsftpd/vsftpd.conf

     chroot_local_user=YES

     chroot_list_enable=YES

     说明:在这里没有设置chroot_list_file文件,则系统默认为/etc/vsftpd/chroot_list

2.       建立严格的可使用FTP的账号列表

     如果我只让某些人使用FTP而已,即新增的用户默认不可使用FTP服务的话,需要修改如下:

               [root@redflag ~]# vi /etc/vsftpd/vsftpd.conf

   userlist_enable=YES

   userlist_deny=NO

       说明:在这里没有设置userlist_file的文件,则系统默认为/etc/vsftpd/user_list

      所以以后新增的用户如果要能够使用FTP的话,就要写入/etc/vsftpd/user_list文件中。

      注意:在user_list文件中的用户必须首先不在/etc/vsftpd/ftpusers文件中,该文件是存放FTP不允许用户登入FTP服务器的文件

3.       被动式连接端口的限制

主动式连接比较好处理,都是通过服务器的端口20对外主动连接。被动连接FTP服务器会随机选取几个没有在使用中的端口来建立被动连接,此时防火墙的设置就比较麻烦。而我们可以通过指定几个固定范围的端口来作为FTP的被动式数据连接端口,这样我们就事先知道FTP数据链路的端口。

              [root@redflag ~]# vi /etc/vsftpd/vsftpd.conf


       pasv_enable=YES


       pasv_min_port=65400


       pasv_max_port=65410     #那么被动连接的端口为65400~65410

4.       建立仅可上传的目录

一般来说,用户上传的数据在管理员尚未查阅过是否合法时,是不应该让其他人下载的。所以如果设置/var/ftp/upload仅能上传而不能下载时,那么被上传的数据的权限就要修改一下。

                   [root@redflag ~]# vi /etc/vsftpd/vsftpd.conf

  write_enable=YES

  anon_mkdir_write_enable=YES

  anon_upload_enable=YES

  chown_uploads=YES

  chown_username=root

当然,那个/var/ftp/upload还是需要行。如此可以被FTP用户写入才一来被上传的文件将会修改文件拥有者未root用户,而FTP(匿名用户取得的身份)是无法读取root数据的,所以就无法下载。

5.       vsftpd的启动模式

vsftp支持两种启动模式,分别为stand alonexinetdsuper daemon方式。一般来时如果主机是专门用来作为ftp服务器的话,建议使用stand alone方式来启动。

a)      stand alone启动方式

    service vsftpd start

    或 /etc/init.d/vsftpd start

b)       super daemon启动方式

     需要修改vsftpd的配置文件

                                [root@redflag ~]#vi /etc/vsftpd/vsftpd.conf

LISTEN=NO              #大约在108行,LISTENYESstand alone模式,NOsuper deamon模式

编辑super deamon下的vsftpd文件。

[root@redflag ~]vi /etc/xinetd.d/vsftpd

service ftp

{

socket_type             = stream

wait                    = no

user                    = root

server                  = /usr/sbin/vsftpd

log_on_success          += DURATION USERID

log_on_failure          += USERID

nice                    = 10

disable                 = no

}

[root@redflag ~]#/etc/init.d/xientd star