Centos 7 Vsftp 脚本

Windows客户端设置:IE属性-->高级-->[使用被动FTP... ]这项,取消选择。

+++++++++++++++++++++++++++++++++++
#!/bin/bash
#vsftp shell script
#2019-09-30
#所有用户的主目录在一个目录下面,相互独立。
#public_dir目录用于各用户交换文件
#Version 1.0
function chk_base()
{
clear
date
echo "#############################"
echo "# Centos 7 安装 Vsftp 脚本  #"
echo "#############################"
for i in `seq -w 3 -1 0`
do
echo -ne "\b\b\b\b$i 秒"
sleep 1
done
echo ""
MYVER=`cat /etc/redhat-release |awk '{print $4}'| awk -F [.] '{print $1}'`
expr 1 + $MYVER &>/dev/null
if [ $? -ne 0 ];then
    echo "请在 7 版本的系统里面运行该脚本....."
    exit
fi
if [ $UID -ne 0 ]; then
    echo "请用 root 用户运行该脚本...."
    exit
fi
    echo '网络检测中..................'
    echo ' '
    sleep 1
#检测有无外网
ping -c 1 114.114.114.114 > /dev/null 2>&1
if [ $? -eq 0 ];then
    echo '网络正常,程序将继续运行。'
    sleep 1
else
    echo '正在进行第二次网络检测,请稍候.........'
    sleep 1
curl www.baidu.com >/dev/null 2>&1
if [ $? -ne 0 ]; then
    echo '检测到网络连接有异常,请检查您的网络设置.....'
 exit
else
    echo ''
    echo '网络正常,程序将继续运行。'
    sleep 1
fi
fi
}
chk_base
ftpmu="/ftpser"
VSFTP_F="/etc/vsftpd/vsftpd.conf"
mkdir -p $ftpmu
echo '检测系统环境...'
sleep 2
rpm -q vsftpd &> /dev/unll
if [ $? != 0 ]; then           #判断系统是否安装程序
  echo "1.正在安装Vsftp应用程序"
  yum install -y openssl vsftpd &> /dev/unll
  read -p "请输FTP目录名称(myftp): " bdir
  if [ ! -n "$bdir" ];then
     loginpath=myftp  #不输入内容,默认为myftp目录
  else
     loginpath=$bdir
  fi
  read -p "请输入需要创建的用户: " user1
  while : ;do
      if [ ! -n "$user1" ];then
           echo "用户名不能为空,请重新输入。"
         read -p "请输入需要创建的用户: " user1
      else
         id $user1 &> /dev/null
        if [ $? -ne 0 ];then
           useradd -s /sbin/nologin -d $ftpmu/$user1\_$loginpath $user1 &> /dev/null
           break
        else
          echo "该用户已存在,请重新输入。"
          read -p "请输入需要创建的用户: " user1
       fi
    fi
   done
stty -echo
read -p "请输入用户密码: " paswd
stty echo
    while : ;do
       if [ ${#paswd} -lt 6 ];then
          echo -e "\n密码字符 至少6位"
          stty -echo
          read -p "请输入用户密码:" paswd
          stty echo       
      else
          echo -e "\n"
          break
      fi
    done
  jmpwd_a=`echo $paswd|openssl base64` #加密密码字符串
  echo "2.修改配置文件"

  sleep 2

  sed -i 's/listen=NO/listen=YES/' $VSFTP_F # && echo '允许监听IPv4.'
  sleep 1
  sed -i 's/anonymous_enable\=YES/anonymous_enable=NO/' $VSFTP_F && echo '3.关闭匿名用户登录'
  sleep 1
  #所有用户都被限制在其主目录下
  echo "chroot_local_user=YES" >> $VSFTP_F && echo "4.开启用户登录"
  echo "allow_writeable_chroot=YES" >> $VSFTP_F

  sed -i 's/listen_ipv6=YES/#listen_ipv6=YES/' $VSFTP_F # && echo '关闭监听IPv6.'
  echo 'pasv_enable=NO' >> $VSFTP_F   # && echo '关闭服务的被动模式.'
  sleep 1
  echo 'port_enable=YES' >> $VSFTP_F && echo '5.打开服务的主动模式'
  echo "local_root=$ftpmu" >> $VSFTP_F #用户的主目录
  #ftp服务器不执行DNS解析,提高访问速度。
  echo 'reverse_lookup_enable=NO' >>$VSFTP_F
  sleep 1
  mkdir -p $ftpmu/public_dir #创建中转目录,用于各用户之间交换数据。
  chmod 777 $ftpmu/public_dir 
  echo "$paswd" | passwd --stdin $user1  &> /dev/null && echo "6.创建用户$user1 设置密码"
  echo "$user1  $jmpwd_a $ftpmu/$user1\_$loginpath" >>/usr/ftp.ps #将用户的信息写入文件
  sleep 2
  systemctl start vsftpd >/tmp/vsftp.start.log 2>&1
  if [ $? -ne 0 ]; then
    echo "vsftpd 启动失败,请检查日志:/tmp/vsftp.start.log"
    exit
  else
    echo  "7.vsftpd 启动服务完成。"
    sleep 1
  fi
  systemctl enable vsftpd >/tmp/vsftp.enable.log 2>&1
echo -e "\033[31mWindows客户端设置:IE属性-->高级-->[使用被动FTP... ]这项,取消选择。\033[0m"
########################################################
else
    echo "1.程序已安装"
    yum install -y openssl &> /dev/null
    sleep 1
    read -p "2.添加新用户: " user2
  while : ;do
      if [ ! -n "$user2" ];then
           echo "用户名不能为空,请重新输入。"
           read -p "请输入需要创建的用户: " user2
      else
         id $user2 &> /dev/null
        if [ $? -ne 0 ];then
           break
        else
          echo "该用户已存在,请重新输入。"
          read -p "请输入需要创建的用户: " user2
       fi
    fi
   done
    stty -echo 
    read -p "3.请输入新用户密码: " newpwd
    stty echo
    while : ;do
       if [ ${#newpwd} -lt 6 ];then
          echo -e "\n密码字符 至少6位"
          stty -echo
          read -p "3.请输入新用户密码:" newpwd
          stty echo       
      else
          break
      fi
    done
    jmpwd=`echo $newpwd|openssl base64`    
    sleep 1
    echo -e "\n"
    read -p "4.请输入新用户 FTP 目录: " newpath    
     while : ;do
      if [ ! -n "$newpath" ];then
           echo "FTP目录名称不能为空,请重新输入。"
           read -p "请输FTP目录名称: " newpath
      else
           break
      fi
   done 
    useradd -s /sbin/nologin -d $ftpmu/$user2\_$newpath $user2 &> /dev/null
    echo "$newpwd" | passwd --stdin $user2  &> /dev/null
    echo "$user2  $jmpwd  $ftpmu/$user2_$newpath" >>/usr/ftp.ps
    sleep 1
    systemctl restart vsftpd && echo "服务已重启..."
fi