sexta-feira, 25 de abril de 2014

Instalação do ProFTP

O ProFTP é o principal servidor de FTP em uso no mundo. Ao contrário do ftpd, o ProFTP contém muitas opções de configuração e ajustes. Se você precisa de um servidor de FTP parrudo, sua opção será o ProFTP. Para instalá-lo, digite:

# apt-get install proftpd

Agora é necessário configurá-lo. Abra o arquivo /etc/proftpd/proftpd.conf

# vi /etc/proftpd/proftpd.conf

A primeira opção importante é a ServerType. É necessário analisar se o servidor será muito usado, ou se ficará a maior parte do tempo ocioso. Se esse for o caso, é interessante deixá-lo como inetd. Essa opção faz com que o ProFTP só seja executado quando houver alguma requisição para ele. O Inetd (ou outro programa semelhante, como xinetd e openbsd-inetd) fica monitorando as requisições da porta 21 usada pelo protocolo FTP e chama o programa proftpd para tratar essas requisições. Isso economiza recursos, uma vez que o programa servidor só estará realmente rodando quando for necessário. Agora, se o servidor FTP for muito acessado será interessante deixar que ele rode como standalone, ou seja, ele mesmo cuidará das requisições de FTP. No meu caso, ele ficará como inetd

ServerType inetd

Dependendo de qual programa inetd você está usando, a configuração pode ser um pouco diferente. Na minha máquina estou usando o openbsd-inetd. Nesse sistema é necessário verificar se existe uma linha semelhante a essa no arquivo /etc/inetd.conf.

ftp             stream  tcp     nowait  root    /usr/sbin/proftpd       /usr/sbin/in.ftpd

Foge ao objetivo desse artigo explicar essa linha. Para mais informações consulte a documentação do programa inetd. Agora é necessário reiniciar o openbsd-inetd.

# /etc/init.d/openbsd-inetd restart

A partir de agora o inetd estará ouvindo a porta 21. Para verificar se isso está ocorrendo digite:

$ netstat -na | grep :21
tcp        0      0 0.0.0.0:21              0.0.0.0:*               OUÇA      

Podemos também verificar quem está escutando a porta 21.

$ lsof -i tcp:21

Não houve retorno. Vamos ver se o ProFTP está rodando.

$ ps wax | grep proftp
 4278 pts/0    S+     0:00 grep --color=auto proftp

O ProFTP não está rodando. Vamos tentar a conexão.

$ ftp localhost
ftp: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
220 ProFTPD 1.3.1 Server (Debian) [127.0.0.1]
Name (localhost:ricardo): ricardo 
331 Password required for ricardo
Password:
230 User ricardo logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Reparem que primeiramente a conexão foi recusada. Isso porque o inted leva um tempo para subir o ProFTP. Mas na segunda tentativa a conexão foi feita. E reparem também que foi o ProFTP quem recebeu a conexão.

E agora vejamos novamente quem está usando a porta 21.

$ lsof -i tcp:21
COMMAND  PID    USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
ftp     2387 ricardo    3u  IPv4 5887019      0t0  TCP localhost:53469->localhost:ftp (ESTABLISHED)
ftp     2387 ricardo    4u  IPv4 5887019      0t0  TCP localhost:53469->localhost:ftp (ESTABLISHED)
ftp     2387 ricardo    5u  IPv4 5887019      0t0  TCP localhost:53469->localhost:ftp (ESTABLISHED)

Vamos ver se o ProFTP está rodando.

$ ps wax | grep proftp
 4325 ?        Ss     0:00 proftpd: connected: 172.20.120.4 (172.20.120.4:53512)
 4367 pts/2    S+     0:00 grep --color=auto proftp

Exatamente como falei, o ProFTP está rodando. Se eu desconectar do FTP o ProFTP deve ser retirado na memória.

ftp> bye
221 Goodbye.
$ ps wax | grep proftp
 7222 pts/2    S+     0:00 grep --color=auto proftp

Exatamente como previsto. Uma outra vantagem em usar o inetd é que não é necessário reiniciar o ProFTP quando seus arquivos de configuração são alterados.

Você pode querer que o usuário tenha acesso somente ao seu drive home. Para isso, descomente, no arquivo /etc/proftpd/proftpd.conf , a diretiva abaixo.

DefaultRoot                   ~

Também pode ser interessante filtrar os usuários que terão acesso ao FTP. Uma forma de fazer isso é validando somente aqueles que possuem um shell válido (uma entrada no arquivo /etc/passwd com bash ou sh, por exemplo). A seguinte diretiva faz isso.

RequireValidShell             on

Você também pode incluir os usuários que não deverão ter acesso ao FTP colocando-os no arquivo /etc/ftpusers.

Se você precisar configurar o FTP anônimo (FTP público), abra o arquivo /etc/proftpd/proftpd.conf e descomente as linhas do bloco e certifique-se de que o usuário ftp não esteja no arquivo  /etc/ftpusers.

Agora é possível usar o FTP para disponibilizar publicamente seus arquivo. Você também pode usar o ProFTP para servir arquivos de outros sites. Para isso edite o arquivo /etc/proftpd/virtuals.conf

O ProFTP ainda tem muitas outras opções que certamente vão te atender.