Tutoriais/Ftpd/Putftpd
De UnderLinux Wiki
Putftpd Tutorial - Servidor FTP Seguro e Robusto
Tabela de conteúdo |
Introdução
Imagine um servidor ftp com essas características: robusto, seguro, autenticação totalmente separada do sistema, controle da quantidade de arquivos, controle do tamanho dos arquivos e que so permita o envio de arquivos. Se você precisa de algo desse tipo leia esse tutorial :-).
O Putftpd reúne todas as características acima além de ser de fácil instalação e configuração. O mesmo trata-se de um patche para o Publicfile, depois do patche modificar alguns arquivo fonte o resultado da compilação sera o putftpd.
Arquivos necessários
- daemontools: http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
- ucspi-tcp: http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
- publicfile: http://cr.yp.to/publicfile/publicfile-0.52.tar.gz
- putftpd: http://tanaka-www.cs.titech.ac.jp/~euske/prog/putftpd-0.1.patch.gz
Instalação
Para começar vamos instalar as dependências para o putftpd que são o "daemontools" e o "ucspi-tcp", lembrando que todos os arquivos estão localizados em "/usr/local/src".
bash-2.05a# cd /usr/local/src/ bash-2.05a# tar -xvzf daemontools-0.76.tar.gz bash-2.05a# cd admin/daemontools-0.76/ bash-2.05a# package/install bash-2.05a# cd /usr/local/src/ bash-2.05a# tar -xzvf ucspi-tcp-0.88.tar.gz bash-2.05a# cd ucspi-tcp-0.88/ bash-2.05a# make setup check
Agora vamos descompactar o fonte do publicfile e aplicar o patche putftpd
bash-2.05a# cd /usr/local/src/ bash-2.05a# tar -xvzf publicfile-0.52.tar.gz bash-2.05a# cd publicfile-0.52/ bash-2.05a# gzip -dc /usr/local/src/putftpd-0.1.patch.gz | patch -p1 bash-2.05a# make setup check
O putftpd foi instalado no diretório "/usr/local/putftpd"
Configuração
O putftpd gera um binário chamado configure localizado no diretório "/usr/local/putftpd/bin", executando esse arquivo temos a seguinte resposta
bash-2.05a# /usr/local/putftpd/bin/configure configure: usage: configure acct logacct /public
Traduzindo isso temos
acct: usuário responsável pela execução do putftpd logacct: usuário responsável pelos logs do putftpd /public: diretório base do putftpd
Criando os usuários
bash-2.05a# groupadd putftpd bash-2.05a# useradd -g putftpd -s /bin/false putftpd bash-2.05a# useradd -g putftpd -s /bin/false putlog
Agora executando o configure novamente para finalizar
bash-2.05a# /usr/local/putftpd/bin/configure putftpd putlog /public
Como visto o diretório base escolhido foi o "/public", vamos acessa-lo
bash-2.05a# cd /public/ bash-2.05a# ls ftp-incoming putftpd
Agora para que o putftpd inicie basta criar um link simbólico do diretório /public/putftpd em /service
bash-2.05a# ln -s /public/putftpd/ /service/
Para verificar se o putftpd foi iniciado basta olhar os processos que estão em execução e verificar a existência dos processos mostrados abaixo
bash-2.05a# ps -aux root 3026 0.0 0.0 1272 296 ? S 21:37 0:00 supervise putftpd root 3027 0.0 0.0 1272 296 ? S 21:37 0:00 supervise log root 3028 0.0 0.0 1296 300 ? S 21:37 0:00 tcpserver -vDRHl0 -B220 Features: a p .?? 0 2001 /usr/local/putftpd/bin/putftpd putlog 3029 0.0 0.0 1284 288 ? S 21:37 0:00 multilog t ./main -* +* * status: * =status
Lembrando que o putftpd roda por padrão na porta 2001
Criando usuários
O processo para criação de usuários no putftpd é bastante simples, basta criar um diretório com o mesmo nome do login do usuário dentro de "/public/ftp-incoming", no exemplo abaixo eu vou criar o usuário allisson
bash-2.05a# cd /public/ftp-incoming/ bash-2.05a# mkdir allisson
Para definir uma senha para o usuário "allisson" basta criar um arquivo com o nome .passwd (incluindo o ponto) contendo a senha dentro do diretório "/public/ftp-incoming/allisson" como mostrado abaixo
bash-2.05a# cd allisson/ bash-2.05a# echo 123456 > .passwd bash-2.05a# cat .passwd 123456
Por fim vamos criar mais dois arquivos dentro do diretório "/public/ftp-incoming/allisson", o primeiro com o nome de ".maxfiles" (incluindo o ponto) deve ter em seu conteúdo o numero máximo de arquivos permitido ao usuário
bash-2.05a# echo 10 > .maxfiles
O outro arquivo deve ter o nome de ".maxfilesize" e no seu conteúdo deve conter o tamanho máximo permitido ao usuário
bash-2.05a# echo 1000000 > .maxfilesize
Para funcionar o diretório "/public/ftp-incoming/allisson" tem que ter seu dono e grupo setados corretamente como mostrado abaixo
bash-2.05a# chown putftpd.putftpd /public/ftp-incoming/allisson/ -R
Testando
Agora com um usuário criado chegou a hora de testar o putftpd
bash-2.05a# ftp localhost 2001 Connected to localhost. 220 Features: a p . Name (localhost:root): allisson 331 Password required. Password: 230 Ok, logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> put /etc/passwd passwd local: /etc/passwd remote: passwd 200 PORT Okay. 150 Making transfer connection... 226 Success, now total filesize is 900. 900 bytes sent in 0.000117 secs (7.5e+03 Kbytes/sec) ftp> ls 200 PORT Okay. 150 Making transfer connection... -rw-r--r-- 1 pub pub 900 Jan 17 00:00 passwd 226 Success. ftp> exit 221 Bye.
Alterando a porta padrão do putftpd
O putftpd roda sobre a porta 2001 por padrão, para alterar a porta basta editar o arquivo "/public/putftpd/run" e mudar o valor 2001 para o desejado. Abaixo segue o "/public/putftpd/run" original.
bash-2.05a# cat run
#!/bin/sh exec 2>&1 exec envdir ./env softlimit -o20 -d50000 tcpserver -vDRHl0 -B'220 Features: a p . ' 0 2001 /usr/local/putftpd/bin/putftpd Segue abaixo o /public/putftpd/run modificado para rodar sobre a porta 20202 bash-2.05a# cat run #!/bin/sh exec 2>&1 exec envdir ./env softlimit -o20 -d50000 tcpserver -vDRHl0 -B'220 Features: a p . ' 0 20202 /usr/local/putftpd/bin/putftpd
Limitando o acesso ao putftpd
Podemos limitar o acesso ao putftpd por ip, criando o arquivo "/public/putftpd/tcp.putftpd" veja o conteúdo do meu abaixo
bash-2.05a# cat /public/putftpd/tcp.putftpd 192.168.1.:allow 127.0.0.1:allow
Como mostrado acima os endereços ips "127.0.0.1" e "192.168.1.1-192.168.1.255" estão aptos a usar o putftpd. Ainda é necessário transformar esse arquivo para o formato .cdb como descrito abaixo
bash-2.05a# /usr/local/bin/tcprules /public/putftpd/tcp.putftpd.cdb /public/putftpd/tcp.putftpd.tmp < /public/putftpd/tcp.putftpd
Temos que adicionar o parâmetro -x /service/putftpd/tcp.putftpd.cdb no arquivo /public/putftpd/run veja como ficou o meu abaixo.
bash-2.05a# cat run #!/bin/sh exec 2>&1 exec envdir ./env softlimit -o20 -d50000 tcpserver -x /public/putftpd/tcp.putftpd.cdb -vDRHl0 -B'220 Features: a p . ' 0 2001 /usr/local/putftpd/bin/putftpd
Finalizando
Resolvi fazer esse tutorial para mostrar mais um programa interessante mais pouco conhecido, espero que sirva para alguém.
Queria lembrar também que o putftpd pode conviver sem problemas com o publicfile
E a minha procura por programas desconhecidos continua :-).


