加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
pureftpd_vhost.sh 7.58 KB
一键复制 编辑 原始数据 按行查看 历史
Justo 提交于 2021-04-05 11:30 . [fix] Update libsodium not found
#!/bin/bash
# Author: yeho <lj2007331 AT gmail.com>
# BLOG: https://linuxeye.com
#
# Notes: OneinStack for CentOS/RedHat 7+ Debian 8+ and Ubuntu 16+
#
# Project home page:
# https://oneinstack.com
# https://github.com/oneinstack/oneinstack
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
clear
printf "
#######################################################################
# OneinStack for CentOS/RedHat 7+ Debian 8+ and Ubuntu 16+ #
# FTP virtual user account management #
# For more information please visit https://oneinstack.com #
#######################################################################
"
# Check if user is root
[ $(id -u) != "0" ] && { echo "${CFAILURE}Error: You must be root to run this script${CEND}"; exit 1; }
oneinstack_dir=$(dirname "`readlink -f $0`")
pushd ${oneinstack_dir} > /dev/null
. ./options.conf
. ./include/color.sh
[ ! -d "${pureftpd_install_dir}" ] && { echo "${CFAILURE}FTP server does not exist! ${CEND}"; exit 1; }
FTP_conf=${pureftpd_install_dir}/etc/pure-ftpd.conf
FTP_tmp_passfile=${pureftpd_install_dir}/etc/pureftpd_psss.tmp
Puredbfile=${pureftpd_install_dir}/etc/pureftpd.pdb
Passwdfile=${pureftpd_install_dir}/etc/pureftpd.passwd
FTP_bin=${pureftpd_install_dir}/bin/pure-pw
[ -z "`grep ^PureDB ${FTP_conf}`" ] && { echo "${CFAILURE}pure-ftpd is not own password database${CEND}" ; exit 1; }
ARG_NUM=$#
Show_Help() {
echo
echo "Usage: $0 command ...[parameters]....
--help, -h Show this help message
--useradd,--add Add username
--usermod Modify directory
--passwd Modify password
--userdel,--delete Delete User
--listalluser,--list List all User
--showuser List User details
--username,-u [ftp username] Ftp username
--password,-p [ftp password] Ftp password
--directory,-d,-D [ftp directory] Ftp home directory
"
}
TEMP=`getopt -o hu:p:d:D: --long help,useradd,add,usermod,passwd,userdel,delete,listalluser,list,showuser,username:,password:,directory: -- "$@" 2>/dev/null`
[ $? != 0 ] && echo "${CWARNING}ERROR: unknown argument! ${CEND}" && Show_Help && exit 1
eval set -- "${TEMP}"
while :; do
[ -z "$1" ] && break;
case "$1" in
-h|--help)
Show_Help; exit 0
;;
--add|--useradd)
useradd_flag=y; shift 1
;;
--usermod)
usermod_flag=y; shift 1
;;
--passwd)
passwd_flag=y; shift 1
;;
--delete|--userdel)
userdel_flag=y; shift 1
;;
--list|--listalluser)
listalluser_flag=y; shift 1
;;
--showuser)
showuser_flag=y; shift 1
;;
-u|--username)
username_flag=y; User=$2; shift 2
;;
-p|--password)
password_flag=y; Password=$2; shift 2
;;
-d|-D|--directory)
directory_flag=y; Directory=$2; shift 2
;;
--)
shift
;;
*)
echo "${CWARNING}ERROR: unknown argument! ${CEND}" && Show_Help && exit 1
;;
esac
done
USER() {
while :; do
if [ "${username_flag}" != 'y' ]; then
echo
read -e -p "Please input a username: " User
fi
if [ -z "${User}" ]; then
echo "${CWARNING}username can't be NULL! ${CEND}"
else
break
fi
done
}
PASSWORD() {
while :; do
if [ "${password_flag}" != 'y' ]; then
echo
read -e -p "Please input the password: " Password
fi
[ -n "`echo ${Password} | grep '[+|&]'`" ] && { echo "${CWARNING}input error,not contain a plus sign (+) and &${CEND}"; continue; }
if (( ${#Password} >= 5 )); then
echo -e "${Password}\n${Password}" > ${FTP_tmp_passfile}
break
else
echo "${CWARNING}Ftp password least 5 characters! ${CEND}"
fi
done
}
DIRECTORY() {
while :; do
if [ "${directory_flag}" != 'y' ]; then
echo
read -e -p "Please input the directory(Default directory: ${wwwroot_dir}): " Directory
fi
Directory=${Directory:-${wwwroot_dir}}
if [ ! -d "${Directory}" ]; then
echo "${CWARNING}The directory does not exist${CEND}"
else
break
fi
done
}
UserAdd() {
USER
[ -e "${Passwdfile}" ] && [ -n "`grep ^${User}: ${Passwdfile}`" ] && { echo "${CQUESTION}[${User}] is already existed! ${CEND}"; exit 1; }
PASSWORD;DIRECTORY
${FTP_bin} useradd ${User} -f ${Passwdfile} -u ${run_user} -g ${run_group} -d ${Directory} -m < ${FTP_tmp_passfile}
${FTP_bin} mkdb ${Puredbfile} -f ${Passwdfile} > /dev/null 2>&1
echo "#####################################"
echo
echo "[${User}] create successful! "
echo
echo "You user name is : ${CMSG}${User}${CEND}"
echo "You Password is : ${CMSG}${Password}${CEND}"
echo "You directory is : ${CMSG}${Directory}${CEND}"
echo
}
UserMod() {
USER
[ -e "${Passwdfile}" ] && [ -z "`grep ^${User}: ${Passwdfile}`" ] && { echo "${CQUESTION}[${User}] was not existed! ${CEND}"; exit 1; }
DIRECTORY
${FTP_bin} usermod ${User} -f ${Passwdfile} -d ${Directory} -m
${FTP_bin} mkdb ${Puredbfile} -f ${Passwdfile} > /dev/null 2>&1
echo "#####################################"
echo
echo "[${User}] modify a successful! "
echo
echo "You user name is : ${CMSG}${User}${CEND}"
echo "You new directory is : ${CMSG}${Directory}${CEND}"
echo
}
UserPasswd() {
USER
[ -e "${Passwdfile}" ] && [ -z "`grep ^${User}: ${Passwdfile}`" ] && { echo "${CQUESTION}[${User}] was not existed! ${CEND}"; exit 1; }
PASSWORD
${FTP_bin} passwd ${User} -f ${Passwdfile} -m < ${FTP_tmp_passfile}
${FTP_bin} mkdb ${Puredbfile} -f ${Passwdfile} > /dev/null 2>&1
echo "#####################################"
echo
echo "[${User}] Password changed successfully! "
echo
echo "You user name is : ${CMSG}${User}${CEND}"
echo "You new password is : ${CMSG}${Password}${CEND}"
echo
}
UserDel() {
if [ ! -e "${Passwdfile}" ]; then
echo "${CQUESTION}User was not existed! ${CEND}"
else
${FTP_bin} list
fi
USER
[ -e "${Passwdfile}" ] && [ -z "`grep ^${User}: ${Passwdfile}`" ] && { echo "${CQUESTION}[${User}] was not existed! ${CEND}"; exit 1; }
${FTP_bin} userdel ${User} -f ${Passwdfile} -m
${FTP_bin} mkdb ${Puredbfile} -f ${Passwdfile} > /dev/null 2>&1
echo
echo "[${User}] have been deleted! "
}
ListAllUser() {
if [ ! -e "${Passwdfile}" ]; then
echo "${CQUESTION}User was not existed! ${CEND}"
else
${FTP_bin} list
fi
}
ShowUser() {
USER
[ -e "${Passwdfile}" ] && [ -z "`grep ^${User}: ${Passwdfile}`" ] && { echo "${CQUESTION}[${User}] was not existed! ${CEND}"; exit 1; }
${FTP_bin} show ${User}
}
Menu() {
while :; do
printf "
What Are You Doing?
\t${CMSG}1${CEND}. UserAdd
\t${CMSG}2${CEND}. UserMod
\t${CMSG}3${CEND}. UserPasswd
\t${CMSG}4${CEND}. UserDel
\t${CMSG}5${CEND}. ListAllUser
\t${CMSG}6${CEND}. ShowUser
\t${CMSG}q${CEND}. Exit
"
read -e -p "Please input the correct option: " Number
if [[ ! ${Number} =~ ^[1-6,q]$ ]]; then
echo "${CFAILURE}input error! Please only input 1~6 and q${CEND}"
else
case "${Number}" in
1)
UserAdd
;;
2)
UserMod
;;
3)
UserPasswd
;;
4)
UserDel
;;
5)
ListAllUser
;;
6)
ShowUser
;;
q)
exit
;;
esac
fi
done
}
if [ ${ARG_NUM} == 0 ]; then
Menu
else
[ "${useradd_flag}" == 'y' ] && UserAdd
[ "${usermod_flag}" == 'y' ] && UserMod
[ "${passwd_flag}" == 'y' ] && UserPasswd
[ "${userdel_flag}" == 'y' ] && UserDel
[ "${listalluser_flag}" == 'y' ] && ListAllUser
[ "${showuser_flag}" == 'y' ] && ShowUser
fi
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化