Ferramentas do usuário

Ferramentas do site


espec:servico_ftp

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
espec:servico_ftp [2011/11/28 17:33]
maziero
espec:servico_ftp [2020/02/27 11:38] (atual)
maziero
Linha 1: Linha 1:
 +====== File Transfer Protocol ======
 +
 +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.
 +
 +===== Servidores e clientes =====
 +
 +Vários servidores de FTP estão disponíveis gratuitamente em ambiente UNIX, entre eles são muito usados ​ o [[http://​vsftpd.beasts.org|VSFTP]],​ o [[http://​www.wfms.org/​wu-ftpd|WU-FTP]],​ o [[http://​www.proftpd.org|ProFTPd]] e o [[http://​www.pureftpd.org|PureFTP]]. Cada um deles possui seus próprios arquivos de configuração. A Wikipedia traz uma excelente relação de [[http://​en.wikipedia.org/​wiki/​List_of_FTP_server_software|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 [[ftp://​ftp.pucpr.br|servidor FTP da PUCPR]] mostra um exemplo de acesso ao serviço FTP através de navegador.
 +
 +===== O serviço FTP =====
 +
 +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:
 +
 +  * acesso **autenticado**:​ ao se conectar, o usuário fornece seu //login// e sua senha; caso seja autenticado corretamente,​ o servidor FTP abre um terminal simplificado para transferência de arquivos, com acesso ao diretório ''​$HOME''​ daquele usuário;
 +  * acesso **anônimo**:​ ao se conectar, o usuário se identifica como ''​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:​
 +
 +<​code>​
 +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> ​
 +</​code>​
 +
 +Um exemplo de FTP anônimo:
 +
 +<​code>​
 +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> ​
 +</​code>​
 +
 +Quanto ao formato dos dados transferidos,​ a transferência pode ocorrer de dois modos:
 +
 +  * **ASCII**: neste modo de operação, os caracteres enviados pelo servidor podem ser "​traduzidos"​ pelo cliente, quando o conjunto de caracteres das duas plataformas for diferente. Por exemplo, se o conjunto de caracteres da plataforma do servidor for Unicode (UTF-8) e o conjunto do cliente for ISO-8859-1 (ISO-Latin1),​ alguns caracteres poderão ser convertidos durante a transferência. Esse modo de operação é o default.
 +  * **Binário**:​ neste modo de operação, os caracteres enviados pelo servidor são recebidos pelo cliente //as-is//, ou seja, sem conversões. Com isso, eventuais conteúdos binários podem ser transferidos sem modificação. Esse modo de operação é fundamental para a transferência de arquivos binários, como imagens, vídeos, arquivos compactados e executáveis.
 +
 +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.
 +
 +===== Comandos FTP =====
 +
 +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 |
 +
 +===== Modos ativo e passivo =====
 +
 +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): ​
 +
 +<​code>​
 +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
 +</​code>​
 +
 +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): ​
 +
 +<​code>​
 +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
 +</​code>​
 +
 +Resumindo, em modo ativo:
 +
 +  * Fluxo de controle: client:M => server:21
 +  * Fluxo de dados: ​ client:N <= server:20
 +
 +E em modo passivo:
 +  * Fluxo de controle: client:M => server:21
 +  * Fluxo de dados: client:P => server:N
 +