+ Responder ao Tópico



  1. #1
    tecc
    Visitante

    Padrão 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.

  2. #2

    Padrão 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]).