#!/bin/bash # VsFTPD Virtual User Configuration # This script is written by jerry # Create Date: 2013-06-28 # ################################################# YUM_INSTALL_LIST="vsftpd db4 db4-tcl db4-utils" APT_INSTALL_LIST="vsftpd db4.6-util" # 通常只需要编辑以下两个变量 FTP_USER=www FTP_HOME=/www VSFTPD_BASE_DIR=/etc/vsftpd ################################################# # # 检查系统环境,并安装所需软件包 # ################################################# # 检查是否以ROOT用户执行本脚本 [ `id -u` -ne '0' ] && echo 'Must be root!' && exit # 检查发行版是否为本脚本所支持 [ `uname -i` = 'x86_64' ] && PLATFORM='x86_64' || PLATFORM='i386' if cat /etc/issue|grep '4.' ;then OS=4 elif cat /etc/issue|grep '5.';then OS=5 else echo 'Do not support this system ' && exit fi DISTRIBUTION=`lsb_release -i | awk '{print $3}'` case "$DISTRIBUTION" in *CentOS*|*"Red Hat"*|*Fedora*) yum -y install $YUM_INSTALL_LIST ;; *Debian*|*Ubuntu*) apt-get -y install $APT_INSTALL_LIST ;; *) echo 'Do not support this distribution !' && exit 0 ;; esac ################################################# # # 创建FTP用的系统用户 # ################################################# # 检查ftp要使用的用户是否存在 EXISTS_USER=`grep -E "^\<$FTP_USER\>" /etc/passwd |awk -F: '{print $1}'` if [ "$EXISTS_USER" != "$FTP_USER" ] then useradd -u 78 $FTP_USER -d $FTP_HOME -s /sbin/nologin fi # 检查ftp用户的家目录是否正确 if [ "$EXISTS_USER" = "$FTP_USER" ] then usermod -d $FTP_HOME $FTP_USER fi ################################################# # # 创建FTP的目录和文件 # ################################################# # 创建安装目录 if [ ! -d $VSFTPD_BASE_DIR ] then mkdir -p $VSFTPD_BASE_DIR fi # 把FTP的系统用户写入 echo "$FTP_USER" >> $VSFTPD_BASE_DIR/vsftpd.chroot_list # 创建日志文件 touch /var/log/vsftpd.log # 创建虚拟用户的配置文件路径目录 mkdir -p $VSFTPD_BASE_DIR/user_config # 创建密码文件, 单行为用户名, 双行为密码 touch $VSFTPD_BASE_DIR/passwd.txt ################################################# # # 修改配置文件 # ################################################# # 写入测试用户和密码 echo ftpuser1 >> $VSFTPD_BASE_DIR/passwd.txt echo `< /dev/urandom tr -dc A-Za-z0-9 | head -c 20` >> $VSFTPD_BASE_DIR/passwd.txt # 修改PAM认证文件 echo " auth required pam_userdb.so db=$VSFTPD_BASE_DIR/user_passwd" > /etc/pam.d/vsftpd echo " account required pam_userdb.so db=$VSFTPD_BASE_DIR/user_passwd" >> /etc/pam.d/vsftpd # 编辑vsftpd的配置文件 > $VSFTPD_BASE_DIR/vsftpd.conf && echo "已删除默认配置" echo "\ listen=YES background=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=NO xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES async_abor_enable=YES ascii_upload_enable=YES ascii_download_enable=YES ftpd_banner=Welcome to Ismole FTP servers pam_service_name=vsftpd chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/vsftpd.chroot_list guest_enable=YES guest_username=$FTP_USER user_config_dir=$VSFTPD_BASE_DIR/user_config\ " >> $VSFTPD_BASE_DIR/vsftpd.conf # 为虚拟用户创建家目录和配置文件 if [ ! -d $FTP_HOME/wwwroot/ftpuser1 ] then mkdir -p $FTP_HOME/wwwroot/ftpuser1 chown -R $FTP_USER $FTP_HOME fi echo "\ local_root=$FTP_HOME/wwwroot/ftpuser1 write_enable=YES anon_umask=022 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES\ " >> $VSFTPD_BASE_DIR/user_config/ftpuser1 ################################################# # # 创建虚拟用户密码认证数据库文件,并写成脚本 # ################################################# case "$DISTRIBUTION" in *CentOS*|*"Red Hat"*|*Fedora*) echo "\ if [ -e $VSFTPD_BASE_DIR/user_passwd.db ] then rm -f $VSFTPD_BASE_DIR/user_passwd.db fi db_load -T -t hash -f $VSFTPD_BASE_DIR/passwd.txt $VSFTPD_BASE_DIR/user_passwd.db\ " >> $VSFTPD_BASE_DIR/db_load.sh ;; *Debian*|*Ubuntu*) echo "\ if [ -e $VSFTPD_BASE_DIR/user_passwd.db ] then rm -f $VSFTPD_BASE_DIR/user_passwd.db fi db4.6_load -T -t hash -f $VSFTPD_BASE_DIR/passwd.txt $VSFTPD_BASE_DIR/user_passwd.db\ " >> $VSFTPD_BASE_DIR/db_load.sh ;; *) echo 'Do not support this distribution !!' && exit ;; esac chmod 500 $VSFTPD_BASE_DIR/db_load.sh $VSFTPD_BASE_DIR/db_load.sh ################################################# # # 启动并测试 # ################################################# /etc/init.d/vsftpd start # 验证登录 echo "测试用户名是: ftpuser1" # 显示出匹配行的下一行,也就是密码 echo "测试用户密码是: `sed -n '/ftpuser1/{n;p;}' $VSFTPD_BASE_DIR/passwd.txt`" echo "测试无误的话别忘了删除测试用户,Good luck ! " #----------------------------引用文字-结束----------------------------