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
 
 

Linux中FTP服务器配置的更多相关文章

  1. Linux中ftp不能上传文件/目录的解决办法

    在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法   在排除用户组和权限等问题后,最可能引 ...

  2. linux中FTP自动备份VPS脚本

    服务器多了,网站也越来越多,总觉得不整个备份心里放不下心,并且有好几次rm的操作失误,造成难以挽回的损失.并且大多数的VPS提供商是不提供自动备份功能或者此功能收费价格略高.所以自己还是有必要把这个工 ...

  3. linux中ftp中文名乱码问题

    问题触发环境 1. java中使用org.apache.commons.net.ftp.FTPClient包 2. 通过chrome浏览器的file标签上传文件 3. 在windows上部署的File ...

  4. Linux中ftp服务器搭建

    一.FTP工作原理 (1)FTP使用端口 [root@localhost ~]# cat /etc/services | grep ftp ftp-data 20/tcp #数据链路:端口20 ftp ...

  5. Linux中ftp的常用命令

    转自:https://www.jb51.net/article/103904.htm FTP命令 ftp> ascii # 设定以ASCII方式传送文件(缺省值) ftp> bell # ...

  6. Linux中FTP远程传输,SSH远程连接,以及SCP远程拷贝

    常用服务器ftp.ssh 1. Linux常用服务器构建-ftp服务器 ftp服务器 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”. 用于 ...

  7. linux中ftp配置文件详解

    vsftpd配置文件采用"#"作为注释符,以"#"开头的行和空白行在解析时将被忽略,其余的行被视为配置命令行,每个配置命令的"="两边不要留 ...

  8. Linux中ftp服务器的安装与部署

    一.ftp简介FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.其中FTP ...

  9. Linux中FTP服务器的搭建

    vmware12上安装的CentOs6.8,最终实现物理机上的windows10能正常访问CentOs上的FTP服务器. 一.查看是否安装有ftp相关的安装包. # rpm -qa | grep vs ...

随机推荐

  1. Java Web开发中路径问题小结(getRequestUrl getContextUrl getServletUrl)

    看以博客感觉不错,分享一下http://www.cnblogs.com/tianguook/archive/2012/08/31/2665755.html (1) Web开发中路径的几个基本概念 假设 ...

  2. 重启 hdfs and yarn datanode

    1- start-all.sh and stop-all.sh: Used to start and stop hadoop daemons all at once. Issuing it on th ...

  3. BOM Summary P268-P269

    The Browser Object Model(BOM) is based on the window object, which represents the browser window and ...

  4. CentOS 安装jdk 1.8

    方法一:手动解压JDK的压缩包,然后设置环境变量   1.在/usr/目录下创建java目录  [root@localhost ~]# mkdir/usr/java [root@localhost ~ ...

  5. 反爬虫2(代理ip)

    在进行爬虫访问时,被访问主机除了会校验访问身份,还会校验访问者的ip, 当短时间同ip大量访问时,主机有可能会拒绝 返回,所以就现需要代理ip, 百度中可以获取到大量的免费的代理ip(ps:注意在访问 ...

  6. Swool的安装与使用

    1.swoole的安装 //php最好用7.2以上的.直接去网站下载下来,然后与php一样编译安装. git下来后,因为没有config文件,故先在swool下载目录下执行: /.../php/bin ...

  7. Git和Github的使用

    Git和Github的基本操作 一.了解Git和Github 1.什么是GIT? Git是一个免费.开源的版本控制软件 2.什么是版本控制系统? 版本控制是一种记录一个或若干个文件内容变化,以便将来查 ...

  8. php aes加解密,mcrypt_encrypt 和openssl_encrypt

    php7.1以下版本使用 /* * mcrypt_encrypt 加密 * php7.1开始被丢弃 可以使用openssl_encrypt * */ function aes_encrypt($con ...

  9. python协程gevent案例:爬取斗鱼美女图片

    分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...

  10. CSS(下)

    目录 CSS(下) CSS属性相关 宽和高 字体属性 背景属性 边框 border-radius display属性 CSS盒子模型 margin外边距 padding内填充 浮动(float) 限制 ...