init
This commit is contained in:
@@ -0,0 +1,271 @@
|
||||
#!/bin/bash
|
||||
# Author: yeho <lj2007331 AT gmail.com>
|
||||
# BLOG: https://linuxeye.com
|
||||
#
|
||||
# Notes: OneinStack for CentOS/RedHat 7+ Debian 9+ 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 9+ 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="$(cd "$(dirname "$(readlink -f "$0" 2>/dev/null || echo "$0")")/.." && pwd)"
|
||||
cd "${oneinstack_dir}" || exit 1
|
||||
. ./config/options.conf
|
||||
. ./lib/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
|
||||
Reference in New Issue
Block a user