O serviço de transferência de arquivos via FTP (File Transfer Protocol) é um dos serviços mais usados na Internet. Ele pode ser usado para transferência de arquivos privados de usuários, usando autenticação via nome/senha
, e também para acesso a repositórios públicos, com acesso anônimo.
Vários servidores de FTP estão disponíveis gratuitamente em ambiente UNIX, entre eles são muito usados o VSFTP, o WU-FTP, o ProFTPd e o PureFTP. Cada um deles possui seus próprios arquivos de configuração. A Wikipedia traz uma excelente relação de servidores FTP para várias plataformas.
Servidores de FTP podem ser acessados através de clientes em linha de comando, clientes gráficos específicos ou navegadores Web. A maioria dos sistemas operacionais dispõe de um cliente FTP em modo texto, acessível através do comando ftp
, a ser digitado em um terminal.
Para acesso usando um navegador Web, a URL do serviço FTP tem a forma “ftp://user:password@host:port/path
” (a parte “user:password@
” pode ser omitida no caso de conexões anônimas). O servidor FTP da PUCPR mostra um exemplo de acesso ao serviço FTP através de navegador.
O serviço de FTP é provido por um daemon geralmente chamado ftpd
, que pode ser lançado através do daemon inetd/xinetd
ou então como um serviço autônomo. Ele faz uso das portas 20/TCP (fluxo de dados) e 21/TCP (controle da conexão), mas também pode usar outras portas acima de 1024. Os logs de uso do servidor FTP são normalmente armazenados em /var/log/xferlog
.
Em relação à autenticação, o servidor de FTP pode oferecer dois tipos de acesso:
$HOME
daquele usuário;anonymous
ou guest
, sem senha (ou usando um e-mail como senha). Caso a configuração do servidor permita acessos anônimos, o servidor abre um terminal para transferência de arquivos em uma área pública (por exemplo, /var/ftp/pub
). Normalmente, as trasferências anônimas são limitadas ao download de arquivos, não sendo permitido o upload.Um exemplo de FTP autenticado:
(client)$ ftp espec.ppgia.pucpr.br Connected to espec.ppgia.pucpr.br. 220 (vsFTPd 1.0.0) Name (espec:maziero): maziero 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> dir 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. drwxr-xr-x 2 500 500 4096 Jul 31 15:20 Desktop drwxr-xr-x 2 500 500 4096 Jul 31 18:58 bin -rw-r--r-- 1 500 500 435 Jul 31 22:22 journal.txt drwx------ 2 500 500 4096 Jul 18 12:50 projs drwx-----x 4 500 500 4096 Jul 31 19:03 public_html 226 Directory send OK. ftp> quit
Um exemplo de FTP anônimo:
(client)$ ftp ftp.unicamp.br Connected to zeus.unicamp.br. 220 FTPserver da Unicamp - Master - Default Name (ftp.unicamp.br:maziero): anonymous 331 Anonymous login ok, send your complete email address as your password Password: 230- Bem-vindo ao servidor FTP da Unicamp! Sugestoes e comentarios, por favor entre em contato com <apoio@ccuec.unicamp.br>. Welcome to UNICAMP's FTP server! For comments on this site, please contact <apoio@ccuec.unicamp.br>. You are user (162) of (300) simultaneous users allowed. 230 Anonymous access granted, restrictions apply Remote system type is UNIX. Using binary mode to transfer files. ftp> dir 150 Opening ASCII mode data connection for file list -rw-r--r-- 1 FtpUser FtpGroup 302 Jul 11 2005 msg.welcome drwxrwsr-x 10 FtpUser FtpGroup 1024 Jul 15 16:48 pub drwxrwsr-x 10 FtpUser FtpGroup 512 Apr 26 2007 pub2 drwxrwsr-x 11 FtpUser FtpGroup 512 Feb 22 13:08 pub3 drwxrwsr-x 3 FtpUser FtpGroup 512 Jul 16 11:16 pub4 drwxrwsr-x 4 FtpUser FtpGroup 512 Jul 15 12:16 pub5 drwxrwsr-x 13 FtpUser FtpGroup 512 Jul 15 12:51 pub6 226 Transfer complete ftp> quit
Quanto ao formato dos dados transferidos, a transferência pode ocorrer de dois modos:
Os modos de operação binário ou ASCII podem ser selecionados na linha de comando do cliente FTP, através dos comandos bin
e ascii
, respectivamente.
Um cliente FTP em linha de comando oferece um conjunto de comandos para operações envolvendo arquivos, como download, upload, navegação em diretórios, etc. Os comandos básicos oferecidos pela maioria dos clientes FTP são apresentados a seguir:
Comando e exemplo | Significado |
---|---|
ftp ftp.pucpr.br | lança o cliente e abre uma conexão com o servidor indicado |
open ftp.pucpr.br | inicia uma conexão com o servidor indicado |
bye quit | encerra a conexão e o cliente FTP |
close | encerra a conexão (mas não o cliente) |
ls dir | lista o conteúdo do diretório remoto |
cd dirA | muda o diretório remoto para dirA |
cd .. | retorna ao diretório anterior |
lcd dirB | muda o diretório local (do cliente) para dirB |
pwd | informa o diretório remoto atual |
get arquivo.txt | obtém o arquivo remoto arquivo.txt |
get arquivo.txt file.txt | obtém o arquivo remoto arquivo.txt , salvando-o localmente como file.txt |
mget *.c | obtém todos os arquivos remotos *.c |
put arquivo.txt | transfere o arquivo local arquivo.txt para o servidor |
mput *.jpg | transfere para o servidor todos os arquivos locais *.jpg |
delete arq.txt | remove o arquivo remoto arq.txt |
mkdir dirA | cria um novo diretório |
rmdir dirB | remove o diretório indicado (se estiver vazio) |
ascii | ajusta modo de transferência para ASCII |
bin | ajusta modo de transferência para binário |
prompt | liga/desliga as confirmações individuais para mget e mput |
passive | liga/desliga o modo passivo (vide abaixo) |
help | mostra os comandos disponíveis |
O serviço FTP sempre inicia através de uma conexão à porta 21/TCP do servidor; essa conexão e responsável pelo controle das transferências de dados entre cliente e servidor, sendo por isso chamada de control port. A seguir, é necessário abrir uma segunda conexão entre ambos, sobre a qual ocorrerão as transferências de dados propriamente ditas; por isso, essa nova conexão é chamada data port.
Há duas formas de se estabelecer a conexão de dados. Na primeira forma, chamada FTP Ativo, o cliente cria uma porta TCP de número N>1023, e o servidor conecta a essa porta do cliente, a partir de sua porta 20/TCP. Essa forma de operação pode trazer problemas em algumas redes, pois o servidor precisa se conectar em uma porta do cliente, o que normalmente é bloqueado pelos firewalls do lado do cliente.
O quadro a seguir detalha a operação em modo ativo:
Passo | Cliente | Servidor |
---|---|---|
1 | Pede conexão à porta 21/TCP do servidor | |
2 | Aceita o pedido de conexão | |
3 | Solicita autenticação de usuário | |
4 | Autentica o usuário | |
5 | Escolhe uma porta N>1023 e informa ao servidor | |
6 | Recebe o número de porta N escolhido pelo cliente | |
7 | Seleciona um conteúdo para download | |
8 | Pede conexão à porta N/TCP do cliente, a partir de sua porta 20/TCP |
|
9 | Aceita o pedido de conexão | |
10 | Envia o conteúdo solicitado para a porta N/TCP | |
11 | Recebe o conteúdo solicitado |
Uma transferência em FTP ativo entre o cliente 192.168.0.174
e o servidor FTP 200.192.112.10
é mostrada da seguinte forma pelo comando netstat
(aqui N vale 54398):
Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado tcp 0 0 192.168.0.174:54398 200.192.112.10:20 ESTABELECIDA tcp 0 0 192.168.0.174:38631 200.192.112.10:21 ESTABELECIDA
Na segunda forma, denominada FTP Passivo, o servidor cria uma porta TCP de número aleatório N>1023 e informa ao cliente, que se conecta a essa porta do servidor. Dessa forma, todas as conexões sempre partem do cliente, o que permite atravessar a maioria dos firewalls do lado do cliente. Todavia, o servidor passa a operar com portas aleatórias, o que complica a configuração de firewalls do lado do servidor.
O quadro a seguir detalha a operação em modo passivo:
Passo | Cliente | Servidor |
---|---|---|
1 | Pede conexão à porta 21/TCP do servidor | |
2 | Aceita o pedido de conexão | |
3 | Solicita autenticação de usuário | |
4 | Autentica o usuário | |
5 | Seleciona o modo passivo | |
6 | Escolhe uma porta N>1023 e informa ao cliente | |
7 | Recebe o número de porta N escolhido pelo servidor | |
8 | Seleciona um conteúdo para download | |
9 | Pede conexão à porta N/TCP informada pelo servidor | |
10 | Aceita o pedido de conexão | |
11 | Solicita o conteúdo desejado à porta 21/TCP | |
12 | Envia o conteúdo solicitado usando a porta N/TCP |
Uma transferência em FTP passivo entre o cliente 192.168.0.174
e o servidor FTP 200.192.112.10
é mostrada da seguinte forma pelo comando netstat
(aqui, N vale 44072):
Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado tcp 0 0 192.168.0.174:38632 200.192.112.10:21 ESTABELECIDA tcp 0 0 192.168.0.174:34197 200.192.112.10:44072 ESTABELECIDA
Resumindo, em modo ativo:
E em modo passivo: