Zavier's Blog

使用vsftpd搭建FTP服务器

#安装vsftpd
 
yum install vsftpd db4-utils
OR
apt-get install vsftpd db4-utils
 
#添加一个系统用户,以便虚拟用户映射
useradd -s /sbin/nologin vftp
 
#配置虚拟用户的帐号及密码,一行帐号一行密码
vi /etc/vsftpd/vftp
user1
123456
user2
123456
 
#配置vsftpd的pam文件
vi /etc/pam.d/vsftpd 
#64位系统
auth          required    /lib64/security/pam_userdb.so db=/etc/vsftpd/vftp
account     required    /lib64/security/pam_userdb.so db=/etc/vsftpd/vftp
#32位系统
auth           required    pam_userdb.so db=/etc/vsftpd/vftp
account     required    pam_userdb.so db=/etc/vsftpd/vftp
 
#生成.db后缀的虚拟用户数据库
db_load -T -t hash -f /etc/vsftpd/vftp /etc/vsftpd/vftp.db
 
#为了安全应该给两个文件配置权限
chmod 600 /etc/vsftpd/{vftp vftp.db}
 
#编辑vsftp的主配置文件
 
vi /etc/vsftpd/vsftpd.conf
 
#监听21端口,并且开启被动模式
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=30999
 
#配置目录允许用户有写入权限
write_enable=YES
download_enable=YES
 
#启动双份日志保存
xferlog_enable=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
 
#虚拟用户的配置信息
user_config_dir=/etc/vsftpd/vsftpd_user_conf
 
#禁止匿名用户登陆
anonymous_enable=NO
 
#允许本地用户登陆,权限信息为077
local_enable=YES
local_umask=077
 
#禁止本地用户离开自己的家目录
chroot_local_user=YES
 
#虚拟用户具有写入权限
allow_writeable_chroot=YES
 
#允许虚拟用户登陆,所有虚拟用户映射至系统用户vftp
guest_enable=YES
guest_username=vftp
 
#虚拟用户配置的PAM使用的服务名称
pam_service_name=vsftpd
#设置虚拟用户上传目录权限为755,文件权限为644(全局)
anon_umask=022
 
#虚拟用户权限及登陆目录编写
mkdir /etc/vsftpd/vsftpd_user_conf
vi user1
#用户登陆目录
local_root=/media/user1/
#开放用户上传权限
anon_upload_enable=YES
#开放用户创建目录权限
anon_mkdir_write_enable=YES
开放用户删除或重命名权限
anon_other_write_enable=YES
#开放用户写入权限
write_enable=YES
 
#使用被动模式启动后应该使用iptables将30000-30999端口,21端口打开
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 30000:30999 -j ACCEPT

#附vsftpd启动脚本
#脚本参考地址http://www.Linuxidc.com/Linux/2012-09/70793.htm

    #!/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/sbin/vsftpd
    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 &
            RETVAL=$?
            usleep 5000000
            if [ -z "`/sbin/pidof $prog`" ]
            then
                    RETVAL=1
            fi
            if [ $RETVAL -ne 0 ]       
            then
            echo "Startup failure"     
            else
            echo "Startup success"     
            fi
            echo
            return $RETVAL
    }
     
    stop() {
            echo "Stopping $prog:"
            killall $vsftpd
            RETVAL=$?
            if [ $RETVAL -ne 0 ]
            then
            echo "Shutdown failure"     
            else
            echo "Shutdown success"     
            fi
            echo
    }
     
    case "$1" in
    start)
            start     
            ;;
    stop)
            stop     
            ;;
    status)
            status $vsftpd
            RETVAL=$?   
            ;;
    restart)
            stop
            usleep 5000000    
            start
            ;;
    *)
            echo "Usage: $prog {start|stop|restart|status}"
            exit 1
    esac
    exit $RETVAL


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Copyright © 2017-2019 Zavier的博客.网站地图