Visite também: BR-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]

Tutoriais/Ftpd/FTP-Senhas

De UnderLinux Wiki

Servidor de FTP com as senhas separadas do sistema

Tabela de conteúdo

Introdução

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

OBS1: Explicarei no final do texto o motivo de termos o apache instalado, nao tendo a necessidade de estar rodando.

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 de usuario 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" é 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 ( giba@olhoneles.com.br) e
# Salustiano Ribeiro Neto/Packard ( salur@terra.com.br).
# 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

# Script para criacao de usuarios para ftp.

# Dados do usuario.
while [ "$RESP" != "s" ] && [ "$RESP" != "S" ]; do
clear
printf " 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!!! "
printf " Nome de Login para o novo usuario []: "
read LOGIN
done
clear
printf " Nome do usuario $LOGIN []: "
read NOME
clear
printf "#### Dados do novo usuario. #### "
printf "Login: $LOGIN "
printf "Nome: $NOME "
printf "Diretorio: $HOME/$LOGIN "
printf "##### =====|////===== ##### "
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:91:91:$NOME:$HOME/$LOGIN:/sbin/nologin" >> $PASSWD
mkdir $HOME/$LOGIN
chown ftp $HOME/$LOGIN


  • ftpdel.sh
#!/bin/sh

#######################################
# Script desenvolvido por Gilberto Villani Brito ( giba@olhoneles.com.br) e
# Salustiano Ribeiro Neto/Packard ( salur@terra.com.br).
# 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 " Nome de Login do usuario []: "
read LOGIN
while [ -z $LOGIN ] || [ "$(grep -c /$LOGIN: $PASSWD)" = "0" ]; do
clear
printf "Usuario nao existe ou em branco!!! "
printf " Nome de Login do usuario []: "
read LOGIN
done
clear
printf "####### Dados do usuario. ###### "
printf "Login: $LOGIN "
printf "Nome: $(grep /$LOGIN: /etc/passwd.ftp | cut -d : -f 5) "
printf "Diretorio: $HOME/$LOGIN "
printf "##### =====|////===== ##### "
printf "==>>ATENCAO, todos os arquivos dentro do diretorio serao
apagados!!!<<== "
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 ( giba@olhoneles.com.br) e
# Salustiano Ribeiro Neto/Packard ( salur@terra.com.br).
# 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

# Script para a alteracao de senha dos usuarios de ftp.

# Dados do usuario.
while [ "$RESP" != "s" ] && [ "$RESP" != "S" ]; do
clear
printf " Nome de Login do usuario []: "
read LOGIN
while [ -z $LOGIN ] || [ "$(grep -c /$LOGIN: $PASSWD)" = "0" ]; do
clear
printf "Usuario nao existe ou em branco!!! "
printf " Nome de Login do usuario []: "
read LOGIN
done
clear
printf "####### Dados do usuario. ###### "
printf "Login: $LOGIN "
printf "Nome: $(grep /$LOGIN: /etc/passwd.ftp | cut -d : -f 5) "
printf "Diretorio: $HOME/$LOGIN "
printf "##### =====|////===== ##### "
printf "==>>ATENCAO, a senha do usuario sera pagada!!!<<== "
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:91:91:$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 (caso nao for usalo, 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.



Contato

Qualquer erro, duvidas, criticas ou novas ideias mande e-mails para:

  • Gilberto Villani Brito ( giba@olhoneles.com.br) ou
  • Salustiano Ribeiro Neto/Packard ( salur@terra.com.br).

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.