天天看点

编译安装 vsFTP 3.0.3

编译安装 vsFTP 3.0.3
  • 漏洞详情

VSFTP是一套基于GPL发布的类Unix系统上使用的FTP服务器软件。该软件支持虚拟用户、支持两种认证方式(PAP或xinetd/tcp_wrappers)、支持带宽限制等。

VSFTP中存在安全漏洞,该漏洞源于程序没有正确处理‘deny_file’选项。远程攻击者可利用该漏洞绕过访问限制。

以下产品及版本受到影响:VSFTP3.0.2及之前版本,opensuse13.1版本和13.2版本。

  • 受影响的产品

Vsftpd Vsftpd 3.0.2

编译安装 vsFTP 3.0.3
  • FTP的登录一般有三种方式,分别是:
  • 匿名用户形式:默认安装的情况下,系统只提供匿名用户访问,只需要输入用户anonymous/ftp,并将自己的Email作为口令即可登录。
  • 本地用户形式:以/etc/passwd中的用户名为认证方式。
  • 虚拟用户形式:支持将用户名和密码保存在文件或数据库中,将登录用户映射到指定的系统账号(/sbin/nologin)来访问资源,其中这些虚拟用户是FTP的用户。
  • 实验环境: CentOS 7.5 192.168.2.3

  • firewalld、iptables 及 SElinux 均为关闭状态
  • 下面实验采用基于PAM的虚拟用户,需要先用yum来安装PAM的组件:
  • 需要使用 epel 源 
  • yum -y install epel-release && yum -y install pam pam-devel db4-utils
  • 在默认配置下 vsftpd 需要使用 nobody 用户
  • 从官网上下载 https://www.linuxfromscratch.org/blfs/view/svn/server/vsftpd.html
  • wget https://security.appspot.com/downloads/vsftpd-3.0.3.tar.gz
  • tar xf vsftpd-3.0.3.tar.gz
  • cd vsftpd-3.0.3/
编译安装 vsFTP 3.0.3
编译安装 vsFTP 3.0.3
编译安装 vsFTP 3.0.3
  • vsftpd的源码包里并没有configure文件,直接编译安装
  • make clean && make -j 4 && make install 
  • 如果编译的时候报错
  • /usr/bin/ld: cannot find -lcap
  • 查找该 .so 文件
  • find / -name "*libcap.so*"

    /usr/lib64/libcap.so.2.22

    /usr/lib64/libcap.so.2

  • ln -sv /usr/lib64/libcap.so.2 /usr/lib64/libcap.so
编译安装 vsFTP 3.0.3
  • 默认配置: 
  • 主程序文件:/usr/local/sbin/vsftpd
  • 主配置文件:/etc/vsfptd.conf
  • PAM认证文件:/etc/pam.d/vsftpd
  • 匿名用户主目录:/var/ftp
  • 匿名用户的下载目录:/var/ftp/pub
  • vsftpd的安全原则主要有两个:

  • 只允许支持虚拟用户登录,关闭本地用户和匿名用户。
  • 不允许使用root权限运行。
  • 创建配置文件存放目录
  • mkdir /etc/vsftpd
  • 拷贝新的配置文件到 /etc/vsftpd 目录
编译安装 vsFTP 3.0.3
  • 创建用户以及共享目录、目录权限
编译安装 vsFTP 3.0.3
  • 创建虚拟用户口令明文文件,使用前面安装的db4-utils组件生成口令认证文件: 
  • vim /etc/vsftpd/access.txt

    zhangsan   #用户名

    123456      #密码

    lisi

    123456

  • 使用前面安装的db4-utils组件生成口令认证文件:
  • db_load -T -t hash -f /etc/vsftpd/access.txt /etc/vsftpd/access.db
编译安装 vsFTP 3.0.3
  • 编辑vsftpd的PAM认证文件:
  • vim /etc/pam.d/vsftpd

    auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/access

    account required /lib64/security/pam_userdb.so db=/etc/vsftpd/access

编译安装 vsFTP 3.0.3
  • 编辑配置主文件 /etc/vsftpd/vsftpd.conf
  • cp /etc/vsftpd/vsftpd.conf{,.bak}
  • vim /etc/vsftpd/vsftpd.conf
  • #禁止匿名用户

    anonymous_enable=NO

    local_enable=YES

    write_enable=YES

    #不启动锁定用户名单,所有的用户都将被锁定不允许访问上级目录,只允许访问其主目录

    chroot_local_user=YES

    chroot_list_enable=NO

    #启动log

    xferlog_enable=YES

    xferlog_std_format=YES

    xferlog_file=/etc/vsftpd/vsftpd.log

    #开启虚拟用户

    guest_enable=YES

    #FTP虚拟用户对应的系统用户

    guest_username=vsftpd

    #PAM认证文件/etc/pam.d/vsftpd

    pam_service_name=vsftpd

    virtual_use_local_privs=YES

编译安装 vsFTP 3.0.3
  • 编写 vsftpd 启动 脚本:
  • /etc/init.d/vsftpd                                                                                                       

    #!/bin/bash

    #

    # vsftpd      This shell script takes care of starting and stopping

    #             standalone vsftpd.

    #

    # chkconfig: - 60 50

    # description: Vsftpd is a ftp daemon, which is the program

    #              that answers incoming ftp service requests.

    # processname: vsftpd

    # config: /etc/vsftpd/vsftpd.conf

    # Source function library.

    . /etc/rc.d/init.d/functions

    # Source networking configuration.

    . /etc/sysconfig/network

    # Check that networking is up.

    [ ${NETWORKING} = "no" ] && exit 0

    [ -x /usr/local/sbin/vsftpd ] || exit 0

    RETVAL=0

    prog="vsftpd"

    start() {

            # Start daemons.

            if [ -d /etc/vsftpd ] ; then

                    for i in `ls /etc/vsftpddisable = yes/g' /etc/xinetd.d/vsftpd

  • sed -in 's/disable.*=.*/disable = yes/g' /etc/xinetd.d/vsftpdn
编译安装 vsFTP 3.0.3
  • 启动 vsftpd
  • service vsftpd start
编译安装 vsFTP 3.0.3
  • 登陆测试
编译安装 vsFTP 3.0.3
编译安装 vsFTP 3.0.3
编译安装 vsFTP 3.0.3
编译安装 vsFTP 3.0.3
编译安装 vsFTP 3.0.3
  • 开机启动,重启测试
  • chkconfig vsftpd on
编译安装 vsFTP 3.0.3
编译安装 vsFTP 3.0.3

继续阅读