VSFTPD创建虚拟用户脚本(可批量)

2018-05-2013:47:33 1 2,195

这篇文章主要介绍为自动创建vsftpd虚拟用户脚本,有需要的朋友可以参考下。

脚本内容如下:

#!/bin/bash
#2017-5-20 13:14:00
#Author blog:
# https://www.yangxingzhen.com
#Author site:
# https://www.yangxingzhen.com/sitemap.html
#Author mirrors site:
# https://mirrors.yangxingzhen.com
#About the Author
# BY:、、、小柒
# QQ:675583110
#Create vsftpd virtual user(支持创建单个用户跟多个用户)
#This script applies to Centos 6.x and Centos 7.x

SYS_VERSION=`awk -F. '{print $1}' /etc/redhat-release |awk '{print $NF}'`
FTP_DIR="/etc/vsftpd"
PASSWD="yangxingzhen.com"
PAM_DIR="/etc/pam.d"
FTP_HOME="/home/ftpuser"
USER="$*"

if [ $# -eq 0 ];then
    echo -e "\033[32m Please enter the username that needs to be create \033[0m"
    echo -e "\033[33m Usage: sh $0 {admin|admin123|help} \033[0m"
    exit 0
elif [[ $USER == "help" ]];then
    echo -e "\033[32m Please enter the username that needs to be create \033[0m"
    echo -e "\033[33m Usage: sh $0 {admin|admin123|help} \033[0m"
    exit 0
fi
if [ $SYS_VERSION -eq 7 ];then
    echo -e "\033[32m Your system version is CentOS `awk '{print $(NF-1)}' /etc/redhat-release` \033[0m"
    if [ ! -f $FTP_DIR/vsftpd.conf ];then
        yum -y install vsftpd pam* libdb-utils libdb*
    else
        echo -e "\033[33m This software has been installed \033[0m"
    fi
else
    echo -e "\033[32m Your system version is CentOS `awk '{print $(NF-1)}' /etc/redhat-release` \033[0m"
    if [ ! -f $FTP_DIR/vsftpd.conf ];then
        yum -y install vsftpd db4*
    else
        echo -e "\033[33m This software has been installed \033[0m"
    fi
fi
if [ ! -f $FTP_DIR/ftpusers.txt ];then
    touch $FTP_DIR/ftpusers.txt
fi
for i in `echo $USER`
do
grep -qw "${i}" $FTP_DIR/ftpusers.txt
if [ $? -ne 0 ];then
cat >>$FTP_DIR/ftpusers.txt <<EOF
$i
$PASSWD
EOF
else
    echo -e "\033[34m user $i already exists,Please reenter the username \033[0m"
fi
done
db_load -T -t hash -f $FTP_DIR/ftpusers.txt $FTP_DIR/vsftpd_login.db
chmod 700 $FTP_DIR/vsftpd_login.db
if [ ! -f $PAM_DIR/vsftpd.bak ];then
    cp $PAM_DIR/vsftpd $PAM_DIR/vsftpd.bak
cat >$PAM_DIR/vsftpd <<EOF
auth sufficient /lib64/security/pam_userdb.so db=$FTP_DIR/vsftpd_login
account sufficient /lib64/security/pam_userdb.so db=$FTP_DIR/vsftpd_login
EOF
fi
if [ `cat /etc/passwd |grep -wc ftpuser` -eq 0 ];then
    #useradd -s /sbin/nologin ftpuser >/dev/null 2>&1
    useradd -s /sbin/nologin ftpuser
fi
if [ ! -f $FTP_DIR/vsftpd.conf.bak ];then
    \cp $FTP_DIR/vsftpd.conf $FTP_DIR/vsftpd.conf.bak
fi
NUM=`grep -wc "guest_enable" $FTP_DIR/vsftpd.conf`
if [ $NUM -eq 0 ];then
cat >$FTP_DIR/vsftpd.conf <<EOF
#禁止匿名用户访问
anonymous_enable=NO
#允许本地用户登录FTP
local_enable=YES
#允许登陆用户有写权限
write_enable=YES
#设置本地用户的文件生成掩码为022,默认是077
local_umask=022
#激活目录信息,当远程用户更改目录时,将出现提示信息
dirmessage_enable=YES
#启用上传和下载日志功能
xferlog_enable=YES
#启用FTP数据端口的连接请求
connect_from_port_20=YES
#日志文件名和路径,默认值为/var/log/vsftpd.log
xferlog_file=/var/log/vsftpd.log
#使用标准的ftpd xferlog日志文件格式
xferlog_std_format=YES
#启用ASCII模式上传数据。默认值为NO
ascii_upload_enable=YES
#启用ASCII模式下载数据。默认值为NO
ascii_download_enable=YES
#使vsftpd处于独立启动监听端口模式
listen=YES
#启用虚拟用户
guest_enable=YES
#指定访问用户名
guest_username=ftpuser
#设置PAM使用的名称,默认值为$PAM_DIR/vsftpd
pam_service_name=vsftpd
#设置用户配置文件所在的目录
user_config_dir=$FTP_DIR/vsftpd_user_conf
#虚拟用户使用与本地用户相同的权限
virtual_use_local_privs=YES
#指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO
chroot_local_user=NO
#启用chroot_list_file配置项指定的用户列表文件。默认值为NO
chroot_list_enable=YES
#指定用户列表文件,该文件用于控制哪些用户可以切换到用户家目录的上级目录
chroot_list_file=$FTP_DIR/vsftpd.chroot_list
EOF
fi
if [ ! -d $FTP_DIR/vsftpd_user_conf ];then
    mkdir -p $FTP_DIR/vsftpd_user_conf
fi
if [ ! -f $FTP_DIR/vsftpd.chroot_list ];then
    touch $FTP_DIR/vsftpd.chroot_list
fi
for q in `echo $USER`
do
grep -qw ${q} $FTP_DIR/vsftpd.chroot_list
if [ $? -ne 0 ];then
cat >>$FTP_DIR/vsftpd.chroot_list <<EOF
$q
EOF
fi
done
for j in `echo $USER`
do
if [ ! -f $FTP_DIR/vsftpd_user_conf/$j ];then
cat >$FTP_DIR/vsftpd_user_conf/$j <<EOF
#指定用户的家目录
local_root=$FTP_HOME/$j
#允许登陆用户有写权限
write_enable=YES
#允许登录用户下载文件
anon_world_readable_only=YES
#允许登录用户有上传文件(非目录)的权限
anon_upload_enable=YES
#允许登录用户创建目录的权限
anon_mkdir_write_enable=YES
#允许登录用户更多于上传或者建立目录之外的权限,如删除或者重命名
anon_other_write_enable=YES
EOF
mkdir $FTP_HOME/$j
chown -R ftpuser.ftpuser $FTP_HOME
echo "`date +%Y/%m/%d-%T` $j Create Success" >> $FTP_DIR/create_list.txt
echo -e "\033[31m User $j Create Success,Please check the record file >> $FTP_DIR/create_list.txt\033[0m"
fi
done
if [ $SYS_VERSION -eq 7 ];then
    systemctl restart vsftpd.service
    systemctl enable vsftpd.service
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    sed -i "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config
    setenforce 0
else
    service vsftpd restart
    chkconfig vsftpd on
    service iptables stop
    chkconfig iptables off
    sed -i "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config
    setenforce 0
fi
  • 微信号
  • 微信扫一扫加我~~
  • weinxin
  • 微信公众号
  • 微信扫一扫关注我吧~~
  • weinxin
广告也精彩

发表评论

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

目前评论:1   其中:访客  1   博主  0

    • avatar 运维老司机

      亲测,写的不错,感谢博主 :razz: