ftp服务器介绍与配置

一、 ftp服务,File Transfer Protocal 文件传输协议 

    1. ftp基于tcp协议,C/S架构 

        Server: wu-ftpd, proftpd ,pureftp,vsftpd:(Very Secure ftpd),IIS,ServU

        Client:

            GUI: flashfxp,cuteftp,filezilla(开源), gftp(Linux)

            CLI:ftp, lftp,wget, lftpget

    2. ftp的传输机制

            1) 命令连接和数据传输连接

ftp模型.png 

  最开始,只建立命令连接,当执行get命令时,开启另一端口建立文件传输连接,如果get多个文件,则建立多个连接。文件传输结束时,拆除相应的文件连接。 

            2) 数据连接的主动模式和被动模式 

                 主动和被动连接.png

主动连接:通常客户端会装有防火墙,不允许别人主动对客户端发起连接

被动连接:可以通过服务器端连接追踪机制来解决防火墙问题,无论访问哪个端口,端口必须和已经建立的链接产生关系。 

            主动模式下: 服务器工作在20号端口 

            被动模式下: 服务器工作在随机端口  

    3. 传输数据: 

            流式话数据: 可以存入硬盘

                                文本文件, 二进制文件 等

    

    4. 用户认证机制: 

        1) 系统用户

        2) 虚拟用户。通常存放在文件或者数据库中

                hash file 

                mysql 

        3) 匿名用户 

    5. 数据传输安全机制: 

        sftp :ssh提供基于ssh协议的ftp服务

        ftps :基于ssl的ftp 

    7. 响应码 

            1xx:信息码 

            2xx:成功状态吗 

            3xx:进一步提示补全信息的状态 

            4xx:客户端错误

            5xx:服务器端错误

二、 vsftpd 安装和配置 

     1. 安装vsftpd 

    # yum -y install vsftpd

      2. 重要的目录

    /etc/pam.d/vsftpd              认证文件存放目录    
    /etc/rc.d/init.d/vsftpd        服务脚本
    /usr/sbin/vsftpd               主程序文件 
    /etc/vsftpd/vsftpd.conf        主配置文件 
    /etc/vsftpd/ftpusers           用户黑名单
    /etc/vsftpd/user_list          用户限制名单 userlist_deny=NO 仅允许此名单用户登录,userlist_deny=YES 不允许用户名单的用户登录
    /var/ftp/pub                   共享文件所在位置

      3.  关于pam的认证文件

    ## 文件所在位置/etc/pam.d/vsftpd 关于认证文件 
        pam: Plugable Authentication Module: 插件式认证模块 
            1) nsswitch: 名称解析框架 
                模块: /lib64/libnss* , /usr/lib64/libnss* 
                配置文件: /etc/nsswitch.conf 
            2) 用户认证框架 
                模块化:/lib64/security/pam*.so 
                配置文件:/etc/pam.conf 和 /etc/pam.d/*

       4. chroot选项

    ## 对于ftp用户访问ftp服务时使用chroot禁锢用户 
    ## 在主配置文件/etc/vsftpd/vsftpd.conf中配置启动
        chroot_local_user=YES                         对于本地用户使用chroot, 将会把其家目录作为其root目录 
        chroot_list_enable=YES                        chroot_list里面的用户不受chroot影响 
        chroot_list_file=/etc/vsftpd/chroot_list      不受chroot指令的例外用户列表,需要手动添加,每行一个用户名。如果没有这个文件链接会失败

  chroot开启前效果 

                                        before_chroot.png

ftp登录用户可以进入系统根目录

chroot开启后效果 

                                       after_chroot.png

开启后,用户的家目录被当做root了

        5. 关于匿名用户的配置 

    anonymous_enable=YES                    允许匿名用户登录     
    anon_upload_enable=YES                  允许匿名用户上传文件
    anon_other_write_enable=YES             允许匿名用户执行其他写权限 
    anon_mkdir_write_enable=YES             允许匿名用户创建文件夹 

    ## 此时的权限为ftp用户配置的权限叠加文件本身权限总和的效果 
    ## 如果文件本身权限不允许其他用户修改,基本vsftpd.conf配置了匿名用户可修改,结果依然不能修改 
    ## 文件夹也一样,如果想要允许匿名用于在pub上传文件,需要将其other权限添加+w

         6. vsftp 控制登录用户的机制 

    ## /etc/vsftpd/ftpusers中的用户都不允许使用ftp服务, 这是在/etc/pam.d/vsftpd中定义;/etc/pam.d/vsftpd 中应该有如下一行        
        auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
    ## /etc/vsftpd/user_list文件两种配置方法        
        ## 黑名单:
        userlist_enable=YES
        userlist_deny=YES
        ## 白名单
        userlist_enable=YES
        userlist_deny=NO

          7. 链接限制

        max_clients: 最大并发连接数        
        max_per_ip: 每IP可同时发起并发请求

          8. 传输速率 

        anon_max_rate: 匿名用户的最大传输速率,单位是“字节/秒”        
        local_max_rate: 本地用户最大传输速率, 单位是“字节/秒”

          9. 匿名用户上传的文件自动转换属主和属组 

        chown_uploads=YES
        chown_username=someuser  ## 使用特定用户作为上传的文件的属主,并使用其所在的组当做属组

          10. 上传文件的umask 

        anno_umask: 匿名用户上传文件的umask; 
        local_umask:

           11. 欢迎信息  

        banner_file=/path/to/some_banner_file        
        ftp_banner=some string
        dirmessage_enable=yes ## 需要在某ftp可访问的目录下创建.messages文件

           12. 虚拟用户: 所有虚拟用户都会被映射为一个系统用户, 访问时文件目录为此系统用户的家目录 

                  虚拟用户认证机制: hash编码的文件,奇数行为用户名,偶数行尾秘密

                  关系型数据库: pam-mysql第三方模块认证 

三、 详解配置虚拟用户 

    1. 安装mysql和pam_mysql(epel源提供) 

    # yum -y install vsftpd mysql-server mysql-devel pam_mysql

    2. 创建虚拟用户账号所映射的系统用户 

    # useradd -s /sbin/nologin -d /var/ftproot vuser     
    # chmod go+rx /var/ftproot

    3. 在数据库中添加虚拟用户

    mysql> create database vsftpd;    
    mysql> grant select on vsftpd.* to vsftpd@192.168.98.128 identified by 'vsftpd';
    mysql> flush privileges;
    mysql> insert into users(name,password) values('tom',password('tom'));
    mysql> insert into users(name,password) values('jerry',password('jerry'));

     4. 配置pam认的配置文件

    auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=192.168.98.128 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2    
    account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=192.168.98.128 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

    ## 这里说明一下,host是vsftpd所在主机的主机地址,同时也是在mysql中被授权访问的主机地址。vsftpd会通过借助pam访问数据库获取数据。而vsftpd所在的主机为192.168.98.128,这里的host也是这个。 如果把vsftpd放在其他主机上与数据库分开管理也是可以的。 
    ## crypt 加密方式
    ##  0 明文
    ##  1 Y 
    ##  2 为mysql中的password()函数加密 
    ##  3 md5
    ##  4 sha1

       5. 配置vsftpd配置文件

    ## 主要添加下面三行    
        # vim /etc/vsftpd/vsfptd.conf 
        guest_enable=YES                    ## 允许使用虚拟用户
        guest_username=vuser                ## 虚拟用户映射为vuser系统用户
        pam_service_name=vsftpd.mysql       ## pam配置文件位置为/etc/pam.d/vsftpd.mysql 

    ## 下面是一些vsftpd的基本选项 
        anonymous_enable=YES
        local_enable=YES
        write_enable=YES
        anon_upload_enable=NO
        anon_mkdir_write_enable=NO
        chroot_local_user=YES

    ## 另外每个虚拟用户的单独权限可以在 /etc/vsftpd/vuser/ 配置
        例如:
        # vim /etc/vsftpd/vuser/tom  写下一下几行
        anon_upload_enable=YES
        anon_mkdir_write_enable=YES

        6. 重启vsftpd服务,测试效果 

    # service vsftpd restart     
    在另一个台主机上 
    # ftp 192.168.98.128 
        Connected to 192.168.98.128 (192.168.98.128).
        220 (vsFTPd 2.2.2)
        Name (192.168.98.128:root): tom
        331 Please specify the password.
        Password:
        230 Login successful.
        Remote system type is UNIX.
        Using binary mode to transfer files.
        ftp> 
    测试成功。

        7. 常见的不能正常认证的错误 

            1) iptables 忘记关,selinux没有disable :此时通常的错误是数据库无法访问 

            2) 虚拟用户无法认证: 有可能是加密方式没有设置统一 

            3) 数据库没法连接, 数据库访问的用户和主机要和pam文件的用户主机统一,一定要明确,是vsftpd借助pam访问数据库,而不是ftp客户端访问数据库。我在这里被坑了好几天。

原创文章,作者:以马内利,如若转载,请注明出处:http://www.178linux.com/4450

(0)
以马内利以马内利
上一篇 2015-06-21 18:50
下一篇 2015-06-21 21:24

相关推荐

  • 不重启添加硬盘

    添加硬盘后 ls /dev/sd* 不重启添加硬盘 [root@localhost ~]# cd /sys/class/scsi_host/ [root@localhost scsi_host]# ls host0  host1  host2 [root@localhost scsi_host]# echo “- – -”…

    Linux干货 2017-10-21
  • 计算1000以内的总质数个数

    #include <stdio.h> int main() { int micro[500]; // 质数保存素组 int number = 0; // 质数个数 micro[number++] = 2; // micro[0]=2 micro[number++] = 3; // micro[1]=3, number=2 unsigned lon…

    Linux干货 2017-03-22
  • SHELL编程之数组运用及YUM软件包管理

    SHELL编程中,当要引用到多个值的时候,一个一个地进行变量赋值会让我们的脚本变得繁琐,不利于代码的优化,所以,就需要通过数组进行定义,优化代码,减少不必要的定义和命令操作。 SHELL中的数组:存储多个元素的连续内存空间 数组名:整个属组只有一个名字 数组索引: 编号从0开始   数组名[索引]   ${array_name[index…

    Linux干货 2016-08-24
  • HTTPD-相关的配置

    一次完整的HTTP请求处理过程: 1、建立连接:接收或拒绝链接请求 2、接受请求:接收客户端请求报文中对某资源的一次请求的过程 Web访问响应模型(Web I/O) 单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请 求被串行响应; 多进程I/O模型:并行启动多个进程,每个进程响应一个链接请求; 复用I/O结构:启动一个进程,同时响应N个…

    2017-08-29
  • 作业权限管理

    一、在/data/testdir里创建的新文件自动属于g1组,组g2的成员如:alice能对这些新文件有读写权限,组g3的成员如:tom只能对新文件有读权限,其它用户(不属于g1,g2,g3)不能访问这个文件夹。 首先创建三个组g1,g2,g3,题目要求在/data/testdir目录里创建的文件自动属于g1组那么首先要将这个目录的属组改为g1,然后通过更改…

    Linux干货 2016-08-03
  • 20161021第6天作业

    20161021第6天作业 1、将PATH变量每个目录显示在独立的一行  echo "$PATH" |tr ':' '\n' 2、将指定文件中0-9分别替代成a-j tr '0-9' 'a-j' <文件 3、将文件中每个单词(由字母组成)显示在…

    Linux干货 2016-10-23