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
- Proftpd (http://www.proftpd.org) => servidor de ftp relativamente seguro, 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.
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).


