30 de novembro de 2010

FTP

FTP

A necessidade de se compartilhar arquivos entre diversos computadores através da internet ou mesmo de uma intranet é bastante comum. Uma das formas mais comuns de se fazer isso é através do protocolo FTP. Uma das grandes vantagens do FTP sobre o compartilhamento de diretórios do sistema de arquivos é o fato dele possuir mecanismos de autenticação e controle de acesso mais apropriados para acessos remotos, especialmente no contexto da internet.

FTP significa File Transfer Protocol (Protocolo de Transferência de Arquivos). É uma forma bastante rápida e versátil de transferir arquivos entre duas máquinas: cliente e servidor. Uma vez conectado ao servidor, um cliente pode realizar uma série de tarefas como downloads e uploads de arquivos, renomear e/ou deletar arquivos no servidor, entre outras. É um protocolo aberto e independente de hardware e do sistema operacional.

O FTP funciona sobre TCP, e por padrão os servidores atendem às requisições na porta 21. É através dessa conexão que o cliente envia comandos ao servidor. Entretanto, os dados são enviados por outra porta, de duas maneiras distintas.

A primeira forma de envio é chamada de FTP ativo. Nesse modo, o cliente abre uma porta alta (>1023), envia ao servidor o número desta porta e aguarda uma conexão do mesmo. A conexão parte da porta 20 do servidor e é direcionada a essa porta. Observe que neste caso temos um problema em potencial no cliente: A conexão originada pelo servidor e direcionada à uma porta alta no cliente poderá ser barrada por um firewall localizado neste cliente.

A outra forma é o FTP passivo. Neste caso, é o servidor que abre uma porta alta (>1023) e envia seu número ao cliente, aguardando uma conexão do mesmo. A conexão se origina numa porta alta do cliente e se destina a essa porta informada pelo servidor. Nesse caso, não temos mais o problema do firewall do cliente. Na verdade, apenas transferimos o problema para o lado do servidor. Felizmente, a maioria dos servidores FTP permitem especificar a faixa de portas utilizadas no modo passivo, minimizando o problema.

Entretanto, o problema mais sério do FTP é o fato de que os arquivos, logins e inclusive senhas são transmitidas sem criptografia. O uso do FTP deve ser feito em ambiente restrito/controlado ou ainda abertamente através da internet somente para o caso de logins anônimos.

Servidor FTP

Verifique se você possui o servidor proftpd instalado em seu sistema:

# dpkg -l proftpd

Caso seja necessário, instale-o:

# aptitude install proftpd

Escolha a opção standalone para fazer com que o ProFTPD use um daemon próprio.






Para configurar o seu servidor FTP, edite o arquivo de configuração e altere as diretivas listadas a seguir:

# vim /etc/proftpd/proftpd.conf

a) Para trabalhar em modo standalone:

ServerType standalone

b) Defina o valor padrão de UMASK para gravação:

umask 022

c) Defina o número máximo de logins simultâneos:

MaxInstances 20

d) Defina a home do usuário como sendo o diretório raiz:

DefaultRoot ~

e) Habilite até 5 conexões de usuários anonymous:

MaxClients 5

Cada usuário do ftp pode ter uma mensagem de login diferente. Crie o arquivo welcome.msg na home do usuário. Você pode usar o arquivo de boas vindas para logins
anônimos /home/ftp/welcome.msg como base:

# cp /home/ftp/welcome.msg /home/USER
# vim /home/USER/welcome.msg

Ative seu servidor Proftpd:

# /etc/init.d/proftpd stop
# /etc/init.d/proftpd start

Verifique se a pilha TCP notifica que a porta do FTP está ouvindo:

# netstat -ntpl
Verifique qual processo está ouvindo na porta do FTP:

# fuser -v 21/tcp
Combine com o colega ao lado para que ele realize conexões em seu servidor FTP, e acompanhe as atividades de transferência de arquivos que serão feitas em seguida pelo arquivo de log xferlog. Num terminal separado, digite:

# tail -f /var/log/proftpd/xferlog
Conectando-se a um servidor FTP como cliente

Um servidor FTP pode ser usando de duas formas:

Tradicional: Neste formato, o servidor aceita conexões de um usuário e senha válidos para liberar um shell para ele.

Anonymous: O Servidor FTP com anonymous é muito utilizado na Internet pelo motivo de não ser necessário ter um usuário no servidor. Desta forma, o usuário pode abrir um browser e chamar o endereço ftp://servidor para ter acesso ao diretório disponibilizado pelo serviço. Geralmente, esse diretório é o home do usuário FTP que no Debian é /home/ftp.

Conecte-se a um servidor ftp da forma tradicional. Forneça um usuário e senha válidos:

# ftp IP
Verifique se a conexão foi bem sucedida e encerre a sessão. Em breve iremos abrir uma nova para exercitar mais comandos:

ftp> quit
Agora conecte-se como um usuário anônimo no servidor instalado na sua própria máquina. A sintaxe do comando é a mesma, entretanto você deverá fornecer o login anonymous e uma senha qualquer. Verifique cuidadosamente se a conexão foi aceita:

# ftp localhost
Connected to localhost.
220 ProFTPD 1.3.0 Server (Debian) [::ffff:127.0.0.1]
Name (localhost:aluno): anonymous
331 Password required for anonymous.
Password:

Por que a conexão foi recusada? Estaria a senha incorreta?

Devemos antes liberar o acesso anônimo ao servidor! Edite o arquivo /etc/proftpd/proftpd.conf, e descomente as linhas referentes a seção Anonymous. Esta seção está localizada aproximadamente entre as linhas 100 e 140 do arquivo de configuração original:


User ftp
Group nogroup

...



Reinicie novamente o serviço para que as alterações tenham efeito:

# /etc/init.d/proftpd restart


Tente novamente a conexão como usuário anônimo. Agora deverá funcionar. Veja o quadro abaixo:

# ftp localhost
Connected to localhost.
220 ProFTPD 1.3.0 Server (Debian) [::ffff:127.0.0.1]
Name (localhost:aluno): anonymous
331 Password required for anonymous.
Password:
331 Anonymous login ok, send your complete email address as your password.
Password:
230-Welcome, archive user anonymous@localhost !

Continue logado como usuário anônimo. Iremos fazer alguns testes a seguir.


Comandos FTP


Os servidores de FTP muito raramente mudam, mas novos programas clientes FTP aparecem com bastante regularidade. Estes clientes variam no número de comandos que implementam. A maioria dos clientes FTP comerciais implementam apenas um pequeno subgrupo de comandos FTP. Mesmo que o FTP seja um protocolo orientado à linha de comandos, a nova geração dos clientes FTP esconde esta orientação num ambiente gráfico muitas vezes bastante desenvolvido.

As interfaces clientes do FTP do BSD UNIX e do GNU/Linux possuem muitos comandos, alguns deles arcaicos e sem utilidade hoje em dia, como por exemplo o tenex e o carriage control. Já outros são bastante utilizados: cd, dir, ls, get, mget, put e mput.

Abaixo estão listados alguns dos mais utilizados comandos FTP:

help - Lista os comandos disponíveis. Um sinônimo é ?
help CMD - Mostra uma ajuda para o comando CMD
ls - Lista os arquivos no servidor. Um sinônimo é dir
cd - Troca de diretório no servidor
lcd - Troca de diretório da máquina local
!ls - Lista os arquivos da máquina local
!CMD - Executa na máquina local o comando CMD
get - Faz download de um arquivo do servidor para a máquina local.
mget - Faz download de mais de um arquivo.
put - Faz upload de um arquivo da máquina local para o servidor.
mput - Faz upload de mais de um arquivo.

Logado como usuário anônimo vamos fazer alguns testes:

Liste o conteúdo do servidor:

ftp> ls


Liste o conteúdo do seu diretório local:

ftp> !ls




Faça o download de algum arquivo:

ftp> get ARQUIVO


Verifique se o arquivo foi copiado:

ftp> !ls


Tente agora fazer o upload de um arquivo:

ftp> put ARQUIVO


Por padrão, usuários anônimos não devem ter permissão para fazer upload de arquivos.

Encerre a sessão e logue-se em seguida como um usuário válido no servidor FTP da máquina de algum colega:

ftp> quit

221 Goodbye.

# ftp IP

Tente agora fazer o upload do arquivo. Deverá funcionar desta vez:

Faça o download de vários arquivos:

ftp> mget *


Note que é exigida a confirmação para cada arquivo copiado, o que pode ser incômodo. Desligue o modo interativo, e tente novamente:

ftp> prompt

Interactive mode off.
ftp> mget *

Faça o upload de vários arquivos:

ftp> mput *


Verifique o log de atividade do FTP:

# less /var/log/proftpd/xferlog

Nenhum comentário: