msoliver
(usa Debian)
Enviado em 18/02/2016 - 11:19h
bcoutinho16 escreveu:
Olá, bom dia! Desculpe-me pela demora em responder, tive uns problemas que atrasaram o desenvolvimento do projeto mas enfim...
Olha, cada usuário terá sua pasta e eles não terão a acesso ao shell.
quando fala do caminho da pasta, refere-se ao usuário ou ao FTP que foi instalado?
________________________________________________________________________
Bom dia, bcoutinho16.
Enquanto não respondeu, "fui fazendo" . . .
O caminho da pasta, é a pasta que será definida como a
home do usuário ,
Defini na VAR
DIR a pasta como, "/var/ftp", qquer problema é só alterar
DIR .
Características:
Verifica se é "
ROOT "
O MENU se ajusta a Dimensão/Tamanho da janela
Na Criação do usuário, verifica se já existe (não cria com o mesmo nome)
Na Remoção, verifica se existe. (não exclui o que não existe)
Solicita confirmação para excluir.
Antes da OPÇÃO
SAIR , reinicia o servidor
Etc , etc ....
Segue o Script:
#!/bin/bash
# **********************************
# Admin Usuários PROFTPD
# Marcelo Oliver - Fevereiro 2016
#
# **********************************
TGT="/etc/passwd"
EGREP="egrep -q "^$REPLY" $TGT"
DIR="/var/ftp"
ICOR="\e[0;38;5;226m"
FCOR="e[m"
CT="\e[1;38;5;4m"
CH="\e[1;38;5;3m"
CE="\e[0;31m"
CF="\e[m"
TESTAUSER() {
[ $USER != root ] && { echo -e "\n\e[6;38;5;1m VOCÊ NÃO TEM PRIVILéGIOS ADMIN.\e[m\n LOGUE-SE COM O \"root\"\n SAINDO . . . \n"; sleep 1 ; exit ; } || ROWSCOLS ; }
MENU() {
CLEAR
printf "${ICOR}\e[2;${POS3}f %*s\n" "45" '' | sed "s/ /•/g"
printf "\e[3;${POS2}f•••••••••••• Admin. Servidor PROFTP ••••••••••••"
printf "\e[4;${POS1}f %*s\n" "49" '' | sed "s/ /•/g"
printf "\e[5;${POS}f•••\e[5;${POS4}f•••"
printf "\e[6;${POS}f•••\e[m [1] CRIA_USUÁRIO ${ICOR}•••"
printf "\e[7;${POS}f•••\e[7;${POS4}f•••"
printf "\e[8;${POS}f•••\e[m [2] DELETA_USUÁRIO ${ICOR}•••"
printf "\e[9;${POS}f•••\e[9;${POS4}f•••"
printf "\e[10;${POS}f•••\e[m [3] LISTA_USUÁRIO ${ICOR}•••"
printf "\e[11;${POS}f•••\e[11;${POS4}f•••"
printf "\e[12;${POS}f•••\e[m [4] EXIT ${ICOR}•••"
printf "\e[13;${POS}f•••\e[13;${POS4}f•••"
printf "\e[14;${POS1}f %*s" "49" '' | sed "s/ /•/g"
printf "\e[15;${POS2}f %*s" "47" '' | sed "s/ /•/g"
printf "\e[16;${POS3}f %*s\n\n" "45" '' | sed "s/ /•/g"
printf "\e[m"
read -p " OPÇÃO: " -n1 OPC
echo -e "\n"
case "$OPC" in
1) CRIA_USUÁRIO ;;
2) DELETA_USUÁRIO ;;
3) LISTA_USUÁRIO ;;
X|x|4) EXIT;;
*) MENSA01 ; PCM ;;
esac
}
ROWSCOLS() {
COLS=$(tput cols)
ROWS=$(tput lines)
POS=$(((COLS-50)/2))
POS1=$((POS+1))
POS2=$((POS+2))
POS3=$((POS+3))
POS4=$((POS2+47))
CHECACOLS
}
CHECACOLS() {
(($COLS < 52 || $ROWS < 40)) && printf "\n DIMENSãO:\n $ROWS:LINHAS X $COLS:COLUNAS\n MINIMO:\n 40 LINHAS X 52 COLUNAS\n" || MENU
}
CRIA_USUÁRIO() {
clear
SRC="CRIA"
ReadUser
mkdir ${DIR}/${REPLY}
chown $REPLY:$REPLY $DIR/$REPLY
adduser -d $DIR/$REPLY -M $REPLY --no create user
sed "/^$REPLY/s/bash/false/"
if $EGREP;then
printf "\n O USUáRIO:$REPLY, foi criado com SUCESSO:\n"
fi
CHECADIST
}
CHECADIST() {
if grep -q 'Debian' <<< $(uname -v);then
if grep -q '/bin/false' /etc/shells;then
echo -n ""
else
echo "/bin/false" >> /etc/shells
fi
fi
MENU
}
DELETA_USUÁRIO() {
clear
SRC="DELETA"
ReadUser
printf " O USUáRIO:$REPLY e SEUS ARQUIVOS SERãO EXCLUíDOS, CONFIRMA?\n"
SimNao
if [[ $RESP == +(S|s) ]];then
userdel -r $REPLY
elif [[ $RESP == +(N|n) ]];then
unset REPLY SRC
MENU
fi
}
LISTA_USUÁRIO() {
clear
awk -F":" 'BEGIN {printf "'$(LinHzt)'\n USUÁRIO\tHOME\n'$(LinHzt)'\n";} {if($6 ~ "'$DIR'/[a-z]+") printf " %s\t%s\n" ,$1,$6;}' $TGT
PROMPT
MENU
}
ReadUser() {
printf "\n$CT INFORME O USUáRIO:$CF"
read -p " "
[ $REPLY ] || MENSA00
if $EGREP;then
[ $SRC == "CRIA" ] && MENSA02
[ $SRC == "DELETA" ] && MENSA03
ReadUser
fi
}
SimNao() {
read -p " [S/N]: " -e -n1 RESP
[[ $RESP != +(s|S|n|N) ]] && SimNao
}
EXIT() {
/etc/init.d/proftpd restart
sleep 1.5
exit
}
CLEAR() { printf '\033\143' ; }
MENSA00() { echo -e " "$CE"\nPREENCHIMENTO OBRIGATÓRIO!"$CF"" ; sleep 1 ; ReadUser ; }
MENSA01() { echo -e "\e[0;7;31m OPÇÃO INVÁLIDA! \e[m\n" ; sleep 1 ; }
MENSA02() { echo -e "\e[6;38;5;1m USUáRIO:$REPLY\n JÁ EXISTE! \e[m\n" ; sleep 1 ; }
MENSA03() { echo -e "\e[6;38;5;1m USUáRIO:$REPLY\n NãO EXISTE! \e[m\n" ; sleep 1 ; }
PCM() { PROMPT ; CLEAR ; MENU ; }
PROMPT() { printf "\e[1;33m\n << PRESS ANY KEY TO CONTINUE >> \e[m" ; read -s -n1 PRMPT ; local PRMPT ; }
LinHzt() { printf '%*s' "$((COLS/2))" '' | sed "s/ /—/g" ;echo; }
TESTAUSER
Faça uns testes, qquer problema, me comunique.
OBS: CUIDADO, você estará LOGADA COMO ROOT
Se atender a sua necessidade, marque como resolvido e também como melhor resposta. :)
Att.:
Marcelo