Linux中FTP服务器配置

 
   1、FTP服务器的一些基本概念
 
    (1)FTP连接方式
    控制连接:标准端口为21,用于发送FTP命令信息。
    数据连接:标准端口为20,用于上传、下载数据。
 
    (2)数据连接的建立类型
    主动模式:服务端从20端口主动向客户端发起连接。
    被动模式:服务端在指定范围内的某个端口被动等待客户端发起连接。
    一般都采用被动模式。主动模式存在安全隐患,客户机很容易发起DdoS攻击。
 
    (3)FTP传输模式
    文本模式:ASCII模式,以文本序列传输数据。
    二进制模式:Binary模式,以二进制序列(比特流)传输数据。
    ASCII模式一般只用于纯文本文件传输,而Binary模式更适合传输程序、图片等文件。尤其是对于可执行文件,如果把可执行文件以文本模式传输,则下载下来的文件将无法正常使用。
    在rhel6中默认采用二进制模式,在rhel6以前的版本中默认采用文本模式,为了提高可靠性,rhel6不再支持文本模式。
 
    (4)FTP用户的类型
    匿名用户:anonymous或ftp,这两个其实是同一个用户。
    本地用户:帐号名称、密码等信息保存在passwd、shadow文件中。但是系统用户在访问时默认只能访问自己的主目录,而不是vsftpd的主目录/var/ftp
    虚拟用户:使用独立的帐号/密码数据文件。
    
    2、vdftpd服务
       后台进程:vsftpd
       启动脚本:/etc/init.d/vsftpd
       类型:System V 服务
       使用端口:20(ftp-data),21(ftp)
       所需RPM包:vsftpd
       配置文件:/etc/vsftpd/vsftpd.conf
       查看配置文件帮助:man  vsftpd.conf
       默认主目录是:/var/ftp
 
3、配置匿名用户下载和上传
[root@test ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
 
 
   3.1安装FTP软件包,客户端和服务器端:
            tftp-server-0.49-7.el6.i686
            ftp-0.17-51.1.el6.i686
            tftp-0.49-7.el6.i686
            vsftpd-2.2.2-6.el6_0.1.i686
            lftp-4.0.9-1.el6.i686
            gvfs-obexftp-1.4.3-12.el6.i686
    
    启动服务,并设为开机自动
    service  vsftpd  start
    chkconfig  vsftpd  on
 
    编辑主配置文件/etc/vsftpd/vsftpd.conf
        anonymous_enable=YES  表示允许匿名用户访问。
        local_enable=YES  表示允许使用系统用户访问,
        write_enable=YES  表示允许允许匿名用户或系统用户具有写入权限
        
   将“/var/ftp/pub”目录的属主改为ftp,即可赋予匿名用户写入权限
      [root@test ~]# chown ftp /var/ftp/pub/
           
     同时在配置文件/etc/vsftpd/vsftpd.conf中增加以下几行:
        anon_upload_enable=YES    #表示允许匿名用户上传
        anon_mkdir_write_enable=YES  #表示允许匿名用户创建目录
        anon_umask=022          #表示设置匿名用户的umask值
        anon_max_rate=500000    #表示对匿名用户的传输速率进行限制,单位为字节。
 
    重启服务:service  vsftpd  restart(reload)
 
 
3.2、在客户端使用匿名用户访问测试
 
此时匿名用户可以新建文件夹,可以上传文件,如下图:
 
        
 
 
 
4、配置本地用户上传和下载
 
(1)vsftpd可以直接使用Linux系统的本地用户作为FTP用户。
使用本地用户登录FTP服务器后,默认将位于用户自己的主目录中,且具有读写权限。
如利用test用户访问ftp,那么默认将进入到的目录是/home/test。                    
    
 
创建系统用户,并设置密码,并在主目录中放置一个测试文件:
        useradd  ftptest   
        passwd      ftptest
        echo ‘ftp test’ > /home/ftptest/ftptest.txt
 
创建系统用户test,并设置密码:
        useradd  test
        passwd   test
 
 
(2)实现的场景一:允许用户test登录,且登录成功后位于自己的家目录中。不允许ftptest用户登录
配置参数:
  anonymous_enable=NO 
  local_enable=YES  
  write_enable=YES  
  chroot_local_user =YES       
  chroot_list_enable=NO        
  chroot_list_file=/etc/vsftpd/chroot_list    
  local_umask=022    
 userlist_enable=YES
 userlist_deny=NO
 
将test用户加入到 /etc/vsftpd/user_list文件。
[root@test vsftpd]# vi /etc/vsftpd/user_list
test
 
[root@test ~]# cd /home/test/
[root@test test]# ls
test.txt       新建文件夹
 
 
测试:
 
 
(3)实现场景二:允许ftptest用户登录,登录成功后位于/data目录,禁止test用户登录。
  anonymous_enable=NO 
  local_enable=YES  
  write_enable=YES  
  chroot_local_user =YES       
  chroot_list_enable=NO        
  chroot_list_file=/etc/vsftpd/chroot_list    
  local_umask=022    
 userlist_enable=YES
 userlist_deny=NO
local_root=/data
 
将ftptest用户加入到 /etc/vsftpd/user_list文件。从此文件中删除test用户。
[root@test vsftpd]# vi /etc/vsftpd/user_list
ftptest
 
 
 
 
配置参数解释:
  • anonymous_enable=NO     //禁止匿名用户登录
  • local_enable=YES                //是否允许本地系统用户访问
  • write_enable=YES               // 表示允许允许匿名用户或系统用户具有写入权限
  • chroot_local_user =YES      // 本地用户在访问时只能访问自己家目录
  • chroot_list_enable=NO       //指定一些用户访问限止在自己的home目录下,就是只能访问自己的家目录
  • chroot_list_file=/etc/vsftpd/chroot_list    //在/etc/vsftpd/chroot_list文件中中列出的是被限制的用户的列表,文件不存在得新建
  • local_umask=022               // 设定本地用户上传文件所用的掩码。
  • local_root=/data           //设置用户登陆时是访问ftp服务的主目录/data
        
 
对于chroot_local_user与chroot_list_enable的组合效果,可以参考下表:
 
chroot_local_user=YES
chroot_local_user=NO
chroot_list_enable=YES
1、所有用户都被限制在其主目录下; 2、使用chroot_list_file指定的用户列表,这些用户作为“例外”,不受限制
1、所有用户都不被限制其主目录下;
2、使用chroot_list_file指定的用户列表,这些用户作为“例外”,受到限制
chroot_list_enable=NO
1、所有用户都被限制在其主目录下; 2、不使用chroot_list_file指定的用户列表,没有任何“例外”用户
1、所有用户都不被限制其主目录下; 
2、不使用chroot_list_file指定的用户列表,没有任何“例外”用户
 
 
(4)关于用户访问控制
 
    vsftpd中提供了2个与本地用户相关的配置文件:
    /etc/vsftpd/ftpusers
    /etc/vsftpd/user_list
 
 
       /etc/vsftpd/ftpusers,包含的用户账号将被禁止登录vsftpd服务器,不管该用户是否在/etc/vsftpd/user_list文件中出现。
                通常将root、bin、daemon等特殊用户列在该文件中,禁止用于登录FTP服务。
 
       /etc/vsftpd/user_list,该文件中包含的用户账户可能被禁止登录,也可能被允许登录,具体在主配置文件vsftpd.conf中决定。
                    当存在“userlist_enable=YES”的配置项时,/etc/vsftpd/user_list文件生效。如果配置“userlist_deny=YES”,则
                    仅禁止列表中的用户账户登录,如果配置“userlist_deny=NO”,则仅允许列表中的用户账户登录。
    
    userlist_enable=YES 是系统的默认设置,表示启用userlist用户列表。
    userlist_deny=NO  是我们后来添加的,表示只允许列表中的用户登录。
     
 
 
 
 
5、配置FTP虚拟用户下载和上传(多个虚拟用户通过本地用户进行登录)
    所谓虚拟账户是指:存放于独立数据库文件中的FTP用户账户,可以将他们映射到某个不能登录的系统用户账号上,进一步增强FTP服务器的安全性
    
     (1)、创建虚拟用户数据库文件
    使用db_load命令工具创建Berkeley  DB格式的数据库文件。db_load工具由db4-utils软件包提供。安装db4_utils组件。
    
  
  建立一个文本格式的用户名/密码 列表文件,用于存放虚拟用户账号。文件名可以随意,文件一般保存在/etc/vsftpd目录
   [root@test ~]#  vim  /etc/vsftpd/login.txt
        harry
        123
        natasha
        123        # 文件中的奇数行表示用户名,偶数行为上一行用户所对用的密码。
    
    以此文件为数据源通过db_load工具创建出Berkeley DB格式的数据库文件:
        [root@test ~]#  cd /etc/vsftpd/
        [root@test ~]#  db_load      -T  -t  hash  -f   logins.txt  logins.db
    
    db_load命令是一种固定用法,其中的“-T”选项表示允许非Berkeley DB的应用程序使用从文本格式转换的DB数据库文件,“-t   hash”选项指定读取数据文件的基本方法,“-f”选项用于指定数据的源文件。
 
    最后为了提高虚拟用户账号的安全性,最好将这两个存放虚拟用户账号的文件的权限都设为600,即只有root用户具有读取和写入权限。
        chmod   600    logins.txt
        chmod   600   logins.db
 
      (2)创建虚拟用户的映射账号
    vsftpd服务对虚拟用户其实是采用了映射的控制方式,把所有的虚拟用户账号都对应到了同一个系统用户账号上,并将这个系统用户的主目录作为所有虚拟用户登录后共用的FTP根目录。
 
      useradd  -d  /var/ftproot  -s  /sbin/nologin   virtual
      chmod    755  /var/ftproot
      在useradd命令中,利用-d选项指定了用户的主目录,利用-s选项禁止用户登录。然后再修改目录权限,使得其他用户可以访问。
 
      (3)创建PAM认证文件
      对虚拟用户的身份认证是通过PAM机制来实现的,PAM是Linux系统中的一个独立API(应用程序接口),它提供了各种验证模块以供其它程序调用。
        当这些程序需要进行用户身份验证的操作时,就可以直接调用PAM的相应模块,而无需由自己来提供验证功能。所以PAM在Linux系统中提供了统一的身份验证机制。
    
        PAM的认证文件都统一存放在/etc/pam.d/目录中,下面我们在这个目录中创建一个FTP虚拟用户的认证文件:
        vim    /etc/pam.d/vsftpd.vu【新建文件】
        auth         required      pam_userdb.so      db=/etc/vsftpd/logins
        account      required     pam_userdb.so     db=/etc/vsftpd/logins
      在文件中,通过“db=/etc/vaftpd/logins”参数指定了要使用的虚拟用户数据库文件的位置,注意这里不需要写“.db”     的扩展名。
 
      (4)修改vsftp配置,添加虚拟用户支持
        原有配置:
        anonymous_enable=NO
        local_enable=YES *     #由于需要映射本地用户,所以此项必须启用
        write_enable=YES *    #表示允许写入。
        local_umask=022
        pam_service_name=vdftpd
        tcp_wrappers=YES
        userlist_enable=YES
        anon_umask=022 *  #在vsftpd服务中,虚拟用户被默认作为匿名用户进行处理以降低权限 ,因此对应的配置项通常以anon_开头
        anon_max_rate=500000
      
        
       
 添加:
        guest_enable=YES    #表示启用虚拟用户映射功能
        guest_username=virtual        #表示指定所映射的系统用户名称
        pam_service_name=vsftpd.vu    #表示指定PAM认证文件
        user_config_dir=/etc/vsftpd/vuser    #表示虚拟用户配置文件的存放目录。
     
       (5)创建虚拟用户配置文件
         为了对虚拟用户进行精确控制,实现不同用户拥有不同的权限,还需要为每个虚拟用户建立独立的配置文件,在vsftpd.conf配置文件中我们已经指定了虚拟用户配置文件的存放位置/etc/vsftpd/vuser。
        
        下面我们首先创建虚拟用户配置文件存放目录,然后为harry用户创建配置文件,文件名即是用户名:
        mkdir  /etc/vsftpd/vuser
        cd   /etc/vsftpd/vuser
        vim   harry
        然后设置允许harry用户上传,设置方法同匿名用户:    
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES
        
        再为natasha也创建一个配置文件,如果natasha只允许下载,那么只需要有一个配置文件即可,文件内容保持空白。
        touch natasha
 
           重启服务:service  vsftpd  restart
 
        这样虚拟用户便全部设置好了,harry用户具有下载和上传的权限,而natasha只能下载不能上传。
        
      
(6)登录测试
      
 
        
防火墙的配置:
        添加规则:
        iptables  -t  filter  -A INPUT  -s  192.168.0.0/16  -p  tcp  --dport  21  -j  ACCEPT        
 
SElinux配置
        set  -P  allow_ftpd_anon_write  on
        set   -P  allow_ftpd_full_access   on
        set   -P  ftp_home_dir   on
 
 

posted on 2019-08-29 16:04  春风亭牛二哥  阅读(4746)  评论(0编辑  收藏  举报

导航