#!/bin/bash USRdatabase="${ADM_user}/ADMuser" [[ ! -d ${ADM_user}/B-ADMuser ]] && mkdir ${ADM_user}/B-ADMuser err_fun(){ case $1 in 1)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Usuario Nulo")"; sleep 2s; tput cuu1; tput dl1;; 2)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Usuario con nombre muy corto")"; sleep 2s; tput cuu1; tput dl1;; 3)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Usuario con nombre muy grande")"; sleep 2s; tput cuu1; tput dl1;; 4)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Contraseña Nula")"; sleep 2s; tput cuu1; tput dl1;; 5)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Contraseña muy corta")"; sleep 2s; tput cuu1; tput dl1;; 6)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Contraseña muy grande")"; sleep 2s; tput cuu1; tput dl1;; 7)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Duracion Nula")"; sleep 2s; tput cuu1; tput dl1;; 8)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Duracion invalida utilize numeros")"; sleep 2s; tput cuu1; tput dl1;; 9)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Duracion maxima y de un año")"; sleep 2s; tput cuu1; tput dl1;; 11)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Limite Nulo")"; sleep 2s; tput cuu1; tput dl1;; 12)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Limite invalido utilize numeros")"; sleep 2s; tput cuu1; tput dl1;; 13)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Limite maximo de 999")"; sleep 2s; tput cuu1; tput dl1;; 14)tput cuu1; tput dl1 && msg -verm "$(fun_trans "Usuario Ya Existe")"; sleep 2s; tput cuu1; tput dl1;; esac } # Open VPN newclient(){ #Nome #Senha #usermod -p $(openssl passwd -1 $2) $1 while [[ ${newfile} != @(s|S|y|Y|n|N) ]]; do msg -bar read -p "Crear Archivo OpenVPN? [S/N]: " -e -i S newfile tput cuu1 && tput dl1 done if [[ ${newfile} = @(s|S) ]]; then #Generates the custom client.ovpn rm -rf /etc/openvpn/easy-rsa/pki/reqs/$1.req rm -rf /etc/openvpn/easy-rsa/pki/issued/$1.crt rm -rf /etc/openvpn/easy-rsa/pki/private/$1.key cd /etc/openvpn/easy-rsa/ ./easyrsa build-client-full $1 nopass > /dev/null 2>&1 cd cp /etc/openvpn/client-common.txt ~/$1.ovpn echo "" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/ca.crt >> ~/$1.ovpn echo "" >> ~/$1.ovpn echo "" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/issued/$1.crt >> ~/$1.ovpn echo "" >> ~/$1.ovpn echo "" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/private/$1.key >> ~/$1.ovpn echo "" >> ~/$1.ovpn echo "" >> ~/$1.ovpn cat /etc/openvpn/ta.key >> ~/$1.ovpn echo "" >> ~/$1.ovpn while [[ ${ovpnauth} != @(s|S|y|Y|n|N) ]]; do read -p "$(fun_trans "Colocar autenticacion de usuario en el archivo")? [S/N]: " -e -i S ovpnauth tput cuu1 && tput dl1 done [[ ${ovpnauth} = @(s|S) ]] && sed -i "s;auth-user-pass;\n$1\n$2\n;g" ~/$1.ovpn cd $HOME zip ./$1.zip ./$1.ovpn > /dev/null 2>&1 rm ./$1.ovpn > /dev/null 2>&1 echo -e "\033[1;31m$(fun_trans "Archivo creado"): ($HOME/$1.zip)" fi } data_user(){ cat_users=$(cat "/etc/passwd"|grep 'home'|grep 'false'|grep -v 'syslog') [[ -z "$(echo "${cat_users}"|awk -F ':' '{print $5}'|cut -d ',' -f1|grep -v 'hwid'|grep -v 'token'|head -1)" ]] && print_center -verm2 "NO HAY USUARIOS SSH REGISTRADOS" && return 1 dat_us=$(printf '%-13s%-14s%-10s%-4s%-6s%s' 'Usuario' 'Contraseña' 'Fecha' 'Dia' 'Limit' 'Statu') msg -azu " $dat_us" msg -bar i=1 for u in `echo "${cat_users}"|awk -F ':' '{print $1}'`; do fix_hwid_token=$(echo "${cat_users}"|grep -w "$u"|awk -F ':' '{print $5}'|cut -d ',' -f1) && [[ "${fix_hwid_token}" = @(hwid|token) ]] && continue fecha=$(chage -l "$u"|sed -n '4p'|awk -F ': ' '{print $2}') mes_dia=$(echo $fecha|awk -F ',' '{print $1}'|sed 's/ //g') ano=$(echo $fecha|awk -F ', ' '{printf $2}'|cut -c 3-) us=$(printf '%-12s' "$u") pass=$(cat "/etc/passwd"|grep -w "$u"|awk -F ':' '{print $5}'|cut -d ',' -f2) [[ "${#pass}" -gt '12' ]] && pass="Desconosida" pass="$(printf '%-12s' "$pass")" unset stat if [[ $(passwd --status $u|cut -d ' ' -f2) = "P" ]]; then stat="$(msg -verd "ULK")" else stat="$(msg -verm2 "LOK")" fi Limit=$(cat "/etc/passwd"|grep -w "$u"|awk -F ':' '{print $5}'|cut -d ',' -f1) [[ "${#Limit}" = "1" ]] && Limit=$(printf '%2s%-4s' "$Limit") || Limit=$(printf '%-6s' "$Limit") echo -ne "$(msg -verd "$i")$(msg -verm2 "-")$(msg -azu "${us}") $(msg -azu "${pass}")" if [[ $(echo $fecha|awk '{print $2}') = "" ]]; then exp="$(printf '%8s%-2s' '[X]')" exp+="$(printf '%-6s' '[X]')" echo " $(msg -verm2 "$fecha")$(msg -verd "$exp")$(echo -e "$stat")" else if [[ $(date +%s) -gt $(date '+%s' -d "${fecha}") ]]; then exp="$(printf '%-5s' "Exp")" echo " $(msg -verm2 "$mes_dia/$ano") $(msg -verm2 "$exp")$(msg -ama "$Limit")$(echo -e "$stat")" else EXPTIME="$(($(($(date '+%s' -d "${fecha}") - $(date +%s))) / 86400))" [[ "${#EXPTIME}" = "1" ]] && exp="$(printf '%2s%-3s' "$EXPTIME")" || exp="$(printf '%-5s' "$EXPTIME")" echo " $(msg -verm2 "$mes_dia/$ano") $(msg -verd "$exp")$(msg -ama "$Limit")$(echo -e "$stat")" fi fi let i++ done } #======CREAR NUEVO USUARIO=========== #useradd -M -s /bin/false -e 2021-10-16 -K PASS_MAX_DAYS=1 ruso99 add_user(){ Fecha=`date +%d-%m-%y-%R` [[ $(cat /etc/passwd |grep $1: |grep -vi [a-z]$1 |grep -v [0-9]$1 > /dev/null) ]] && return 1 valid=$(date '+%C%y-%m-%d' -d " +$3 days") clear msg -bar system=$(cat -n /etc/issue |grep 1 |cut -d ' ' -f6,7,8 |sed 's/1//' |sed 's/ //') distro=$(echo "$system"|awk '{print $1}') vercion=$(echo $system|awk '{print $2}'|cut -d '.' -f1) if [[ ${distro} = @(Ubuntu|Debian) ]]; then if [[ ${vercion} = "16" ]]; then pass=$(openssl passwd -1 $2) else pass=$(openssl passwd -6 $2) fi fi if useradd -M -s /bin/false -e ${valid} -K PASS_MAX_DAYS=$3 -p ${pass} -c $4,$2 $1 ; then if [[ $5 = @(s|S) ]]; then rm -rf /etc/openvpn/easy-rsa/pki/reqs/$1.req rm -rf /etc/openvpn/easy-rsa/pki/issued/$1.crt rm -rf /etc/openvpn/easy-rsa/pki/private/$1.key cd /etc/openvpn/easy-rsa/ ./easyrsa build-client-full $1 nopass > /dev/null 2>&1 cd cp /etc/openvpn/client-common.txt ~/$1.ovpn echo "" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/ca.crt >> ~/$1.ovpn echo "" >> ~/$1.ovpn echo "" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/issued/$1.crt >> ~/$1.ovpn echo "" >> ~/$1.ovpn echo "" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/private/$1.key >> ~/$1.ovpn echo "" >> ~/$1.ovpn echo "" >> ~/$1.ovpn cat /etc/openvpn/ta.key >> ~/$1.ovpn echo "" >> ~/$1.ovpn [[ $6 = @(s|S) ]] && sed -i "s;auth-user-pass;\n$1\n$2\n;g" ~/$1.ovpn cd $HOME zip ./$1.zip ./$1.ovpn > /dev/null 2>&1 rm ./$1.ovpn > /dev/null 2>&1 zip_ovpn="$HOME/$1.zip" fi print_center -verd "$(fun_trans "Usuario Creado con Exito")" else print_center -verm2 "$(fun_trans "Error, Usuario no creado")" msg -bar sleep 3 return fi msg -bar } mostrar_usuarios(){ for u in `cat /etc/passwd|grep 'home'|grep 'false'|grep -v 'syslog'|grep -v 'hwid'|grep -v 'token'|awk -F ':' '{print $1}'`; do echo "$u" done } new_user(){ clear usuarios_ativos=('' $(mostrar_usuarios)) msg -bar print_center -ama "$(fun_trans "CREAR USUARIOS")" msg -bar data_user back while true; do msg -ne "$(fun_trans "Nombre Del Nuevo Usuario"): " read nomeuser nomeuser="$(echo $nomeuser|sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚñÑçǪº/aAaAaAaAeEeEiIoOoOoOuUnNcCao/')" nomeuser="$(echo $nomeuser|sed -e 's/[^a-z0-9 -]//ig')" if [[ -z $nomeuser ]]; then err_fun 1 && continue elif [[ "${nomeuser}" = "0" ]]; then return elif [[ "${#nomeuser}" -lt "4" ]]; then err_fun 2 && continue elif [[ "${#nomeuser}" -gt "12" ]]; then err_fun 3 && continue elif [[ "$(echo ${usuarios_ativos[@]}|grep -w "$nomeuser")" ]]; then err_fun 14 && continue fi break done while true; do msg -ne "$(fun_trans "Contraseña Del Nuevo Usuario")" read -p ": " senhauser senhauser="$(echo $senhauser|sed 'y/áÁàÀãÃâÂéÉêÊíÍóÓõÕôÔúÚñÑçǪº/aAaAaAaAeEeEiIoOoOoOuUnNcCao/')" if [[ -z $senhauser ]]; then err_fun 4 && continue elif [[ "${#senhauser}" -lt "4" ]]; then err_fun 5 && continue elif [[ "${#senhauser}" -gt "12" ]]; then err_fun 6 && continue fi break done while true; do msg -ne "$(fun_trans "Tiempo de Duracion del Nuevo Usuario")" read -p ": " diasuser if [[ -z "$diasuser" ]]; then err_fun 7 && continue elif [[ "$diasuser" != +([0-9]) ]]; then err_fun 8 && continue elif [[ "$diasuser" -gt "360" ]]; then err_fun 9 && continue fi break done while true; do msg -ne "$(fun_trans "Limite de Conexion del Nuevo Usuario")" read -p ": " limiteuser if [[ -z "$limiteuser" ]]; then err_fun 11 && continue elif [[ "$limiteuser" != +([0-9]) ]]; then err_fun 12 && continue elif [[ "$limiteuser" -gt "999" ]]; then err_fun 13 && continue fi break done [[ $(dpkg --get-selections|grep -w "openvpn"|head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && { while [[ ${newfile} != @(s|S|y|Y|n|N) ]]; do msg -ne "$(fun_trans "Crear Archivo") OpenVPN? [S/N]: " read -e -i S newfile done if [[ ${newfile} = @(s|S) ]]; then while [[ ${ovpnauth} != @(s|S|y|Y|n|N) ]]; do msg -ne "$(fun_trans "Autenticacion de usuario en el archivo")? [S/N]: " read -e -i S ovpnauth done fi } add_user "${nomeuser}" "${senhauser}" "${diasuser}" "${limiteuser}" "${newfile}" "${ovpnauth}" echo "${nomeuser}|${senhauser}" >> ${ADM_user}/passwd #[[ $(dpkg --get-selections|grep -w "openvpn"|head -1) ]] && [[ -e /etc/openvpn/openvpn-status.log ]] && newclient "$nomeuser" "$senhauser" msg -ne " $(fun_trans "IP del Servidor"): " && msg -ama " $(fun_ip)" msg -ne " $(fun_trans "Usuario"): " && msg -ama " $nomeuser" msg -ne " $(fun_trans "Contraseña"): " && msg -ama " $senhauser" msg -ne " $(fun_trans "Dias de Duracion"): " && msg -ama " $diasuser" msg -ne " $(fun_trans "Limite de Conexion"): " && msg -ama " $limiteuser" msg -ne " $(fun_trans "Fecha de Expiracion"): " && msg -ama "$(date "+%F" -d " + $diasuser days")" [[ ! -z "$zip_ovpn" ]] && msg -ne " $(fun_trans "Archivo OVPN"): " && msg -ama " $zip_ovpn" msg -bar print_center -ama "►► Presione enter para continuar ◄◄" read return 1 } #=================================== #======CREAR USUARIO TEMPORAL====== mktmpuser(){ while [[ -z $name ]]; do msg -ne " Nombre del usuario: " read name if [[ -z $name ]]; then tput cuu1 && tput dl1 msg -ama " Escriva un nombre de usuario" sleep 2 tput cuu1 && tput dl1 unset name continue fi done if cat /etc/passwd |grep $name: |grep -vi [a-z]$name |grep -v [0-9]$name > /dev/null ; then tput cuu1 && tput dl1 msg -verm2 " El usuario $name ya existe" sleep 2 tput cuu1 && tput dl1 return fi while [[ -z $pass ]]; do msg -ne " Contraseña: " read pass if [[ -z $pass ]]; then tput cuu1 && tput dl1 msg -ama " Escriva una Contraseña" sleep 2 tput cuu1 && tput dl1 unset pass continue fi done while [[ -z $tmp ]]; do msg -ne " Duracion en minutos: " read tmp if [[ -z $tmp ]]; then tput cuu1 && tput dl1 msg -ama " Escriva un tiempo de duracion" sleep 2 tput cuu1 && tput dl1 unset tmp continue fi done if [[ -z $1 ]]; then msg -ne " Aplicar a conf Default [S/N]: " read def if [[ ! "$def" != @(s|S|y|Y) ]]; then echo -e "usuario=$name Contraseña=$pass Tiempo=$tmp" > ${Default} fi fi useradd -M -s /bin/false -p $(openssl passwd -6 $pass) $name #(echo $pass; echo $pass)|passwd $name 2>/dev/null touch /tmp/$name timer=$(( $tmp * 60 )) timer2="'$timer's" echo "#!/bin/bash sleep $timer2 kill"' $(ps -u '"$name |awk '{print"' $tmp'"}') 1> /dev/null 2> /dev/null userdel --force $name rm -rf /tmp/$name exit" > /tmp/$name chmod 777 /tmp/$name touch /tmp/cmd chmod 777 /tmp/cmd echo "nohup /tmp/$name & >/dev/null" > /tmp/cmd /tmp/cmd 2>/dev/null 1>/dev/null rm -rf /tmp/cmd title "USUARIO TEMPORAL CREADO" echo -e " $(msg -verm2 "IP: ") $(msg -ama "$(fun_ip)")" echo -e " $(msg -verm2 "Usuario: ") $(msg -ama "$name")" echo -e " $(msg -verm2 "Contraseña:") $(msg -ama "$pass")" echo -e " $(msg -verm2 "Duracion: ") $(msg -ama "$tmp minutos")" msg -bar read foo return } userTMP(){ tmp_f="${ADM_user}/userTMP" && [[ ! -d ${tmp_f} ]] && mkdir ${tmp_f} Default="${tmp_f}/Default" if [[ ! -e ${Default} ]]; then echo -e "usuario=ADMRufu Contraseña=ADMRufu Tiempo=15" > ${Default} fi name="$(cat ${Default}|grep "usuario"|cut -d "=" -f2)" pass="$(cat ${Default}|grep "Contraseña"|cut -d "=" -f2)" tmp="$(cat ${Default}|grep "Tiempo"|cut -d "=" -f2)" title "CONF DE USUARIO TEMPORAL" print_center -teal "Usuario Default" msg -bar3 echo -e " $(msg -verm2 "IP: ") $(msg -ama "$(fun_ip)")" echo -e " $(msg -verm2 "Usuario: ") $(msg -ama "$name")" echo -e " $(msg -verm2 "Contraseña:") $(msg -ama "$pass")" echo -e " $(msg -verm2 "Duracion: ") $(msg -ama "$tmp minutos")" msg -bar menu_func "APLICAR CONF DEFAULT" "CONF PERSONALIZADA" back opcion=$(selection_fun 2) case $opcion in 1)mktmpuser "def";; 2)unset name unset pass unset tmp mktmpuser;; 0)return;; esac } #=========================================== #=====REMOVER USUARIO======================= rm_user(){ #nome if userdel --force "$1" ; then sed -i "/$1/d" ${ADM_user}/passwd print_center -verd "[$(fun_trans "Removido")]" else print_center -verm "[$(fun_trans "No Removido")]" fi } remove_user(){ clear usuarios_ativos=('' $(mostrar_usuarios)) msg -bar print_center -ama "$(fun_trans "REMOVER USUARIOS")" msg -bar data_user back print_center -ama "$(fun_trans "Escriba o Seleccione un Usuario")" msg -bar unset selection while [[ -z ${selection} ]]; do msg -nazu "$(fun_trans "Seleccione Una Opcion"): " && read selection tput cuu1 && tput dl1 done [[ ${selection} = "0" ]] && return if [[ ! $(echo "${selection}" | egrep '[^0-9]') ]]; then usuario_del="${usuarios_ativos[$selection]}" else usuario_del="$selection" fi [[ -z $usuario_del ]] && { msg -verm "$(fun_trans "Error, Usuario Invalido")" msg -bar return 1 } [[ ! $(echo ${usuarios_ativos[@]}|grep -w "$usuario_del") ]] && { msg -verm "$(fun_trans "Error, Usuario Invalido")" msg -bar return 1 } print_center -ama "$(fun_trans "Usuario Seleccionado"): $usuario_del" pkill -u $usuario_del droplim=`droppids|grep -w "$usuario_del"|awk '{print $2}'` kill -9 $droplim &>/dev/null rm_user "$usuario_del" msg -bar sleep 3 } #========RENOVAR USUARIOS========== renew_user_fun(){ #nome dias datexp=$(date "+%F" -d " + $2 days") && valid=$(date '+%C%y-%m-%d' -d " + $2 days") if chage -E $valid $1 ; then print_center -ama "$(fun_trans "Usuario Renovado Con Exito")" else print_center -verm "$(fun_trans "Error, Usuario no Renovado")" fi } renew_user(){ clear usuarios_ativos=('' $(mostrar_usuarios)) msg -bar print_center -ama "$(fun_trans "RENOVAR USUARIOS")" msg -bar data_user back print_center -ama "$(fun_trans "Escriba o seleccione un Usuario")" msg -bar unset selection while [[ -z ${selection} ]]; do msg -nazu "$(fun_trans " Seleccione una Opcion"): " && read selection tput cuu1 && tput dl1 done [[ ${selection} = "0" ]] && return if [[ ! $(echo "${selection}" | egrep '[^0-9]') ]]; then useredit="${usuarios_ativos[$selection]}" else useredit="$selection" fi [[ -z $useredit ]] && { msg -verm "$(fun_trans "Error, Usuario Invalido")" msg -bar sleep 3 return 1 } [[ ! $(echo ${usuarios_ativos[@]}|grep -w "$useredit") ]] && { msg -verm "$(fun_trans "Error, Usuario Invalido")" msg -bar sleep 3 return 1 } while true; do msg -ne "$(fun_trans "Nuevo Tiempo de Duracion de"): $useredit" read -p ": " diasuser if [[ -z "$diasuser" ]]; then echo -e '\n\n\n' err_fun 7 && continue elif [[ "$diasuser" != +([0-9]) ]]; then echo -e '\n\n\n' err_fun 8 && continue elif [[ "$diasuser" -gt "360" ]]; then echo -e '\n\n\n' err_fun 9 && continue fi break done msg -bar renew_user_fun "${useredit}" "${diasuser}" msg -bar sleep 3 } edit_user_fun(){ datexp=$(date "+%F" -d " + $3 days") && valid=$(date '+%C%y-%m-%d' -d " + $3 days") clear msg -bar if usermod -p $(openssl passwd -6 $2) -e $valid -c $4,$2 $1 ; then print_center -verd "Usuario Modificado Con Exito" else print_center -verm2 "Error, Usuario no Modificado" msg -bar sleep 3 return fi msg -bar } edit_user(){ clear usuarios_ativos=('' $(mostrar_usuarios)) msg -bar print_center -ama "$(fun_trans "EDITAR USUARIOS")" msg -bar data_user back print_center -ama "$(fun_trans "Escriba o seleccione un Usuario")" msg -bar unset selection while [[ -z ${selection} ]]; do msg -nazu "$(fun_trans " Seleccione una Opcion"): " && read selection tput cuu1; tput dl1 done [[ ${selection} = "0" ]] && return if [[ ! $(echo "${selection}" | egrep '[^0-9]') ]]; then useredit="${usuarios_ativos[$selection]}" else useredit="$selection" fi [[ -z $useredit ]] && { msg -verm "$(fun_trans "Error, Usuario Invalido")" msg -bar return 1 } [[ ! $(echo ${usuarios_ativos[@]}|grep -w "$useredit") ]] && { msg -verm "$(fun_trans "Error, Usuario Invalido")" msg -bar return 1 } while true; do msg -ne "$(fun_trans "Usuario Seleccionado"): " && echo -e "$useredit" msg -ne "$(fun_trans "Nueva Contraseña de") $useredit" read -p ": " senhauser if [[ -z "$senhauser" ]]; then err_fun 4 && continue elif [[ "${#senhauser}" -lt "4" ]]; then err_fun 5 && continue elif [[ "${#senhauser}" -gt "12" ]]; then err_fun 6 && continue fi break done while true; do msg -ne "$(fun_trans "Dias de Duracion de"): $useredit" read -p ": " diasuser if [[ -z "$diasuser" ]]; then err_fun 7 && continue elif [[ "$diasuser" != +([0-9]) ]]; then err_fun 8 && continue elif [[ "$diasuser" -gt "360" ]]; then err_fun 9 && continue fi break done while true; do msg -ne "$(fun_trans "Nuevo Limite de Conexion de"): $useredit" read -p ": " limiteuser if [[ -z "$limiteuser" ]]; then err_fun 11 && continue elif [[ "$limiteuser" != +([0-9]) ]]; then err_fun 12 && continue elif [[ "$limiteuser" -gt "999" ]]; then err_fun 13 && continue fi break done edit_user_fun "${useredit}" "${senhauser}" "${diasuser}" "${limiteuser}" msg -ne " $(fun_trans "IP del Servidor"): " && msg -ama " $(fun_ip)" msg -ne " $(fun_trans "Usuario"): " && msg -ama " $useredit" msg -ne " $(fun_trans "Contraseña"): " && msg -ama " $senhauser" msg -ne " $(fun_trans "Dias de Duracion"): " && msg -ama " $diasuser" msg -ne " $(fun_trans "Limite de Conexion"): " && msg -ama " $limiteuser" msg -ne " $(fun_trans "Fecha de Expiracion"): " && msg -ama "$(date "+%F" -d " + $diasuser days")" msg -bar print_center -ama "►► Presione enter para continuar ◄◄" read return } eliminar_all(){ title "ELIMINAR TODOS LOS USUARIOS" msg -ne " [S/N]: " read opcion [[ "${opcion}" != @(S|s) ]] && return 1 service dropbear stop &>/dev/null service sshd stop &>/dev/null service ssh stop &>/dev/null service stunnel4 stop &>/dev/null service squid stop &>/dev/null cat_users=$(cat /etc/passwd|grep 'home'|grep 'false'|grep -v 'syslog'|grep -v "hwid"|grep -v "token") for user in `echo "$cat_users"|awk -F ':' '{print $1}'`; do userpid=$(ps -u $user |awk {'print $1'}) kill "$userpid" 2>/dev/null userdel --force $user user2=$(printf '%-15s' "$user") echo -e " $(msg -azu "USUARIO:") $(msg -ama "$user2")$(msg -verm2 "Eliminado")" done service sshd restart &>/dev/null service ssh restart &>/dev/null service dropbear start &>/dev/null service stunnel4 start &>/dev/null service squid restart &>/dev/null msg -bar print_center -ama "USUARIOS ELIMINANDOS" enter return 1 } sshmonitor(){ clear cat_users=$(cat "/etc/passwd"|grep 'home'|grep 'false'|grep -v 'syslog') cab=$(printf '%-15s%-13s%-15s%-9s' 'USUARIO' 'STATUS' 'CONEXIONES' 'TIEMPO') msg -bar echo -e "\E[41;1;37m $cab\E[0m" msg -bar for i in `echo "$cat_users"|awk -F ':' '{print $1}'`; do user="$i" s2ssh="$(echo "$cat_users"|grep -w "$i"|awk -F ':' '{print $5}'|cut -d ',' -f1)" if [[ "$(echo "$cat_users"| grep -w $i| wc -l)" = "1" ]]; then sqd="$(ps -u $user | grep sshd | wc -l)" else sqd=00 fi [[ "$sqd" = "" ]] && sqd=0 if [[ -e /etc/openvpn/openvpn-status.log ]]; then ovp="$(cat /etc/openvpn/openvpn-status.log | grep -E ,"$i", | wc -l)" else ovp=0 fi if netstat -nltp|grep 'dropbear'> /dev/null;then drop="$(droppids | grep "$i" | wc -l)" else drop=0 fi cnx=$(($sqd + $drop)) conex=$(($cnx + $ovp)) if [[ $cnx -gt 0 ]]; then tst="$(ps -o etime $(ps -u $i |grep sshd |awk 'NR==1 {print $1}')|awk 'NR==2 {print $1}')" tst1=$(echo "$tst" | wc -c) if [[ "$tst1" == "9" ]]; then timerr="$(ps -o etime $(ps -u $i |grep sshd |awk 'NR==1 {print $1}')|awk 'NR==2 {print $1}')" else timerr="$(echo "00:$tst")" fi elif [[ $ovp -gt 0 ]]; then tmp2=$(printf '%(%H:%M:%S)T\n') tmp1="$(grep -w "$i" /etc/openvpn/openvpn-status.log |awk '{print $4}'| head -1)" [[ "$tmp1" = "" ]] && tmp1="00:00:00" && tmp2="00:00:00" var1=`echo $tmp1 | cut -c 1-2` var2=`echo $tmp1 | cut -c 4-5` var3=`echo $tmp1 | cut -c 7-8` var4=`echo $tmp2 | cut -c 1-2` var5=`echo $tmp2 | cut -c 4-5` var6=`echo $tmp2 | cut -c 7-8` calc1=`echo $var1*3600 + $var2*60 + $var3 | bc` calc2=`echo $var4*3600 + $var5*60 + $var6 | bc` seg=$(($calc2 - $calc1)) min=$(($seg/60)) seg=$(($seg-$min*60)) hor=$(($min/60)) min=$(($min-$hor*60)) timerusr=`printf "%02d:%02d:%02d \n" $hor $min $seg;` timerr=$(echo "$timerusr" | sed -e 's/[^0-9:]//ig' ) else timerr="00:00:00" fi if [[ "$s2ssh" != @(hwid|token) ]]; then user=$(printf '%-15s' "$i") con=$(printf '%-11s' "$conex/$s2ssh") else fix="$(echo "$cat_users"|grep -w "$i"|awk -F ':' '{print $5}'|cut -d ',' -f2)" user=$(printf '%-15s' "$fix") con=$(printf '%-11s' "$(echo $s2ssh|awk '{print toupper($0)}')") fi if [[ $conex -eq 0 ]]; then status=$(printf '%-16s' 'Offline') echo -e " $(msg -ama "$user")$(msg -verm2 "$status")$(msg -verd "$con")$(msg -ama "$timerr")" else status=$(printf '%-16s' 'Online') echo -e " $(msg -ama "$user")$(msg -verd "$status")$(msg -verd "$con")$(msg -ama "$timerr")" fi msg -bar3 done tput cuu1 && tput dl1 msg -bar print_center -ama "►► Presione enter para continuar ◄◄" read } detail_user(){ clear usuarios_ativos=('' $(mostrar_usuarios)) if [[ -z ${usuarios_ativos[@]} ]]; then msg -bar print_center -verm2 "$(fun_trans "Ningun usuario registrado")" msg -bar sleep 3 return else msg -bar print_center -ama "$(fun_trans "DETALLES DEL LOS USUARIOS")" msg -bar fi data_user msg -bar print_center -ama "►► Presione enter para continuar ◄◄" read } block_user(){ clear usuarios_ativos=('' $(mostrar_usuarios)) msg -bar print_center -ama "$(fun_trans "BLOQUEAR/DESBLOQUEAR USUARIOS")" msg -bar data_user back print_center -ama "$(fun_trans "Escriba o Seleccione Un Usuario")" msg -bar unset selection while [[ ${selection} = "" ]]; do echo -ne "\033[1;37m Seleccione: " && read selection tput cuu1 && tput dl1 done [[ ${selection} = "0" ]] && return if [[ ! $(echo "${selection}" | egrep '[^0-9]') ]]; then usuario_del="${usuarios_ativos[$selection]}" else usuario_del="$selection" fi [[ -z $usuario_del ]] && { msg -verm "$(fun_trans "Error, Usuario Invalido")" msg -bar return 1 } [[ ! $(echo ${usuarios_ativos[@]}|grep -w "$usuario_del") ]] && { msg -verm "$(fun_trans "Error, Usuario Invalido")" msg -bar return 1 } msg -nama " $(fun_trans "Usuario"): $usuario_del >>>> " if [[ $(passwd --status $usuario_del|cut -d ' ' -f2) = "P" ]]; then pkill -u $usuario_del &>/dev/null droplim=`droppids|grep -w "$usuario_del"|awk '{print $2}'` kill -9 $droplim &>/dev/null usermod -L $usuario_del &>/dev/null sleep 2 msg -verm2 "$(fun_trans "Bloqueado")" else usermod -U $usuario_del sleep 2 msg -verd "$(fun_trans "Desbloqueado")" fi msg -bar sleep 3 } rm_vencidos(){ title "REMOVER USUARIOS VENCIDOS" print_center -ama " Removera todo los usuarios ssh expirado" msg -bar msg -ne " Continua [S/N]: " read opcion tput cuu1 && tput dl1 [[ "$opcion" != @(s|S|y|Y) ]] && return expired="$(fun_trans "Expirado")" removido="$(fun_trans "Removido")" DataVPS=$(date +%s) while read user; do DataUser=$(chage -l "$user"|sed -n '4p'|awk -F ': ' '{print $2}') [[ "$DataUser" = @(never|nunca) ]] && continue #[[ "$DataUser" = "ene 01, 1970" ]] && DataUser="Jan 01, 1970" DataSEC=$(date +%s --date="$DataUser") if [[ "$DataSEC" -lt "$DataVPS" ]]; then pkill -u $user droplim=`droppids|grep -w "$user"|awk '{print $2}'` kill -9 $droplim &>/dev/null userdel $user print_center -ama "$user $expired ($removido)" sleep 1 fi done <<< "$(mostrar_usuarios)" enter } limiter(){ ltr(){ clear msg -bar for i in `atq|awk '{print $1}'`; do if [[ ! $(at -c $i|grep 'limitador.sh') = "" ]]; then atrm $i sed -i '/limitador.sh/d' /var/spool/cron/crontabs/root print_center -verd "limitador detenido" msg -bar print_center -ama "►► Presione enter para continuar ◄◄" read return fi done print_center -ama "CONF LIMITADOR" msg -bar print_center -ama "Bloquea usuarios cuando exeden" print_center -ama "el numero maximo conecciones" msg -bar unset opcion while [[ -z $opcion ]]; do msg -nama " Ejecutar limitdor cada: " read opcion if [[ ! $opcion =~ $numero ]]; then tput cuu1 && tput dl1 print_center -verm2 " Solo se admiten nuemros" sleep 2 tput cuu1 && tput dl1 unset opcion && continue elif [[ $opcion -le 0 ]]; then tput cuu1 && tput dl1 print_center -verm2 " tiempo minimo 1 minuto" sleep 2 tput cuu1 && tput dl1 unset opcion && continue fi tput cuu1 && tput dl1 echo -e "$(msg -nama " Ejecutar limitdor cada:") $(msg -verd "$opcion minutos")" echo "$opcion" > ${ADM_user}/limit done msg -bar print_center -ama "Los usuarios bloqueados por el limitador" print_center -ama "seran desbloqueado automaticamente" print_center -ama "(ingresa 0 para desbloqueo manual)" msg -bar unset opcion while [[ -z $opcion ]]; do msg -nama " Desbloquear user cada: " read opcion if [[ ! $opcion =~ $numero ]]; then tput cuu1 && tput dl1 print_center -verm2 " Solo se admiten nuemros" sleep 2 tput cuu1 && tput dl1 unset opcion && continue fi tput cuu1 && tput dl1 [[ $opcion -le 0 ]] && echo -e "$(msg -nama " Desbloqueo:") $(msg -verd "manual")" || echo -e "$(msg -nama " Desbloquear user cada:") $(msg -verd "$opcion minutos")" echo "$opcion" > ${ADM_user}/unlimit done nohup ${ADM_inst}/limitador.sh &>/dev/null & msg -bar print_center -verd "limitador en ejecucion" msg -bar print_center -ama "►► Presione enter para continuar ◄◄" read } l_exp(){ clear msg -bar l_cron=$(cat /var/spool/cron/crontabs/root|grep -w 'limitador.sh'|grep -w 'ssh') if [[ -z "$l_cron" ]]; then echo '@daily /etc/ADMRufu/install/limitador.sh --ssh' >> /var/spool/cron/crontabs/root print_center -verd "limitador de expirados programado\nse ejecutara todos los dias a las 00hs\nsegun la hora programada en el servidor" enter return else sed -i '/limitador.sh --ssh/d' /var/spool/cron/crontabs/root print_center -verm2 "limitador de expirados detenido" enter return fi } log(){ clear msg -bar print_center -ama "REGISTRO DEL LIMITADOR" msg -bar [[ ! -e ${ADM_user}/limit.log ]] && touch ${ADM_user}/limit.log if [[ -z $(cat ${ADM_user}/limit.log) ]]; then print_center -ama "no ahy registro de limitador" msg -bar sleep 2 return fi msg -teal "$(cat ${ADM_user}/limit.log)" msg -bar print_center -ama "►► Presione enter para continuar o ◄◄" print_center -ama "►► 0 para limpiar registro ◄◄" read opcion [[ $opcion = "0" ]] && echo "" > ${ADM_user}/limit.log } [[ $(cat /var/spool/cron/crontabs/root|grep -w 'limitador.sh'|grep -w 'ssh') ]] && lim_e=$(msg -verd "[ON]") || lim_e=$(msg -verm2 "[OFF]") clear msg -bar print_center -ama "LIMITADOR DE CUENTAS" msg -bar menu_func "LIMTADOR DE CONECCIONES" "LIMITADOR DE EXPIRADOS $lim_e" "LIMITADOR DE DATOS $(msg -verm2 "(no diponible)")" "LOG DEL LIMITADOR" back msg -ne " opcion: " read opcion case $opcion in 1)ltr;; 2)l_exp;; 3);; 4)log;; 0)return;; esac } USER_MODE(){ title "SELECCIONE EL MODO QUE USARA POR DEFECTO" menu_func "HWID" "TOKEN" back opcion=$(selection_fun 2) case $opcion in 1) echo "userHWID" > ${ADM_user}/userMODE clear msg -bar print_center -verd "MODO HWID ACTIVA" enter;; 2) echo "userTOKEN" > ${ADM_user}/userMODE clear msg -bar print_center -verd "MODO TOKEN ACTIVA" enter;; 0)return 1;; esac } while : do lim=$(msg -verm2 "[OFF]") for i in `atq|awk '{print $1}'`; do if [[ ! $(at -c $i|grep 'limitador.sh') = "" ]]; then lim=$(msg -verd "[ON]") fi done title -ama "ADMINISTRACION DE USUARIOS SSH" menu_func "NUEVO USUARIO SSH ✏️ " \ "CREAR USUARIO TEMPORAL✏️." \ "$(msg -verm2 "REMOVER USUARIO") 🗑 " \ "$(msg -verd "RENOVAR USUARIO") ♻️" \ "EDITAR USUARIO 📝" \ "BLOQ/DESBLOQ USUARIO 🔒\n$(msg -bar3)" \ "$(msg -verd "DETALLES DE TODOS USUARIOS") 🔎" \ "MONITOR DE USUARIOS CONECTADOS" \ "🔒 $(msg -ama "LIMITADOR-DE-CUENTAS") 🔒 $lim\n$(msg -bar3)" \ "ELIMINAR USUARIOS VENCIDOS" \ "⚠️ $(msg -verm2 "ELIMINAR TODOS LOS USUARIOS") ⚠️\n$(msg -bar3)" \ "BACKUP USUARIOS" \ "-bar DESACTIVAR PASS ALFANUMERICO $(msg -blu "(VULTR)")" \ "CAMBIAR A MODO HWID/TOKEN" back selection=$(selection_fun 14) case ${selection} in 0)break;; 1)new_user;; 2)userTMP;; 3)remove_user;; 4)renew_user;; 5)edit_user;; 6)block_user;; 7)detail_user;; 8)sshmonitor;; 9)limiter;; 10)rm_vencidos;; 11)eliminar_all;; 12)backup;; 13)ULK_ALF;; 14)USER_MODE && break;; esac done