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.
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