这篇文章主要介绍为自动创建VSFTPD虚拟用户脚本,有需要的朋友可以参考下。
脚本内容如下:
#!/bin/bash
#2017-5-20 13:14:00
#Author blog:
# https://nuoyo.cn
#Author site:
# https://nuoyo.cn/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