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

2021-07-12 10:30:09 浏览数 (1)

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

脚本内容如下:

#!/bin/bash

#Date:2018-5-20 14:08:55

#Author Blog:

# https://www.yangxingzhen.com

#Author WeChat:

# 微信公众号:小柒博客

#Author mirrors site:

# https://mirrors.yangxingzhen.com

#About the Autho

# BY:YangXingZhen

# Mail:xingzhen.yang@yangxingzhen.com

#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 "33[32m Please enter the username that needs to be create 33[0m"

echo -e "33[33m Usage: sh $0 {admin|admin123|help} 33[0m"

exit 0

elif [[ $USER == "help" ]];then

echo -e "33[32m Please enter the username that needs to be create 33[0m"

echo -e "33[33m Usage: sh $0 {admin|admin123|help} 33[0m"

exit 0

fi

if [ $SYS_VERSION -eq 7 ];then

echo -e "33[32m Your system version is CentOS `awk '{print $(NF-1)}' /etc/redhat-release` 33[0m"

if [ ! -f $FTP_DIR/vsftpd.conf ];then

yum -y install vsftpd pam* libdb-utils libdb*

else

echo -e "33[33m This software has been installed 33[0m"

fi

else

echo -e "33[32m Your system version is CentOS `awk '{print $(NF-1)}' /etc/redhat-release` 33[0m"

if [ ! -f $FTP_DIR/vsftpd.conf ];then

yum -y install vsftpd db4*

else

echo -e "33[33m This software has been installed 33[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 "33[34m user $i already exists,Please reenter the username 33[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 ftpuse

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=ftpuse

#设置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 "33[31m User $j Create Success,Please check the record file >> $FTP_DIR/create_list.txt33[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

0 人点赞