Chinaunix首页 | 论坛 | 博客
  • 博客访问: 184947
  • 博文数量: 25
  • 博客积分: 2030
  • 博客等级: 大尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-05 02:49
文章分类

全部博文(25)

文章存档

2012年(1)

2011年(1)

2010年(2)

2009年(21)

我的朋友

分类:

2009-06-28 00:10:41

一、vsftpd 简介
    Vsftpd是一个基于GPL发布的类UNIX系统的ftp服务器软件。其全称是Very Secure FTP Deamon,在安全性、速度和稳定性都有着不俗的表现。在安全性方面,vsftpd针对程序的权限来设计,以一般身份启动服务,对Linux系统的使用权限较低;在千兆以太网上,vsftpd的速度可以达到86MB/s;在稳定性上更是优秀,资料表明,完全工作24小时,传输数据达2.6TB,平均并发连接为1500用户,峰值达4000用户,而这些还是在单机上实现的。此外,vsftpd 还包括以下特性:
    基于IP的虚拟服务器
    虚拟用户,结合数据库的用户验证
    每个用户独立配置文件
    速率限制
    IPV6支持
    支持SSL加密传输
    ……

二、软件安装和卸载

获得软件
    vsftpd目前最新版本为2.2.1,下载地址:

软件安装
    解压软件,编辑builddefs.h文件
    # tar zxvf vsftpd-2.0.5.tar.gz
    # cd vsftpd-2.0.5
    # vi builddefs.h
    找到下面三行,其含义如右所示
    #undef VSF_BUILD_TCPWRAPPERS             //是否允许使用TCP Wrappers
    #define VSF_BUILD_PAM                    //是否允许使用PAM认证
    #undef VSF_BUILD_SSL                     //是否允许使用SSL

    如果要允许以上所示某项功能,使把undef改为define即可,注意每行前的“#“号不是注释,不能去掉(熟悉C语言的同志应该知道这个“#”是什么意思)。其中TCP Wrappers是一个验证IP地址合法性的程序,PAM认证让vsftpd支持本地用户登陆服务器,使用SSL可以建立一个加密的数据传输。这里我们把三项都启用。
    编译安装。如果系统中安装有旧版vsftpd,请先卸载它。默认安装执行文件在/usr/local/sbin中,man page放在/usr/local/man/man5与/usr/local/man/man8中。
    # make
    # make install

    将默认配置文件考贝到/etc/vsftpd/
    # mkdir /etc/vsftpd/
    # cp vsftpd.conf /etc/vsftpd/                   

    为了认vsftpd支持本地用户登录,我们将身份认证模块文件考入系统中。
    # cp RedHat/vsftpd.pam /etc/pam.d/vsftpd

    建立ftp用户及主目录:
    # mkdir /var/ftp
    # useradd -d /var/ftp ftp
   
    如果本来就已经存在ftp用户,则执行下面两条命令:
    # chown root:root /var/ftp
    # chmod 755 /var/ftp

    建立vsftpd需要的特殊目录:
    # mkdir /usr/share/empty/


软件卸载
    如果需要卸载,使用如下命令:
    # rm /usr/local/sbin/vsftpd
    # rm /usr/local/man/man5/vsftpd.conf.5
    # rm /usr/local/man/man8/vsftpd.8
    # rm /etc/xinetd.d/vsftpd
    # rm -rf /etc/vsftpd

三、配置vsftpd服务

服务的启动与停止
    启动服务之前,我们先编辑配置文件/etc/vsftpd/vsftpd.conf. 打开配置文件后可以看到许多以“#”开始的行,这些行都是注释行,大多是帮助信息,可以仔细阅读。vsftpd.conf文件的所有项目都是以“参数=值”来设置的,对格式要求比较严格,必须严格区分大小写,等号两边不能有空格,每行的最后也不能有空格。每个参数都有一个默认值,没有在配置文件中明确指定的参数就会使用默认值。我们这里不理会配置文件本来的信息,把所有内容都删掉或注释掉,最后加上下面四行,每行右边的//及后的文字是含义说明,不要输入到文件中:
    listen=yes                        //vsftpd工作在standalone 模式下
    anonymous_enable=yes                //允许匿名用户登陆服务器
    local_enable=yes                    //允许本地用户登录到服务器
    pam_service_name=vsftpd            //使用PAM认证

    vsftpd有两种工作模式,standalone模式和xinetd守护进程模式,第1行就是让其工作在standalone模式下。此种模式中,每次修改配置文件必须重新启动vsftpd服务才能生效,关于两种模式在后面有详细介绍。我们安装时还把 Redhat 目录下的 vsftpd.pam 文件复制成了/etc/pam.d/vsftpd 文件。这个文件就是本地用户登陆的 pam 验证配置文件。关于这个文件我们会在后面具体介绍。这里我们要知道,必须得有这个配置文件,而且主配置文件里要加上pam_service_name=vsftpd语句,我们才能让本地用户登陆。用以下命令启动服务:
    # /usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf &

    为保证服务确实启动,我们用如下命令检测:
    # netstat -an |grep 21
    tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN

    我们看到服务器已经打开了tcp21端口,表明ftp确实已经启动。再登录服务器:
    # ftp 127.0.0.1
    Connected to 127.0.0.1.
    220 (vsFTPd 2.0.5)
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    KERBEROS_V4 rejected as an authentication type
    Name (127.0.0.1:root): ftp
    331 Please specify the password.
    Password:
    230 Login successful.

    这时我们已经用匿名用户(用户名ftp或anonymous,密码任意)登录到服务器了,还可以用本地用户登录。我们做测试时建议使用如上所示的ftp命令(windows、Linux及Unix都带这个命令,用法都是一样的)来登录服务器,这样可以看到更详细的信息,对于我们调试服务器是非常有帮助的。最简单的ftp服务器就已经达建起来了。使用如下命令关闭ftp服务:
    # killall vsftpd

服务启动脚本的制作
    在standalone 模式中,经常用上面的命令启动服务比较麻烦,我们做一个脚本来启动和停止服务。
建立一个新文件/etc/rc.d/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/vsftpd/*.conf`; do
                        site=`basename $i .conf`
                        echo -n $"Starting $prog for $site: "
                        /usr/local/sbin/vsftpd $i &
                        RETVAL=$?
                        [ $RETVAL -eq 0 ] && {
                           touch /var/lock/subsys/$prog
                           success $"$prog $site"
                        }
                        echo
                done
        else
                RETVAL=1
        fi
        return $RETVAL
}
stop() {
        # Stop daemons.
        echo -n $"Shutting down $prog: "
        killproc $prog
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
        return $RETVAL
}
# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
restart|reload)
        stop
        start
        RETVAL=$?
        ;;
condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
            RETVAL=$?
        fi
        ;;
status)
        status $prog
        RETVAL=$?
        ;;
*)
        echo $"Usage: $0 {start|stop|restart|condrestart|status}"
        exit 1
esac
exit $RETVAL


    保存文件,再给该文件加上执行权限:
    # chmod 755 /etc/rc.d/init.d/vsftpd

    这样我们就可以通过下面的方法来管理服务了:
    # service vsftpd {start|stop|restart|condrestart|status}
    例如重新启动服务:
    # service vsftpd restart
    Shutting down vsftpd:                   [OK ]
    Starting vsftpd for vsftpd:             [OK ]  

阅读(939) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇: 深入Linux PAM 体系结构

给主人留下些什么吧!~~