linux下centos6/7,rhel6/7下部署vsftpd虚拟用户脚本

  • A+
所属分类:日志

这是从上2次更新后的第三次更新,原因很简单。今天想发文章,但是,没有存稿。于是乎,故伎重演,将更新过的脚本发粗来,凑合一下!依然还是没有啥进步,如果,您有更好的版本,欢迎@我!当然,也欢迎保留链接和作者转载。

每个人都应该自成一派,去开创你精彩的人生。

linux下centos6/7,rhel6/7下部署vsftpd虚拟用户脚本

代码如下


#!/bin/bash

echo -e "########################################################"

echo "脚本名称:vsftpd管理脚本"

echo "版本    :1.6(beta)"

echo "注意事项"

echo -e "1,所有路径需写绝对路径.例如:/data/test。"

echo -e "2,使用本脚本部署会重新配置vsftpd.conf文件,如果有自定义修改,请备份。"

echo -e "3,由于1.1版本部署时不会判断密码文件中用户名和密码的唯一性,如果使用1.2以后版本操作用户名、密码等会出错,请谨慎使用"

echo -e "4,i386架构未验证pam设置,请谨慎使用"

echo -e "更新记录"

echo -e "1.0:2016-06-17,初始化版本(fushengbao)"

echo -e "1.1:2016-10-18,更新一些判断(fushengbao)"

echo -e "1.2:2017-12-18,更新代码及结构,增加菜单项(fushengbao)"

echo -e "1.3:2017-12-19,更新一些判断(fushengbao)"

echo -e "1.4:2018-01-04,更新vsftpd.vu不能创建的bug(fushengbao)"

echo -e "1.5:2018-01-05,更新一些bug(fushengbao)"

echo -e "1.6:2018-05-30,修复操作系统没有ftp用户组导致新建用户失败(fushengbao)"

echo -e "########################################################"

stty erase '^H'

#公共变量

os=`awk -F '[ .]' '{print $7$8}' /etc/redhat-release`

ar=`arch`

#公共变量结束

#安装前置检查开始

function vsftpdinstall () {

#判断是否安装vsftp服务

if [ `rpm -qa|grep vsftpd` ];then

    echo "FTP已安装"

else

    echo "FTP开始安装"

    yum install -y vsftpd > /dev/null 2>&1 && yum install -y db4* >/dev/null 2>&1

    echo "FTP安装完成"

fi

#判断是否安装vsftpd服务结束

#停止selinux

function stop_selinux (){

    sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config && setenforce 0 >/dev/null 2>&1

}

#停止selinux结束

}

#安装前置检查结束

#创建vsftpd配置文件

function vsftpconf () {

if [ ! `id ftpd` >/dev/null 2>&1 ];then

    if [ `grep "ftp" /etc/group > /dev/null 2>&1` ];then

        useradd  -g ftp -s /sbin/nologin  -m ftpd

    else

       groupadd ftp

       useradd -g ftp -s /sbin/nologin -m ftpd

    fi

 echo "ftpd用户创建完成"

else

    echo "ftpd用户已存在"

fi

if [ -e /etc/vsftpd/vsftpd.conf ];then

    mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak-`date +%Y%m%d%H%M`

fi

    local conf_file="/etc/vsftpd/vsftpd.conf"

    echo "anonymous_enable=NO" >$conf_file

    echo "local_enable=YES" >>$conf_file

    echo "write_enable=YES" >>$conf_file

    echo "local_umask=022" >>$conf_file

    echo "dirmessage_enable=YES" >>$conf_file

    echo "xferlog_enable=YES" >>$conf_file

    echo "xferlog_std_format=YES" >>$conf_file

    echo "connect_from_port_20=YES" >>$conf_file

    echo "chroot_local_user=YES" >>$conf_file

    echo "listen=YES" >>$conf_file

    echo "listen_ipv6=NO" >>$conf_file

    echo "pam_service_name=vsftpd.vu" >>$conf_file

    echo "guest_enable=yes" >>$conf_file

    echo "guest_username=ftpd" >>$conf_file

    echo "user_config_dir=/etc/vsftpd_user_conf/" >>$conf_file

    echo "virtual_use_local_privs=YES" >>$conf_file

    echo "userlist_enable=NO" >>$conf_file

    echo "tcp_wrappers=YES" >>$conf_file

    echo "nopriv_user=ftpd" >>$conf_file

    echo "chroot_list_enable=NO" >>$conf_file

    #following parameter is only for rhel 7

        if [ "${os:0:1}" == "7" ];then

        echo "allow_writeable_chroot=YES" >>$conf_file

        fi

}

#创建vsftpd配置文件

#创建pam配置文件

function pamconf () {

    case `arch` in

        x86_64)

            if [ "${os:0:1}" == "7" ];then

                local filename="/usr/lib64/security/pam_userdb.so"

  echo "auth required "$filename" db=/etc/vsftpd/vsftpd_login" >/etc/pam.d/vsftpd.vu

                echo "account required "$filename" db=/etc/vsftpd/vsftpd_login" >>/etc/pam.d/vsftpd.vu

            else

                local filename="pam_userdb.so"

  echo "auth required "$filename" db=/etc/vsftpd/vsftpd_login" >/etc/pam.d/vsftpd.vu

                echo "account required "$filename" db=/etc/vsftpd/vsftpd_login" >>/etc/pam.d/vsftpd.vu

            fi

    ;;

        i686)

            local filename="/lib/security/pam_userdb.so"  #in practical work ,there no 7.x with 32bit, so did not consider this sub

 echo "auth required "$filename" db=/etc/vsftpd/vsftpd_login" >/etc/pam.d/vsftpd.vu

           echo "account required "$filename" db=/etc/vsftpd/vsftpd_login" >>/etc/pam.d/vsftpd.vu

    ;;

    esac

}

#输入用户名密码

function readmenu () {

if [ ! -f /etc/vsftpd/logins.txt ];then

    touch /etc/vsftpd/logins.txt

fi

read -p "please input a virtual user name :" var

    if [ -z "$var" ];then

        echo "用户名不能为空"

        sleep 3

        readmenu

    elif [ `grep -w "$var" /etc/vsftpd/logins.txt|wc -l` -gt 1 ];then

        echo "用户名不具有唯一性"

        sleep 3

        readmenu

    fi

read -p "please input a virtual user password:" vaa

    if [ -z "$vaa" ];then

        echo "提示,密码为空"

        sleep 3

        readmenu

    elif [ `grep -w "$vaa" /etc/vsftpd/logins.txt|wc -l` -gt 1 ];then

        echo "密码不具有唯一性"

        sleep 3

        readmenu

    elif [ "$var" == "$vaa" ];then

        echo "用户名密码不能相同"

        sleep 3

        readmenu

    fi

echo "please wait........."

}

function readmenu1 () {

read -p "please input a virtual path :" vae

    if [ -z "$vae" ];then

        echo "目录不能为空"

        sleep 3

        readmenu

    elif [ -d "$vae" ];then

        echo "用户目录已存在"

        sleep 3

        readmenu

    fi

}

#输入用户名密码结束

#虚拟用户及密码

function vir_user (){

    echo -e "$var\n$vaa" >> /etc/vsftpd/logins.txt

    db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db

    chmod 600 /etc/vsftpd/vsftpd_login.db

}

#虚拟用户及密码结束

#虚拟用户配置文件

function vir_users (){

    chown ftpd.ftp /var/ftp/pub

    allow_writeable_chroot=YES

    virtual_use_local_privs=YES

if [ ! -d /etc/vsftpd_user_conf/ ];then

    mkdir /etc/vsftpd_user_conf

fi

if [ ! -f /etc/vsftpd_user_conf/"$var" ];then

    echo -e "local_root=$vae\nanon_world_readable_only=NO\nanon_upload_enable=YES\nanon_mkdir_write_enable=YES\nanon_other_write_enable=YES\nwrite_enable=YES" > /etc/vsftpd_user_conf/"$var"

else

    read -p ""$var"用户配置文件已存在,是否覆盖(y/n):" vary

    case $vary in

    y|Y)

    echo -e "local_root=$vae\nanon_world_readable_only=NO\nanon_upload_enable=YES\nanon_mkdir_write_enable=YES\nanon_other_write_enable=YES\nwrite_enable=YES" > /etc/vsftpd_user_conf/"$var"

    ;;

    n|N)

    read -p "按回车键,返回目录"

    menua

    ;;

    esac

fi

    mkdir -p /$vae

    chown ftpd.ftp /$vae

}

#虚拟用户配置文件结束

#重启服务

function rebootconf () {

    if [ "${os:0:1}" == "7" ];then

        systemctl restart vsftpd

    else

        service vsftpd restart

    fi

}

#重启服务结束

#添加开机启动

function chkconfigconf () {

    if [ "${os:0:1}" == "7" ];then

        systemc enable vsftpd

    else

        chkconfig vsftpd on

    fi

}

#关闭开机启动

function chkconfigconfoff () {

    if [ "${os:0:1}" == "7" ];then

        systemc disable vsftpd

    else

        chkconfig vsftpd off

    fi

}

function vsftpscan () {

echo "账号密码"

grep -w "$var"  -A 1 /etc/vsftpd/logins.txt

if [ $? == 1 ];then

echo "查无此人"

read

menua

fi

echo "配置文件"

echo "/etc/vsftpd_user_conf/"$var""

echo "用户目录"

head -n 1 /etc/vsftpd_user_conf/"$var"

}

#添加开机启动结束

#vsftpd目录

function menua () {

echo "--------vsftpd管理脚本--------"

echo "1,安装vsftpd"

echo "2,添加虚拟用户"

echo "3,删除虚拟用户"

echo "4,修改虚拟用户密码"

echo "5,用户信息查询"

echo "6,卸载vsftpd"

echo "Q,退出"

read -p "请输入需要的功能:" menua

case $menua in

    1)

        clear

        echo "开始安装vsftpd"

        vsftpdinstall

        vsftpconf

        pamconf

        readmenu

        readmenu1

        vir_user

        vir_users

        rebootconf

        chkconfigconf

        vsftpscan

        echo "安装vsftpd已完成,按回车键返回目录"

        read

        menua

    ;;

    2)

        echo "添加虚拟用户"

        echo "提醒:用户名,密码要保证唯一性。"

        readmenu

        readmenu1

        vir_user

        vir_users

        vsftpscan

        echo "添加虚拟用户完成,按回车键返回目录"

        read

        menua

    ;;

    3)

        echo "删除虚拟用户"

        echo "删除的用户必须觉有唯一性,如果不能确定请参考/etc/vsftpd/logins.txt文件。"

        readmenu

        pwlog=`grep -w "$var" -A 1 /etc/vsftpd/logins.txt|tail -n 1`

        sed -i "/\<$var\>/d" /etc/vsftpd/logins.txt

        sed -i "/\<$pwlog\>/d" /etc/vsftpd/logins.txt

        db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db

        chmod 600 /etc/vsftpd/vsftpd_login.db

        rm -rf /etc/vsftpd_user_conf/"$var"

        echo "删除虚拟用户完成,按回车键返回目录"

        read

        menua

    ;;

    4)

        echo "修改虚拟用户密码"

        echo "修改的密码必须觉有唯一性,如果不能确定请参考/etc/vsftpd/logins.txt文件。"

        readmenu

        pwlog=`grep -w "$var" -A 1 /etc/vsftpd/logins.txt |tail -n 1`

        sed -i "s/\<$pwlog\>/$vaa/g" /etc/vsftpd/logins.txt

        db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_login.db

        chmod 600 /etc/vsftpd/vsftpd_login.db

        echo "修改虚拟用户密码完成,按回车键返回目录"

        read

        menua

    ;;

    5)

        echo "用户信息查询"

        read -p "请输入用户名:" var

        vsftpscan

        read

        menua

    ;;

    6)

        echo "卸载vsftpd"

        chkconfigconfoff

        yum remove vsftpd -y

        rm -rf /etc/vsftpd_user_conf

  rm -rf /etc/vsftpd/

    ;;

    q|Q)

        echo "退出"

    ;;

    *)

 clear

        menua

    ;;

esac

}

if [ `id -u` == 0 ];then

menua

else

echo "请使用root账号运行该管理脚本"

fi

weinxin
付生保个人博客
一个运维工程师的自媒体个人博客网站。也是关注IT技术学习和经验分享的原创独立自媒体个人博客。
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: