centos7一键添加、删除、导入vsftpd虚拟用户列表(脚本案例)

要求:

1、可以添加、删除单个或多个虚拟用户
2、可以导入虚拟用户列表
3、在添加及导入时,如发现未安装配置vsftpd虚拟用户,则先安装配置并执行添加导入操作
4、添加、删除时严格控制输入是否正确
5、导入文件时,检查文件内容是否符合用户密码一 一对应

脚本内容:

#!/bin/bash
#auth by toyix
#202072510:57:44
#auto add delete import vsftpd_vname
####################################

LOCAL_ROOT="/data/ftp"
mkdir -p /data/ftp >/dev/null 2>&1
#定义函数 - 检查是否安装vsftpd及虚拟用户,没有装安装
INSTALL_CONFIG_VSFTPD_VNAME () {
        #check vsftpd installd
        rpm -qa|grep  vsftpd >/dev/null 2>&1
        if [ $? -ne 0 ];then
                echo -e '\033[32m--------------------------------------------------\033[0m'
                echo -e '\033[32m----vsftpd is not installd, now install vsftpd----\033[0m'
                echo -e '\033[32m--------------------------------------------------\033[0m'
                yum install -y pam* libdb-utils vsftpd* --skip-broken
                cat >/etc/vsftpd/vsftpd.conf <<-EOF
                #关闭匿名
                anonymous_enable=NO
                #用户不可出根目录
                chroot_local_user=YES
                #出根目录白名单
                chroot_list_enable=YES
                chroot_list_file=/etc/vsftpd/chroot_list
                allow_writeable_chroot=YES
                pasv_enable=YES
                #使用被动模式40005000端口
                pasv_min_port=4000
                pasv_max_port=5000
                local_enable=YES
                write_enable=YES
                local_umask=022
                #使用本地时间
                use_localtime=YES
                dirmessage_enable=YES
                #日志文件配置,并开启xferlog与vsftp.log双日志,xferlog记录上传与下载信息,vsftpd.log记录登录、上传、下载、删除等详细信息
                dual_log_enable=YES
                xferlog_enable=YES
                log_ftp_protocol=YES
                xferlog_std_format=YES
                reverse_lookup_enable=NO

                connect_from_port_20=YES
                xferlog_std_format=YES
                listen=NO
                listen_ipv6=YES
                userlist_enable=YES
                tcp_wrappers=YES

                #虚拟用户配置-----------
                #开启pam模块登录认证
                pam_service_name=vsftpd
                guest_enable=YES
                #映射虚拟用户至系统用户(指定系统用户)
                guest_username=ftpuser
                #虚拟用户配置目录
                user_config_dir=/etc/vsftpd/vsftpd_user_conf
                #禁锢虚拟用户的主目录,同时禁止访问除主目录之外的目录
                virtual_use_local_privs=YES
                EOF
                mkdir -p /etc/vsftpd/chroot_list
                mkdir -p /etc/vsftpd/vsftpd_user_conf
                cat >/etc/pam.d/vsftpd<<-EOF
                auth    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
                account required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
                EOF
        fi
        rpm -qa|grep pam >/dev/null 2>&1
        if [ $? -ne 0 ];then
                yum install -y pam*
        fi
        rpm -qa|grep libdb-utils >/dev/null 2>&1
        if [ $? -ne 0 ];then
                yum install -y libdb-utils
        fi
        VFTPUSER=`cat /etc/vsftpd/vsftpd.conf |grep -w 'guest_username'|awk -F"=" '{print $2}'`
        #检查是否配置了虚拟用户,没有则创建虚拟用户
        cat /etc/vsftpd/vsftpd.conf |grep -w '^guest_username'
        if [ $? -ne 0 ];then
                \cp /etc/vsftpd/vsftpd.conf{,.bak}
                cat >>/etc/vsftpd/vsftpd.conf<<-EOF
                #虚拟用户配置-----------
                #开启pam模块登录认证
                pam_service_name=vsftpd
                guest_enable=YES
                #映射虚拟用户至系统用户(指定系统用户)
                guest_username=ftpuser
                #虚拟用户配置目录
                user_config_dir=/etc/vsftpd/vsftpd_user_conf
                #禁锢虚拟用户的主目录,同时禁止访问除主目录之外的目录
                virtual_use_local_privs=YES
                EOF
                useradd -s /sbin/nologin ftpuser
                cat >/etc/pam.d/vsftpd<<-EOF
                auth    required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
                account required        pam_userdb.so   db=/etc/vsftpd/vsftpd_login
                EOF
                #新建虚拟用户配置文件目录
                mkdir -p /etc/vsftpd/vsftpd_user_conf
        fi
        VFTPUSER=`cat /etc/vsftpd/vsftpd.conf |grep -w 'guest_username'|awk -F"=" '{print $2}'`
        USER_CONFIG_DIR=`cat /etc/vsftpd/vsftpd.conf |grep -w 'user_config_dir='|awk -F"=" '{print $2}'`
        VSFTPD_LOGIN_DB="`cat /etc/pam.d/vsftpd|grep -w 'vsftpd'|sed '1p' -n|awk -F"=" '{print $2}'`.db"


}

if [ $UID -ne 0 ];then
        echo -e '\033[33m Permission no enough,please use root!!! \033[0m'
fi


if [ "$1" == "-a" ];then
        shift 1
        ADD_NR=`expr $# % 2`
        if [ $ADD_NR -ne 0 ];then
                echo -e '\033[33m mUsage:{/bin/sh $0= add: "-a vname1 passwd vname2 passwd" |help} \033[0m'
                exit 1
        fi
        #调用函数 - 检查是否安装vsftpd及虚拟用户,没有装安装
        INSTALL_CONFIG_VSFTPD_VNAME
        VSFTPD_ADD_VFUSERS_PWDS="$*"
        VSFTPD_ADD_VFUSERS=`echo ${VSFTPD_ADD_VFUSERS_PWDS}|awk '{print $1" " $3 " " $5" "$7" "$9" " $11}'`
        a=`expr $# % 2`
        if [ $a -ne 0 ];then
                echo -e '\033[33m --------------------------------------------------------------------------------- \033[0m'
                echo -e '\033[33m mUsage:{/bin/sh $0= add: "-a vname1 passwd vname2 passwd" |help} \033[0m'
                echo -e '\033[33m --------------------------------------------------------------------------------- \033[0m'
        fi

        #把用户密码逐行追加至临时文件
        for VSFTPD_ADD_VFUSERS_PWD in ${VSFTPD_ADD_VFUSERS_PWDS}
        do
                echo ${VSFTPD_ADD_VFUSERS_PWD}>>/etc/vsftpd/vfuser.txt
        done

        db_load -T -t hash -f /etc/vsftpd/vfuser.txt ${VSFTPD_LOGIN_DB}  
        chmod 700 /etc/vsftpd/vsftpd_login.db

        for VSFTPD_ADD_VFUSER in ${VSFTPD_ADD_VFUSERS}
        do
                mkdir -p ${LOCAL_ROOT}/${VSFTPD_ADD_VFUSER}
                echo "${LOCAL_ROOT}/${VSFTPD_ADD_VFUSER}"
                chown -R ${VFTPUSER}:${VFTPUSER} ${LOCAL_ROOT}/${VSFTPD_ADD_VFUSER}
                cat>${USER_CONFIG_DIR}/${VSFTPD_ADD_VFUSER}<<-EOF
                #${VSFTPD_ADD_VFUSER}虚拟用户配置文件目录,即家目录
                local_root=${LOCAL_ROOT}/${VSFTPD_ADD_VFUSER}
                #允许登录用户有可写权限
                write_enable=YES
                #允许匿名用户下载,然后读取文件
                anon_world_readable_only=YES
                #允许匿名用户上传文件权限,只在write_enable=YES时生效
                anon_upload_enable=YES
                #允许匿名用户创建目录,只有在write_enable=YES时生效
                anon_mkdir_write_enable=YES
                #允许匿名用户其他权限,例如删除、重命名等                
                anon_other_write_enable=YES
                EOF
        done
        /etc/init.d/vsftpd restart >/dev/null
        echo ""
        echo -e '\033[32m -------------------------------------------------------\033[0m'
        echo -e '\033[32m -----------add finish! select db file---------------\033[0m'
        echo -e '\033[32m -------------------------------------------------------\033[0m'
        /usr/bin/db_dump -d a ${VSFTPD_LOGIN_DB}|grep -w 'data:'|awk '{print $6}'

elif [ "$1" == '-d' ];then
        shift 1
        #检测$*是否正确
        VSFTPD_DEL_VFUSERS="$*"
        echo $VSFTPD_LOGIN_DB
        if [ -z "${VSFTPD_DEL_VFUSERS}" ];then
                echo -e '\033[33m mUsage:{/bin/sh $0 delete: -d vnames  filename |help} \033[0m'
                exit 1
        fi
        
        #检查是否配置了虚拟用户
        cat /etc/vsftpd/vsftpd.conf |grep -w '^pam_service_name' >/dev/null 2>&1
        if [ $? -ne 0 ];then
                echo -e '\033[33m 虚拟用户未配置,请重新执行此脚本 -a vnames \033[0m'
                exit 1
        else
                VFTPUSER=`cat /etc/vsftpd/vsftpd.conf |grep -w 'guest_username'|awk -F"=" '{print $2}'`
                USER_CONFIG_DIR=`cat /etc/vsftpd/vsftpd.conf |grep -w 'user_config_dir='|awk -F"=" '{print $2}'`
                VSFTPD_LOGIN_DB="`cat /etc/pam.d/vsftpd|grep -w 'vsftpd'|sed '1p' -n|awk -F"=" '{print $2}'`.db"
                echo -e "\033[32m VFTPUSER=${VFTPUSER} \033[0m"
                echo -e "\033[32m USER_CONFIG_DIR=${USER_CONFIG_DIR} \033[0m"
                echo -e "\033[32m VSFTPD_LOGIN_DB=${VSFTPD_LOGIN_DB} \033[0m"
        fi

        /usr/bin/db_dump -d a ${VSFTPD_LOGIN_DB}|grep -w 'data:'|awk '{print $6}'>/etc/vsftpd/vfuser.txt
        for VSFTPD_DEL_VFUSER in ${VSFTPD_DEL_VFUSERS}
        do
                #删除密码行
                sed -i -E "/^${VSFTPD_DEL_VFUSER}$/{n;d}" /etc/vsftpd/vfuser.txt
                #删除用户行
                sed  -i -E "/^${VSFTPD_DEL_VFUSER}$/d" /etc/vsftpd/vfuser.txt
        done
        rm -rf ${VSFTPD_LOGIN_DB}
        db_load -T -t hash -f /etc/vsftpd/vfuser.txt ${VSFTPD_LOGIN_DB}
        chmod 700 ${VSFTPD_LOGIN_DB} 
        /etc/init.d/vsftpd restart >/dev/null
        echo ""
        echo -e '\033[32m -------------------------------------------------------\033[0m'
        echo -e '\033[32m -----------delete finish! select db file---------------\033[0m'
        echo -e '\033[32m -------------------------------------------------------\033[0m'
        /usr/bin/db_dump -d a ${VSFTPD_LOGIN_DB}|grep -w 'data:'|awk '{print $6}'
elif [ "$1" == '-i' ];then
        shift 1
        if [ ! -f $1 ];then
                echo -e '\033[33m ----文件不存在---- \033[0m'
                echo -e '\033[33m mUsage:{/bin/sh $0= add:-a vname1 passwd vname2 passwd  | delete: -d vnames | Import: -i filename |help} \033[0m'
                exit 1
        fi
        NR_LIST=`cat "$1" |awk '{print NR}'|sed '$p' -n`
        NR_LIST_YU=`expr ${NR_LIST} % 2`
        if [ ${NR_LIST_YU} -ne 0 ];then
                echo -e '\033[33m --------------please check the NR-------------- \033[0m'
                echo -e '\033[33m mUsage:{/bin/sh -i
                 name1
                 passwd
                 name2
                 passwd
                 \033[0m'
                echo -e '\033[33m ------------------------------------------------- \033[0m'
                exit 1
        fi
        #调用函数,检查是否安装配置了vsftpd虚拟用户,没有则安装配置
        INSTALL_CONFIG_VSFTPD_VNAME

        I_ADDVFUSERS=`cat $1|awk 'NR%2==0 {next}{print $0}'`
        for I_ADDVFUSER in ${I_ADDVFUSERS}
        do
                mkdir -p ${LOCAL_ROOT}/${I_ADDVFUSER}
                echo "${LOCAL_ROOT}/${I_ADDVFUSER}"
                chown -R ${VFTPUSER}:${VFTPUSER} ${LOCAL_ROOT}/${I_ADDVFUSER}
                cat>${USER_CONFIG_DIR}/${I_ADDVFUSER}<<-EOF
                #${I_ADDVFUSER}虚拟用户配置文件目录,即家目录
                local_root=${LOCAL_ROOT}/${I_ADDVFUSER}
                #允许登录用户有可写权限
                write_enable=YES
                #允许匿名用户下载,然后读取文件
                anon_world_readable_only=YES
                #允许匿名用户上传文件权限,只在write_enable=YES时生效
                anon_upload_enable=YES
                #允许匿名用户创建目录,只有在write_enable=YES时生效
                anon_mkdir_write_enable=YES
                #允许匿名用户其他权限,例如删除、重命名等                
                anon_other_write_enable=YES
                EOF
        done
        db_load -T -t hash -f $1 ${VSFTPD_LOGIN_DB}
        chmod 700 ${VSFTPD_LOGIN_DB}
        
        /etc/init.d/vsftpd restart >/dev/null
        echo ""
        echo -e '\033[32m -------------------------------------------------------\033[0m'
        echo -e '\033[32m -----------Import finish! select db file---------------\033[0m'
        echo -e '\033[32m -------------------------------------------------------\033[0m'
        /usr/bin/db_dump -d a ${VSFTPD_LOGIN_DB}|grep -w 'data:'|awk '{print $6}'

else
        echo -e '\033[33m -------------------------------------------------------------------------------------------------------- \033[0m'
        echo -e '\033[33m mUsage:{/bin/sh $0= add:-a vname1 passwd vname2 passwd  | delete: -d vnames | Import: -i filename |help} \033[0m'
        echo -e '\033[33m -------------------------------------------------------------------------------------------------------- \033[0m'
        exit 1
fi

执行结果 - 添加虚拟用户

[root@localhost /]# sh autoA_D_I_vfuser.sh -a aaaa 123456 bbbb 123456 cccc 123456
guest_username=ftpuser
/data/ftp/aaaa
/data/ftp/bbbb
/data/ftp/cccc

 -------------------------------------------------------
 -----------add finish! select db file---------------
 -------------------------------------------------------
aaaa
123456
bbbb
123456
cccc
123456
[root@localhost /]# 

连接测试
在这里插入图片描述

执行结果 - 删除用户

[root@localhost /]# sh autoA_D_I_vfuser.sh -d cccc bbbb

 VFTPUSER=ftpuser 
 USER_CONFIG_DIR=/etc/vsftpd/vsftpd_user_conf 
 VSFTPD_LOGIN_DB=/etc/vsftpd/vsftpd_login.db 

 -------------------------------------------------------
 -----------delete finish! select db file---------------
 -------------------------------------------------------
aaaa
123456
[root@localhost /]

执行结果 - 文件列表导入

[root@localhost /]# sh autoA_D_I_vfuser.sh -i txt 
guest_username=ftpuser
/data/ftp/xiaolu
/data/ftp/xiaoxi
/data/ftp/xiaoliu
/data/ftp/xiaowang
/data/ftp/xiaohuang
/data/ftp/ibbi

 -------------------------------------------------------
 -----------Import finish! select db file---------------
 -------------------------------------------------------
aaaa
123456
ibbi
123456
xiaohuang
123456
xiaolu
12345622222
xiaowang
123456
xiaoxi
123456
xiaoliu
123456
[root@localhost /]# 

连接测试
在这里插入图片描述

注:如发现连接不通,需要关闭selinux及开启防火墙端口
[root@localhost /]# setenforce 0
[root@localhost /]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
[root@localhost /]# firewall-cmd --zone=public --add-port=4000-5000/tcp --permanent
[root@localhost /]# firewall-cmd --zone=public --add-port=21/tcp --permanent
[root@localhost /]# firewall-cmd --reload

--------------------------end

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
vsftpd虚拟用户是指在vsftpd服务器中创建的一种特殊类型的用户,这些用户并不是系统用户,而是通过配置文件进行管理的。虚拟用户的权限和目录是由服务器配置文件中的设置来确定的。在搭建vsftpd服务器时,可以使用虚拟用户来实现更灵活的用户管理和权限控制。 要创建vsftpd虚拟用户,首先需要修改vsftpd的配置文件。在文件/etc/vsftpd.conf中,可以设置以下参数来配置虚拟用户: - guest_enable=YES:开启虚拟用户功能。 - guest_username=virtusers:指定虚拟用户的宿主用户。 - user_config_dir=/etc/vsftpd/vuser_conf:指定虚拟用户的配置文件目录。 然后,需要创建虚拟用户的配置文件。在目录/etc/vsftpd/vuser_conf/中,可以为每个虚拟用户创建一个单独的配置文件,例如/etc/vsftpd/vuser_conf/vuser1。在这个配置文件中,可以设置虚拟用户的权限和目录等信息。 接下来,需要创建虚拟宿主用户虚拟宿主用户是一个系统用户,用于承载所有虚拟用户的权限。可以使用以下命令创建虚拟宿主用户: ``` useradd -d /data/ftproot virtusers -s /sbin/nologin ``` 其中,-d参数指定虚拟宿主用户的home目录,-s参数指定系统用户登录的shell,使用/sbin/nologin可以增强安全性。 最后,需要创建相关的工作目录和设置权限。可以根据需要创建ftp的工作目录,例如/data/ftproot,然后设置相应的权限。 通过以上步骤,就可以成功创建和配置vsftpd虚拟用户,实现使用虚拟用户登录ftp的功能。请根据实际需求进行相应的配置和调整。[1][2][3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值