FTP服务器介绍和配置

来源:互联网 发布:淘宝天猫摇一摇在哪里 编辑:程序博客网 时间:2024/06/05 08:09

原文地址:http://www.178linux.com/4450

一、 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客户端访问数据库。我在这里被坑了好几天。



0 0
原创粉丝点击