Vsftp服务基础

  1. 用户控制列表文件ftpusers和user_list

    ftpusers:将被禁止登录ftp服务器

    user_list:可能被禁止,具体取决于vsftpd.conf,

      当userlist_enable=YES,user_list文件生效,表示禁用

       当userlist_enable=NO,user_list文件失效,表示此文件内的用户可以登陆

       当userlist_deny=YES,仅禁用user_list的用户登录

       当userlist_deny=NO,仅允许user_list的用户登录

  2. 主配置文件vsftp.conf

    在vsftpd的主配置文件中,配置行采用“配置项=参数”的格式。下面是vsftpd.conf文件中常见的一些配置项及含义说明。


    配置示例
    含义说明
    匿名用户
    anonymous_enable=YES
    是否允许匿名访问
    anon_umask=022
    设置匿名用户上传文件的默认权限
    anon_root=/var/ftp
    设置匿名用户的FTP根目录(缺省为/var/ftp/)
    anon_upload_enable=YES
    是否允许匿名用户上传文件
    anon_mkdir_write_enable=YES
    是否允许匿名用户创建目录的写入权限
    anon_other_write_enable=YES
    是否允许匿名用户有其他的写入权限。比如文件覆盖,删除,更改
    anon_max_rate=0
    限制匿名用户最大传输速度,单位为字节
    本地用户
    local_enable=YES
    是否允许本地系统用户访问
    local_umask=022
    设置本地用户所上传文件的默认权限掩码值
    local_root=/var/ftp
    设置本地用户的FTP根目录(缺省为用户的宿主目录)
    chroot_local_user=YES
    是否将FTP用户禁锢在宿主目录中
    local_max_rate=0
    限制用户的最多传输速率(0为无限制),单位默认为字节
    全局配置 listen=YES
    是否以独立运行的方式监听服务
    listen_port=21
    设置监听FTP服务的端口号
    write_enable=YES
    启用任何形式的写入权限(如上传、删除文件等)都需要开启此项
    download_enable=YES
    是否允许下载文件(建议仅限于浏览、上传的FTP服务器时可将其设为NO)
    dirmessage_enable=YES
    用户切换进入目录时显示.message文件(如果存在)的内容
    xferlog_enable=YES
    启动xferlog日志,默认记录在“\var\log\xferlog”文件
    xferlog_std_format=YES
    启用标准的xferlog日志格式若禁用此项,将使用vsftpd自己的日志格式
    dual_log_enable=YES
    启用采用VSFTPD自己的日志记录方式
    log_ftp_protocol=YES
    记录所有的ftp命令日志
    syslog_enable=YES
    是否将在日志信息写入系统日志(/var/log/messages中)
    connect_from_port_20=YES
    允许服务器主动模式(从20端口建立数据连接)
    pasv_enable=YES
    允许被动模式连接
    pasv_max_port=24600
    设置用于被动模式的服务器最大端口号
    pasv_min_port=24500
    设置用于被动模式的服务器最小端口号
    pam_service_name=vsftpd
    设置用于用户认证的PAM文件位置(/etc/pam.d/目录中对应得文件名)
    userlist_enable=YES
    是否启用user_list用户列表
    userlist_deny=YES
    是否禁用user_list列表文件中的用户账号
    max_per_ip=0
    对于来自相同IP地址的客户端,最多允许多个并发连接(0无限制)
    tcp_wrappers=YES
    是否启用TCP_Wrappers主机访问控制(TCP Wrappers的应用将在后续讲解)
    ssl_enable=YES

    allow_anon_ssl=NO

  3. 安装前检查环境

    检查版本安装vsftpd:#rpm -qa |grep vsftpd

    检查安装版本信息:#rpm -qv vsftpd

    检查配置防火墙:开放TCP21端口

    最好关闭selinux

  4. 启动vsftpd前的配置

    以下俩个操作时在启动前进行配置,如果没有配置则无法正常登陆vsftpd服务器,如果使用Centos6.x之前的版本则只需要关闭SELinux

    #setsebool ftpd_disable_trans 1                 #解除SELinux保护

    #setsebool -P ftp_home_dir=1                    #解除无法列出服务器目录的情况

    如果没有#setsebool -P ftp_home_dir=1则,当连接FTP时出现

    500 OOPS: change directory:/home/ftp

    500 OOPS: 500 OOPS:Child died

  5. Vsftpd特殊属性配置参数(均在vsftpd.conf完成)

    pasv_enable=no#将FTP设为被动模式

    local_max_rate=300000#限制上传下载为300K,1KB=1000Btyes

    1. 配置特定用户的带宽

      #vi /etc/vsftpd/vsftpd.conf

      user_config_dir=/etc/vsftpd/limit#默认没有,必须加

      #mkdir /etc/vsftpd/limit#创建管理用户带宽的配置文件夹

      #vi /etc/vsftpd/limit/ken#创建针对ken用户上传带宽的限制的配置文件

      local_max_size=300000#配置ken用户带宽为300KB

    2. 限制客户端可连接的IP地址利用tcp_wrappers host.deny host.allow

      #vi /etc/vsftpd/vsftpd.conf

      tcp_wrappers=YES#检查是否为YES

      #vi /etc/hosts.deny#编辑限制配置文件

      vsftpd:all:Deny#限制所有网段都不可连接

    3. #vi /etc/hosts.allow

      vsftpd:192.168.233.*:Allow#开发192.168.233网段可以连接

    4. 限制黑名单用户

      #vi /etc/vsftpd/vsftpd.conf

      userlist_enable=YES#默认为YES,如果为NO则黑名单不生效

      #vi /etc/vsftpd/user_list         #编辑黑名单

    5. 禁止用户切换目录

      #vi /etc/vsftpd/vsftpd.conf

      chroot_local_user=YES         #默认不启用,去掉#表示启用

  6. 建立基于虚拟用户的vsftpd服务安装与配置

    1. 安装支持虚拟用户插件

      #yum -y install db4-utils

    2. 建立用户名密码列表文件

      #vi /etc/vsftpd/vusers.list

      mike#用户

      123#对应密码

      yilang#用户

      123#对应密码

    3. 使用db_load工具将列表文件转化为DB数据库文件

      #cd /etc/vsftpd/

      #db_load -T -t hash -f vusers.list vusers.db

    4. 建立FTP访问的根目录虚拟用户对应的系统账号

      #useradd -d /var/ftproot -s /sbin/nologin virtual

      chmod 755 /var/ftproot/         #上传下载目录存放地

      ls -lh /boot/ > /var/ftproot/vutest.file#建立测试文件

    5. 建立PAM认证文件

      #vi /etc/pam.d/vsftpd.vu

      #%PAM-1.0

      auth    required        pam_userdb.so db=/etc/vsftpd/vusers

      account required        pam_userdb.so db=/etc/vsftpd/vusers

    6. 修改vsftpd.conf,添加虚拟用户支持

      #vi /etc/vsftpd/vsftpd.conf

      anonymous_enable=NO

      local_enable=YES         #使用虚拟用户需要启动本地

    7. write_enable=YES         #启用任何形式的写入权限

      anon_umask=022         #文件上传的权限

      guest_enable=YES#启用映射

      guest_username=virtual#将映射用户指导virtual

      pam_service_name=vsftpd.vu#修改使用PAM文件位置

  7. 创建完虚拟用户之后所有虚拟用户登陆权限都相同,需要为不同的虚拟用户建立独立的配置文件(权限)

    1. 为yilang的虚拟用户建立独立的配置文件

      #vi /etc/vsftpd/vsftpd.conf

      user_config_dir=/etc/vsftpd/vusers_dir

      #mkdir /etc/vsftpd/vusers_dir/

      cd /etc/vsftpd/vusers_dir/

      #vi yilang

      local_root=/ftpdatavg1fs/ftproot/yilang     #使用户不能离开主目录(禁锢)

      anon_upload_enable=YES     #可上传

      anon_mkdir_write_enable=YES     #可创建文件夹

      anon_other_write_enable=YES     #是否允许匿名用户有其他的写入权限。比如文件覆盖,删除,更改

  8. 后期操作维护

    1. 添加虚拟账户

      例如:添加zhangsan虚拟账户,分配只能上传权限;并且禁止离开主目录

      #vi /etc/vsftpd/vusers.list

      zhangsan        #账户名

      123456          #密码

      #db_load -T -t hash -f vusers.list vusers.db#刷新DB数据库

      分配zhangsan的登录权限

      1.配置主配置文件

        #vi vsftpd.conf

        chroot_list_enable=YES

      2.建立zhangsan的独立根目录文件

        #mkdir /ftpdatavg1fs/ftproot/zhangsan                        #

        #chown -R virtual.virtual /ftpdatavg1fs/ftproot/zhangsan    #注意一定要给权限

      3.配置虚拟指定用户根目录,这里以zhangsan为例

        #vi /etc/vsftpd/vuser_dir/zhangsan            #配置权限文件

        local_root=/ftpdatavg1fs/ftproot/zhangsan     #指定根目录

        anon_upload_enable=YES                        #可上传

      #service vsftpd reload

    2. 修改虚拟用户密码

      例如:修改zhangsan密码为163.com

         #vi /etc/vsftpd/vusers.list#在配置文件修改zhangsan下一行的字符

         zhangsan

         123456    修改为163.com保存退出

      #db_load -T -t hash -f vusers.list vusers.db#刷新DB数据库

      #service vsftpd reload

  9. Vsftp的使用SSL/TLS加密传输(安装与配置)

    1. ftp默认的传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题

    2. 检查vsftp是否支持SSL:从2.0.0版本开始,vsftpd支持命令连接和数据连接的加密传输。vsftpd服务器版本查看:rpm -qa vsftpd    输出:vsftpd-2.2.2-11.el6.i686

    3. 检查vsftp是否支持SSL:ldd /usr/sbin/vsftpd | grep libssl,如果输出类似与libssl.so.10 => /usr/lib/libssl.so.10 (0x00dfb000),那么支持。如果不支持,那么重新编译vsftp,然后再重新安装

    4. 用openssl生成vsftpd的证书:openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/certs/vsftpd.pem -out /etc/pki/tls/certs/vsftpd.pem

    5. 修改vsftpd.conf,设置强制启用ssl

      vsftpd配置文件支持SSL设置

      ssl_enable=YES

      allow_anon_ssl=NO

      force_local_data_ssl=YES

      force_local_logins_ssl=YES

      ssl_tlsv1=YES

      ssl_sslv2=NO

      ssl_sslv3=NO

      ssl_ciphers=HIGH

      rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem

      #implicit_ssl=no             // 是否启用隐式ssl功能,不建议开启

      #listen_port=990             // 隐式ftp端口设置,如果不设置,默认还是21,但是当客户端以隐式ssl连接时,默认会使用990端口,导致连接失败!!

      #debug_ssl=YES               // 输出ssl相关的日志信息