Usuario FTP não interativo?
Pessoal alguem sabe como seria a maneira mais facil de definir um usuario de ftp para não fazer login interativo (pode somente logar no ftp e não no sistema)? Já editei /etc/passwd adicionando no final da linha do usuario /bin/false mas na hora de logar no FTP da senha invalida. Obs: Server (Wu-ftp). Se alguem puder ajudar, ficaria grato! Obrigado.
Usuario FTP não interativo?
Este howto ensina como configurar um servidor de ftp com usuarios e senhas separadas dos usuarios do sistema, deixando assim o sistema mais estavel, organizado e seguro.
Na nossa implantacao usamos um FreeBSD, mas nada impede de usarmos qualquer outro sistema baseado em Unix.
Programas necessarios:
Proftpd (http://www.proftpd.org) => servidor de ftp relativamente seguro e muito estavel e robusto.
Apache (http://www.apache.org) => servidor de web seguro, estavel e robusto.
OBS1: Explicarei no final do texto o motivo de termos o apache instalado, nao tendo a necessidade de estar rodando.
Agora um pouco de teoria:
O funcionamento desse ftp e simplesmente configurar o servidor de ftp (Proftpd) para autenticar em um outro arquivo de senhas, sem ser o passwd do proprio sistema.
Vamos a pratica:
Crie um grupo chamado ftp com um usuario tambem chamado ftp no sistema sem senha e sem bash. O home do usuario ftp sera onde ficara o home e os arquivos de todos os usuarios de ftp. No meu caso o home do ftp fica em /usr/home/ftp .
Instale e configure o seu Proftpd da maneira que mais lhe convem, mas no seu arquivo de configuracao adicione as seguintes linhas:
DefaultRoot ~ # diretorio do usuario se tornar raiz
AuthUserFile /etc/passwd.ftp # arquivo de autenticacao de usuarios
RequireValidShell off # usuario na necessita de shell valida
Para a criacao, alteracao e excluxao de usuarios no arquivo /etc/passwd.ftp e necessario a utilizacao desses scritps abaixo que eu e meu colega de trabalho (Salustiano/Packard) desenvolvemos:
---------- ftpadd.sh ----------
#!/bin/sh
#######################################
# Script desenvolvido por Gilberto Villani Brito ([email protected]) e
# Salustiano Ribeiro Neto/Packard ([email protected]).
# Nenhum direito autoral reservado, por isso usem e auterem a vontade, pois
# estamos em um pais literalmente livre (hahahahahah......).
########################################
# Configuracoes das variaveis do script.
# htpasswd
CRYPTO=/usr/local/bin/htpasswd
# passwd.ftp
PASSWD=/etc/passwd.ftp
# passwd.tmp
PASSWDTEMP=/tmp/passwd.tmp
# home
HOME=/usr/home/ftp
# ID do usuario ftp
IDU=91
# ID do grupo do ftp
IDG=91
# Script para criacao de usuarios para ftp.
# Dados do usuario.
while [ "$RESP" != "s" ] && [ "$RESP" != "S" ]; do
clear
printf "\n Nome de Login para o novo usuario []: "
read LOGIN
while [ -z $LOGIN ] || [ "$(grep -c /$LOGIN: $PASSWD)" = "1" ]; do
clear
printf "Usuario ja existe ou em branco!!!\n"
printf "\n Nome de Login para o novo usuario []: "
read LOGIN
done
clear
printf "\nNome do usuario $LOGIN []: "
read NOME
clear
printf "#### Dados do novo usuario. ####\n\n"
printf "Login: $LOGIN\n"
printf "Nome: $NOME\n"
printf "Diretorio: $HOME/$LOGIN\n\n"
printf "##### =====\\\\|////===== #####\n\n"
printf "Confirma os Dados?? [s/n]: "
read RESP
done
# Limpa o passwd.tmp
> $PASSWDTEMP
while [ "$(cat $PASSWDTEMP)" = "" ]; do
$CRYPTO $PASSWDTEMP $LOGIN
done
SENHA=$(cat $PASSWDTEMP)
echo "$SENHA:$IDU:$IDG:$NOME:$HOME/$LOGIN:/sbin/nologin" >> $PASSWD
mkdir $HOME/$LOGIN
chown $IDU.$IDG $HOME/$LOGIN
---------------------------------
------- ftpdel.sh ---------
#!/bin/sh
#######################################
# Script desenvolvido por Gilberto Villani Brito ([email protected]) e
# Salustiano Ribeiro Neto/Packard ([email protected]).
# Nenhum direito autoral reservado, por isso usem e auterem a vontade, pois
# estamos em um pais literalmente livre (hahahahahah......).
########################################
# Configuracoes das variaveis do script.
# passwd.ftp
PASSWD=/etc/passwd.ftp
# passwd.tmp
PASSWDTEMP=/tmp/passwd.tmp
# home
HOME=/usr/home/ftp
# Script para apagar usuarios para ftp.
# Dados do usuario.
while [ "$RESP" != "s" ] && [ "$RESP" != "S" ]; do
clear
printf "\n Nome de Login do usuario []: "
read LOGIN
while [ -z $LOGIN ] || [ "$(grep -c /$LOGIN: $PASSWD)" = "0" ]; do
clear
printf "Usuario nao existe ou em branco!!!\n"
printf "\n Nome de Login do usuario []: "
read LOGIN
done
clear
printf "####### Dados do usuario. ######\n\n"
printf "Login: $LOGIN\n"
printf "Nome: $(grep /$LOGIN: /etc/passwd.ftp | cut -d : -f 5)\n"
printf "Diretorio: $HOME/$LOGIN\n\n"
printf "##### =====\\\\|////===== #####\n\n"
printf "==>>ATENCAO, todos os arquivos dentro do diretorio serao apagados!!!<<==\n\n"
printf "Confirma os Dados?? [s/n]: "
read RESP
done
grep -v "/$LOGIN:" $PASSWD > $PASSWDTEMP
cat $PASSWDTEMP > $PASSWD
rm -rf $HOME/$LOGIN
------------------------------------
--------- ftppas.sh ----------
#!/bin/sh
#######################################
# Script desenvolvido por Gilberto Villani Brito ([email protected]) e
# Salustiano Ribeiro Neto/Packard ([email protected]).
# Nenhum direito autoral reservado, por isso usem e auterem a vontade, pois
# estamos em um pais literalmente livre (hahahahahah......).
########################################
# Configuracoes das variaveis do script.
# htpasswd
CRYPTO=/usr/local/bin/htpasswd
# passwd.ftp
PASSWD=/etc/passwd.ftp
# passwd.tmp
PASSWDTEMP=/tmp/passwd.tmp
# home
HOME=/usr/home/ftp
# ID do usuario ftp
IDU=91
# ID do grupo do ftp
IDG=91
# Script para a alteracao de senha dos usuarios de ftp.
# Dados do usuario.
while [ "$RESP" != "s" ] && [ "$RESP" != "S" ]; do
clear
printf "\n Nome de Login do usuario []: "
read LOGIN
while [ -z $LOGIN ] || [ "$(grep -c /$LOGIN: $PASSWD)" = "0" ]; do
clear
printf "Usuario nao existe ou em branco!!!\n"
printf "\n Nome de Login do usuario []: "
read LOGIN
done
clear
printf "####### Dados do usuario. ######\n\n"
printf "Login: $LOGIN\n"
printf "Nome: $(grep /$LOGIN: /etc/passwd.ftp | cut -d : -f 5)\n"
printf "Diretorio: $HOME/$LOGIN\n\n"
printf "##### =====\\\\|////===== #####\n\n"
printf "==>>ATENCAO, a senha do usuario sera pagada!!!<<==\n\n"
printf "Confirma os Dados?? [s/n]: "
read RESP
done
# retira o usuario do passwd
grep -v "/$LOGIN:" $PASSWD > $PASSWDTEMP
cat $PASSWDTEMP > $PASSWD
# Limpa o passwd.tmp
> $PASSWDTEMP
# senha para o usuario
while [ "$(cat $PASSWDTEMP)" = "" ]; do
$CRYPTO $PASSWDTEMP $LOGIN
done
# coloca o usuario com a nova senha
SENHA=$(cat $PASSWDTEMP)
echo "$SENHA:$IDU:$IDG:$NOME:$HOME/$LOGIN:/sbin/nologin" >> $PASSWD
--------------------------------------
OBS2: Leia atentamente as configuracoes dos scripts, pois podera haver mudanca dependendo do sistema instalado.
OBS3: Nesses scripts esta a resposta para o motivo da instalacao do Apache, pois utilizamos o programa htpasswd (que pertence ao apache) para criptografar as senhas digitadas pelo admin.
Agora vai apenas uma dica ou um detalhe do funcionamento do ftp:
O Proftpd mostra para o usuario conectado que o dono dos arquivos e o primeiro usuario do arquivo passwd.ftp, por isso se o primeiro usuario for joao, todos os outros usuarios que conectarem no seu ftp e digitar o comando ls -l vera que seus arquivos pertencem ao grupo ftp (informacao correta) e ao usuario joao (informacao incorreta). Isso nao altera no bom funcionamento do servidor, porem por motivo de estetica eu recomendo criar o primeiro usuario com o nome ftp (e caso nao for usa-lo, remova sua senha no passwd.ftp, mude seu home para /usr/home/ftp e remova o diretorio /usr/home/ftp/ftp) sendo assim todo o usuario que conectar em seu ftp e dar o comando ls -l vera que o dono dos seus arquivos e o usuario ftp e grupo ftp.
Qualquer erro, duvidas, criticas ou novas ideias mande e-mails para:
Gilberto Villani Brito ([email protected]) ou
Salustiano Ribeiro Neto/Packard ([email protected]).
Agradecimentos:
Gostariamos de agradecer ao nosso patrao Gustavo Izar que nos deu o livre arbitrio para fazer o que quizessemos no servidor, a Deus por ter nos dado essa capacidade e a comunidade Linux e FreeBSD.
Howto escrito e implementado por Gilberto Villani Brito ([email protected]) e Salustiano Ribeiro Neto/Packard ([email protected]).