当前位置:首页 > FTP
在 64 位 Linux 系统下安装和配置 vsftpd
来源:靑龍一笑的博客  作者:靑龍一笑  发布时间:2014-07-04 13:02:51  点击量:892  评论:0

    我准备的操作系统是 64 位的 Red Hat,软件是 vsftpd-2.2.2.tar.gz。
    首先,解压 vsftpd-2.2.2.tar.gz,并进入到解压后的目录:

[root@RicenOS softwares]# tar zxvf vsftpd-2.2.2.tar.gz 
[root@RicenOS softwares]# cd vsftpd-2.2.2

    编译:

[root@RicenOS vsftpd-2.2.2]# make

    这里可能会报如下错误:

`./vsf_findlibs.sh` 
/lib/libpam.so.0: could not read symbols: File in wrong format
collect2: ld 返回 1
make: *** [vsftpd] 错误 1

    出现这种错误,是因为 vsf_findlibs.sh 文件没有考虑到 64 位平台库文件位置,需要做如下修改:

[root@RicenOS vsftpd-2.2.2]# vi vsf_findlibs.sh

    输入命令::%s?lib/?lib64/?
    然后保存。
    接着,需要修改相关的 lib 链接:

[root@RicenOS vsftpd-2.2.2]# ls -l /lib/libpam.so.0
lrwxrwxrwx 1 root root 16 06-10 23:10 /lib/libpam.so.0 -> libpam.so.0.81.5
[root@RicenOS vsftpd-2.2.2]# ls -l /lib64/libpam.so.0
libpam.so.0     libpam.so.0.81.5  
[root@RicenOS vsftpd-2.2.2]# rm -rf /lib/libpam.so.0
[root@RicenOS vsftpd-2.2.2]# ln -s /lib64/libpam.so.0 /lib/libpam.so.0

    清除之前编译的可执行文件及配置文件:

[root@RicenOS vsftpd-2.2.2]# make clean

    重新编译:

[root@RicenOS vsftpd-2.2.2]# make

    将编译后的可执行文件 vsftpd 拷贝到 /usr/local/sbin 目录下:

[root@RicenOS vsftpd-2.2.2]# cp vsftpd /usr/local/sbin/vsftpd

    根据 vsftpd 自带的说明文档,创建所需的目录,拷贝相关的文件:

[root@RicenOS vsftpd-2.2.2]# mkdir -p /usr/local/man/man5
[root@RicenOS vsftpd-2.2.2]# mkdir -p /usr/local/man/man8
[root@RicenOS vsftpd-2.2.2]# cp vsftpd.conf.5 /usr/local/man/man5/
[root@RicenOS vsftpd-2.2.2]# cp vsftpd.8 /usr/local/man/man8/
[root@RicenOS vsftpd-2.2.2]# mkdir -p /etc/vsftpd
[root@RicenOS vsftpd-2.2.2]# cp vsftpd.conf /etc/vsftpd/

    安装:

[root@RicenOS vsftpd-2.2.2]# make install

    为了让 vsftpd 支持本地用户登录,将身份认证模块文件拷贝到系统中:

[root@RicenOS vsftpd-2.2.2]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd

    因为是 64 位系统,所以还需要对身份认证模块文件做一下修改:

[root@RicenOS vsftpd-2.2.2]# vi /etc/pam.d/vsftpd

    输入命令::%s?lib/?lib64/?
    然后将文件中的 file=/etc/ftpusers 修改为 file=/etc/vsftpd/ftpusers,并保存。
    建立禁止使用 vsftpd 的用户列表文件:

[root@RicenOS vsftpd-2.2.2]# touch /etc/vsftpd/ftpusers

    编辑主配置文件:

[root@RicenOS vsftpd-2.2.2]# vi /etc/vsftpd/vsftpd.conf

    1、anonymous_enable=YES 改为 anonymous_enable=NO,阻止匿名上传。
    2、去掉 local_enable=YES、write_enable=YES 和 local_umask=022 前的注释。
    3、去掉 chroot_list_enable=YES 和 chroot_list_file=/etc/vsftpd.chroot_list 前的注释,同时将chroot_list_file=/etc/vsftpd.chroot_list 修改为 chroot_list_file=/etc/vsftpd/chroot_list,阻止用户向上级切换目录。
    4、去掉 ascii_upload_enable=YES 和 ascii_download_enable=YES 前的注释,允许使用 ASCII 模式上传和下载文件。
    5、添加 pam_service_name=vsftpd,允许本地用户登录。
    创建 Chroot 用户授权文件:

[root@RicenOS vsftpd-2.2.2]# vi /etc/vsftpd/chroot_list

    添加一个帐号:ricen
    创建帐号 ricen 的主目录:

[root@RicenOS vsftpd-2.2.2]# mkdir -p /usr/ricen_file

    创建 ricen 帐号:

[root@RicenOS vsftpd-2.2.2]# useradd -d /usr/ricen_file/ ricen

    拷贝三个必需的文件到 ricen 的主目录下:

[root@RicenOS vsftpd-2.2.2]# cp /etc/skel/.bash_profile /usr/ricen_file/
[root@RicenOS vsftpd-2.2.2]# cp /etc/skel/.bashrc /usr/ricen_file/
[root@RicenOS vsftpd-2.2.2]# cp /etc/skel/.bash_logout /usr/ricen_file/

    设置 ricen 用户的密码:

[root@RicenOS vsftpd-2.2.2]# passwd ricen

    将 ricen 主目录的权限赋予 ricen 用户:

[root@RicenOS vsftpd-2.2.2]# chown -R ricen:ricen /usr/ricen_file/

    接下来,需要编辑服务启动脚本:

[root@RicenOS vsftpd-2.2.2]# vi /etc/rc.d/init.d/vsftpd

    内容如下:

#!/bin/bash
# chkconfig: 35 60 50
# description: vsftpd is a ftp daemon.
#
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
[ ${NETWORKING} = "no" ] && exit 0
[ -x /usr/local/sbin/vsftpd ] || exit 0
RETVAL=0
PROG="vsftpd"
start(){
    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(){
    echo -n $"Shutting down $PROG: "
    killproc $PROG
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$PROG
    return $RETVAL
}
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

    改变文件权限:

[root@RicenOS vsftpd-2.2.2]# chmod +x /etc/rc.d/init.d/vsftpd

    添加服务:

[root@RicenOS ~]# chkconfig vsftpd on

    注意,默认安装的 vsftpd 是以 xinetd 的方式启动的。取消 xinetd 方式启动的方法:

[root@RicenOS vsftpd-2.2.2]# vi /etc/xinetd.d/vsftpd

    把 disable = no 改成 disable = yes。
    重启 xinetd:

[root@RicenOS vsftpd-2.2.2]# service xinetd restart
版权所有 © 2005-2023 靑龍一笑的博客  Powered by C.S.Ricen
Copyright © 2005-2023 by www.ricensoftwares.com.cn  All Rights Reserved.

欢迎光临本站,这里是靑龍一笑的博客。

因资金匮乏,本站已迁到国外的免费空间,可能导致本站的访问速度较慢,由此给您带来的不便,敬请谅解。

您可以通过下方的“支持本站建设”链接,给本站提供资金支持。

Free Web Hosting