vaftpd源码安装及配置教程

准备工作:卸载系统自带的低版本vsftpd

rpm -e vsftpd yum install tcp_wrappers-devel libcap-devel -y

1.源码安装

 wget -p /usr/local/src/ https://security.appspot.com/downloads/vsftpd-3.0.2.tar.gz #需要×××

 cd /usr/local/src/ && tar xf vsftpd-3.0.2.tar.gz && vsftpd-3.0.2

 1)修改 builddefs.h文件

===========================

vim builddefs.h

#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H

#undef VSF_BUILD_TCPWRAPPERS

#define VSF_BUILD_PAM

#undef VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */

将以上undef的都改为define,支持tcp_wrappers,支持PAM认证方式,支持 SSL

即修改为如下:

=======================

#ifndef VSF_BUILDDEFS_H

#define VSF_BUILDDEFS_H

#defineVSF_BUILD_TCPWRAPPERS

#define VSF_BUILD_PAM

#define VSF_BUILD_SSL

#endif /* VSF_BUILDDEFS_H */

========================

 2)编译

   make

=============================

报错:

  tcpwrap.c: 在函数‘vsf_tcp_wrapper_ok’中:

  tcpwrap.c:29: 错误:‘req’的存储大小未知

  cc1: warnings being treated as errors

  tcpwrap.c:31: 错误:隐式声明函数‘request_init’

  tcpwrap.c:31: 错误:‘RQ_DAEMON’未声明(在此函数内第一次使用)

  tcpwrap.c:31: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其

  tcpwrap.c:31: 错误:所在的函数内也只报告一次。)

  tcpwrap.c:31: 错误:‘RQ_FILE’未声明(在此函数内第一次使用)

  tcpwrap.c:32: 错误:隐式声明函数‘fromhost’

  tcpwrap.c:33: 错误:隐式声明函数‘hosts_access’

  tcpwrap.c:29: 错误:未使用的变量‘req’

  make: *** [tcpwrap.o] 错误 1

原因:缺少tcp_wrappers-devel

解决:yum install tcp_wrappers-devel -y

报错:

  /usr/bin/ld: cannot find -lcap

  collect2: ld 返回 1

  make: *** [vsftpd] 错误 1

原因:缺少libcap-devel中包含的libcap.so文件

解决:yum install libcap-devel -y

=============================

 3)创建相应的用户及用户目录

   useradd -s /sbin/nologin nobody && mkdir /usr/share/empty  #vsftp默认用户目录

   mkdir /var/ftp  #ftp用户登录家目录

   useradd -d /var/ftp -s /sbin/nologin ftp && chown root.root /var/ftp && chmod og-w /var/ftp #ftp家目录权限设置

 4)安装vsftp

   make install

 5)使用独立守护进程管理vsftpd服务的启动

   vim /etc/xinetd.d/vsftpd

   把 disable=yes改成no

 或者做成独立服务的启动形式 

vim /etc/init.d/vsftpd chmod +x /etc/init.d/vsftpd

=============================

#!/bin/bash

 

#chkconfig: 345 60 50

#description:vsftpd

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

if [ -f /etc/init.d/functions ] ; then

. /etc/init.d/functions

elif [ -f /etc/rc.d/init.d/functions ] ; then

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

else

exit 0

fi

vsftpd=/usr/local/sbin/vsftpd      #vsftp启动脚本中配置vsftpd安装的路径

conf=/etc/vsftpd.conf

prog=vsftpd

RETVAL=0

start() {

        if [ -n "`/sbin/pidof $prog`" ]

        then

                echo "$prog: already running"       

                echo

                return 1

        fi

        echo "Starting $prog:"

        base=$prog

        $vsftpd $conf &

        RETVAL=$?

        usleep 5000000

        if [ -z "`/sbin/pidof $prog`" ]

        then

                RETVAL=1

        fi

        if [ $RETVAL -ne 0 ]       

        then

        echo "Startup failure"     #vsftp启动脚本启动失败提示

        else

        echo "Startup success"     #vsftp启动脚本启动成功提示

        fi

        echo

        return $RETVAL

}

 

stop() {

        echo "Stopping $prog:"

        killall $vsftpd

        RETVAL=$?

        if [ $RETVAL -ne 0 ]

        then

        echo "Shutdown failure"     #vsftp启动脚本停止失败提示

        else

        echo "Shutdown success"     #vsftp启动脚本停止成功提示

        fi

        echo

}

 

case "$1" in

start)

        start     #vsftp启动脚本服务启动操作

        ;;

stop)

        stop     #vsftp启动脚本服务停止操作

        ;;

status)

        status $vsftpd

        RETVAL=$?    #vsftp启动脚本服务状态

        ;;

restart)

        stop

        usleep 5000000    #vsftp启动脚本服务重启操作

        start

        ;;

*)

        echo "Usage: $prog {start|stop|restart|status}"

        exit 1

esac

exit $RETVAL

=============================================================

2.vsftp服务配置 参考:http://blog.csdn.net/junmuzi/article/details/8446060Linux如何配置ftp服务器、给ftp服务器添加访问用户   

                      http://hbzylm.blog.51cto.com/613851/970162 源码安装vsftp

                      

 1)本地用户登录的认证文件

   cp RedHat/vsftpd.pam /etc/pam.d/ftp  

   vsftpd的配置文件

   cp vsftpd.conf /etc/vsftpd.conf

   修改vsftpd.conf

======================================

#anonymous_enable=YES

#guest_enable=YES

#guest_username=ftp

pasv_min_port=30001

pasv_max_port=31000

# Uncomment this to allow local users to log in.

local_enable=YES

#传输速度限制,0表示不限制

local_max_rate=0

#最大客户端连接数

max_clients=5

#同一IP最大连接数

max_per_ip=5

write_enable=YES

local_umask=022

#anon_upload_enable=YES

#anon_mkdir_write_enable=YES

dirmessage_enable=YES

xferlog_enable=YES

connect_from_port_20=YES

#chown_uploads=YES

#chown_username=whoever

xferlog_file=/var/log/vsftpd.log

xferlog_std_format=YES

#idle_session_timeout=600

#data_connection_timeout=120

#nopriv_user=ftpsecure

#async_abor_enable=YES


ascii_upload_enable=YES

ascii_download_enable=YES

ftpd_banner=*

banner_file=/opt/welcome.txt


#deny_email_enable=YES

#banned_email_file=/etc/vsftpd.banned_emails

#chroot_local_user=YES

#chroot_list_enable=YES

# (default follows)

#chroot_list_file=/etc/vsftpd.chroot_list

ls_recurse_enable=YES

listen=YES

===================================


防火墙设置:参考http://blog.csdn.net/highball/article/details/8521954 为开放ftp配置iptables

vim /etc/sysconfig/iptables 

-A INPUT -p tcp --dport 21 -j ACCEPT

-A INPUT -p tcp --dport 20 -j ACCEPT

-A INPUT -p tcp --dport 30001:31000 -m state --state ESTABLISHED,RELATED -j ACCEPT

导入模块http://blog.csdn.net/highball/article/details/8521954

modprobe ip_nat_ftp

modprobe ip_conntrack

modprobe ip_conntrack_ftp


开机自启动

vim /etc/sysconfig/iptables-conf

IPTABLES_MODULES="modprobe ip_conntrack"

IPTABLES_MODULES="ip_conntrack_ftp"

IPTABLES_MODULES="ip_nat_ftp"