sexta-feira, 20 de novembro de 2009
Instalando e Configurando um Servidor FTP com o VSFTPD
Seguindo a Série de Artigos para serem utilizados em sala de aula, desta vez apresentaremos o Servidor FTP - File Transfer Protocol.
FTP significa File Transfer Protocol (Protocolo de Transferência de Arquivos), e é uma forma bastante rápida e versátil de transferir arquivos (também conhecidos como ficheiros), sendo uma das mais usadas na internet.
Pode referir-se tanto ao protocolo quanto ao programa que implementa este protocolo (Servidor FTP, neste caso, tradicionalmente aparece em letras minúsculas, por influência do programa de transferência de arquivos do Unix).
A transferência de dados em redes de computadores envolve normalmente transferência de arquivos e acesso a sistemas de arquivos remotos (com a mesma interface usada nos arquivos locais). O FTP (RFC 959) é baseado no TCP, mas é anterior à pilha de protocolos TCP/IP, sendo posteriormente adaptado para o TCP/IP. É o padrão da pilha TCP/IP para transferir arquivos, é um protocolo genérico independente de hardware e do sistema operacional e transfere arquivos por livre arbítrio, tendo em conta restrições de acesso e propriedades dos mesmos.
Fonte: http://pt.wikipedia.org/wiki/File_Transfer_Protocol
Para instalarmos um servidor FTP poderíamos utilzar várias soluções do mundo Linux como o Proftpd. Mas escolhemos para este tutorial o VSFTP - Very Secure FTP que tem em seu site oficial http://freshmeat.net/projects/vsftpd/
Arquivo de configuração:
/etc/vsftpd.conf
Daemon:
/etc/init.d/vsftpd
Porta TCP/IP envolvidas:
20 e 21 tcp/udp
Instalação:
#apt-get install vsftpd
Pronto. Já neste ponto, você já tem um servidor FTP com acesso anônimo liberado. Vamos testar?
Iniciando o servidor:
#/etc/init.d/vsftpd restart
a) Utilizando a linha de comando:
# ftp localhost Connected to localhost.
220 (vsFTPd 2.0.7)
Name (localhost:root): anonymous
Password: qualquersenha
Porém o acesso anônimo é de somente leitura.
Se você desejar disponibilizar algum arquivo pra que usuários anônimos da sua rede ou da Internet baixem a partir deste servidor que você acabou de montar, coloque no seguinte caminho:
/home/ftp
Este é o diretório local no seu HD que os usuários anônimos caem quando logam no seu servidor.
b) Utilizando o browser
Você pode fazer o teste utilizando o Firefox, Konquerror, Opera, Chomium ou IE. Basta na barra de endereços digitar:
ftp://localhost (caso você esteja na mesma máquina que está o servidor)
ftp://10.0.0.1 (supondo que este é o IP do servidor FTP que você está montando).
c) Utilizando um Cliente FTP
Para fazer testes de FTP, não use Browsers. Use clientes de FTP. No Linux eu utilizo dois: Filezilla e o GFTP
Eu prefiro o Filezilla. Caso você use Debian, Ubuntu ou derivados, basta instalar com o comando:
apt-get install filezilla
Um teste de acesso utilizando o Filezilla.
Se você utiliza Windows, você também pode utilizar o Filezilla.
Para fazer um acesso autenticado, ou liberar gravação do usuário anônimo, é necessário alterar algumas linhas do /etc/vsftpd.conf. Vamos conhecer melhor este arquivo.
As opções do /etc/vsftpd.conf
Habilita o protocolo IPv6
listen_ipv6=YES
Libera/Nega acesso Anônimo
anonymous_enable=YES
Permite que usuários do servidor façam o login no servidor FTP
local_enable=YES
Permite que os usuários tenham acesso de gravação no servidor de FTP (Menos o anônimo)
write_enable=YES
Permite que o usuário anonimo faça upload para o servidor de FTP
anon_upload_enable=YES
Obs: Para esta opção funcionar a linha write_enable=YES deve estar ativada.
# Permite que o usuário Anônimo crie diretorios
anon_mkdir_write_enable=YES
Proibindo usuários de Logar no Servidor FTP
Configure as seguintes linhas:
userlist_deny=YES
userlist_file=/etc/vsftpd.denied_users
Crie o arquivo /etc/vsftpd.denied_users e escreva um por linha os usuários que não podem logar no servidor.
Autorizando somente alguns usuários a logarem no servidor:
Configure as seguintes linhas:
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.allowed_users
Crie o arquivo /etc/vsftpd.allowed_users e escreva um por linha quem pode logar no servidor.
Enjaulando Usuários
Para impedir que os usuários autenticados saiam do seu diretório home e possam navegar pelo HD do servidor, ative a opção abaixo:
chroot_local_user=YES
Obs: Esta técnica é chamada de Enjaular usuários
Para "enjaular" somente alguns usuários:
Configure as seguintes linhas
chroot_local_user=NO
chroot_list_enable=YES
Crie o seguinte arquivo: /etc/vsftpd.chroot_list e escreva o nome dos usuários que você deseja enjaular um por linha
Para "enjaular" todos e deixar alguns livres:
Configure as seguintes linhas:
chroot_local_user=YES
chroot_list_enable=YES
Crie o seguinte arquivo: /etc/vsftpd.chroot_list e escreva o nome dos usuários que você deseja que não seja enjaulado um por linha.
Possibilitando que o usuário Anônimo faça Upload.
Obs: Se você ativar esta opção e for logar com no servidor com o usuário anonymous, você irá receber a seguinte mensagem:
500 OOPS: vsftpd: refusing to run with writable anonymous root
Isto contradiz toda a história de permissionamento do Linux, mas é isto mesmo. Para você permitir que o Anonymous faça login e consiga fazer uploads para o servidor de FTP, é necessário que o diretório /home/ftp não pertença ao usuário ftp e ainda mais, não pode ter permissão de gravação. Você deverá criar um subdiretório dentro do diretório /home/ftp e ai sim, você libera a gravação deste subiretório. Então para evitar este erro faça o seguinte:
Passe o diretório /home/ftp para o root
# chown root:root /home/ftp
Tire as permissões de gravação deste diretório
# chmod 555 /home/ftp
Crie um subdiretório que contenha permissão para gravação
# mkdir /home/ftp/upload
Altere as permissões deste subdiretório
# chmod 777 /home/ftp/upload
Faça o teste: Logue como anonimo utilizando o filezilla e faça uploads de arquivos.
Referências:
http://ubuntuforums.org/showthread.php?t=518293
Dailson...
ResponderExcluirCara muito obrigado, pdria existir mais pessoas como você na internet!
Isso é um dom! Muito obrigado pela ajuda!
Muito bem feito o seu blog!
Daniel Espateco
Obrigado. Ajudou a boa explicação feita sobre o servifor de ftp. Fica configurado á primeira. Abraço.
ResponderExcluirPoderia me dar uma ajuda, fiz todo esse processo mais ainda não consigo conectar pelo filezilla.
ResponderExcluirAparece essa msg:
Estado: Conexão estabelecida, esperando mensagem de boas-vindas...
Resposta: 220 (vsFTPd 2.2.2)
Comando: USER uftp
Resposta: 530 Permission denied.
Erro: Não foi possível conectar ao servidor
Como você está tentando conectar? Usuário e senha?
ResponderExcluirEste comentário foi removido pelo autor.
ResponderExcluirSim, com usuário e senha.
ResponderExcluirE como anonimo o acesso é normal.
Para que funcione com usuários normais, é necessário fazer esta configuração:
ResponderExcluirPermite que usuários do servidor façam o login no servidor FTP
local_enable=YES
Dailson, esse parâmetro já esta configurado e mesmo assim não consigo conectar.
ExcluirCaro Dailson, meus parabéns e obrigado pelo seu excelente tutorial!
ResponderExcluirSe puder me responder por favor: Configurei o acesso para uma pasta específica dentro do diretório /home/usuario/ftp do usuário no servidor. Quando conecto via FTP com o Filezilla, o sistema mostra toda a árvore de diretórios e inclusive permite que esse usuário navegue nas pastas. Procurei no manual do VSFTPD, mas não consigo encontrar algum parâmetro que simplesmente oculte as pastas acima daquela que defini como login padrão.
Conectei também utilizando uma máquina com Windows 7 pelo Windows Explore e ele conecta direto na pasta e não permite visualizar as que estão acima daquela que é a padrão.
Existe alguma solução para resolver esse problema?
Agradeço desde já se puder responder.
Obrigado.
Fábio
Olá Fábio,
ResponderExcluirObrigado pelos elogios.
A resposta de todas as suas perguntas está no próprio tutorial. Veja a sessão ENJAULANDO USUÁRIOS.
Lá tem tudo que você precisa para "enjaular" os usuários no diretório de login.
Um abraço,
Dailson Fernandes
Bom dia ...
ResponderExcluirToda vez que tento logar no servidor ftp via conexao externa recebo essa mensagem :
USER msnet
331 Please specify the password.
PASS xxxx
500 OOPS:
E realize a configuração do vsftpd.conf igual ao seu tutorial.
poderia mi mi ta uma luz.
Oi Sá,
ExcluirAcontece isso via conexão interna?
Bom Dia ....
ExcluirA mesma coisa na rede interna e conexão externa
Blz
Você tem como mandar o vsftpd.conf pra mim??? contato@dailson.com.br
ExcluirOutra pergunta,
Você consegue logar com este usuário normalmente?
Parabens! Obrigado por ajudar a comunidade!
ResponderExcluirOpa!
ExcluirObrigado!!
Olá Dailson,
ResponderExcluirEstou precisando configurar um FTP onde o usuário admin possa gravar arquivos em uma pasta restrita e o usuário client possa apenas fazer o download destes arquivos.
É possível fazer essa configuração?
Parabéns pelo trabalho!
Abraços
Opa Claudio e Ever.
ExcluirPode sim.
Coloque o usuário que você quer que tenha acesso total como dono da pasta.
# chown novodono /pasta
Depois coloque o outro usuário como integrante de um grupo que você quer que apenas tenha acesso de leitura a pasta.
# chgrp -a grupo /pasta
Depois dê as devidas permissões nesta pasta:
# chmod 750 /pasta
Outra maneira é usar o sistema de ACLs do Linux.
Tenho uma aula falando sobre isto no seguinte link:
http://dailson.blogspot.com.br/2013/04/aula-12-gerenciamento-de-permissoes-no.html
Dailson, minha pergunta é mais ou menos parecida com a anterior.
ResponderExcluirPreciso criar uma pasta onde o usuário A possa ler e escrever e o usuário B somente ler.
Obrigado.
Opa Claudio e Ever.
ExcluirPode sim.
Coloque o usuário que você quer que tenha acesso total como dono da pasta.
# chown novodono /pasta
Depois coloque o outro usuário como integrante de um grupo que você quer que apenas tenha acesso de leitura a pasta.
# chgrp -a grupo /pasta
Depois dê as devidas permissões nesta pasta:
# chmod 750 /pasta
Outra maneira é usar o sistema de ACLs do Linux.
Tenho uma aula falando sobre isto no seguinte link:
http://dailson.blogspot.com.br/2013/04/aula-12-gerenciamento-de-permissoes-no.html
Eu não consigo fazer conexão externo no meu ftp, como faço essa liberação no linux??
ResponderExcluirOi Alex,
ExcluirExterno como? Da internet para sua rede local?
Dailson Bom Dia, muito bom seu tutorial.
ResponderExcluirApenas uma pergunta, fiz a instalação e estou permitindo que o Usuário anonymous connect ao FTP, faça upload e download. Diretório esta DEFAULT no Centos /var/ftp/pub. Este diretório esta com permissão de leitura e escrita para todos usuários.
Ocorre que quando conecto com usuário anonymous, consigo fazer upload (put file) normal, mais quando vou fazer o download (get file) não consigo pois retorna uma mensagem de erro '550 failed to open file'. Quando listo o arquivo que fiz o upload (ls -lh) o mesmo esta com permissão apenas rw (leitura e escrita) para o Usuário ftp e grupo ftp. Se alterar a permissão direto no arquivo consigo fazer o download.
Como consigo fazer o download sem precisar ficar mudando a permissão direto no arquivo que esta dentro de /pub. Processo esta sendo feito através de outro linux pelo ftp-client. diretiva local_umask esta comentado.
Obrigado abraços.
Opa Wender.
ExcluirVou tentar simular teu ambiente aqui e vou tentar lhe ajudar caso você ainda não tenha resolvido. Pois nunca peguei esta bronca não.
Bom dia Danilson
ResponderExcluirTudo bem?
Já possuo um ftp em funcionamento, porém gostaria de saber se é possível o seguinte:
usuário W administra seu próprio ftp (le, escreve) em sua pasta de ftp e na hora de disponibilizar o conteúdo os usuários só podem ler/baixar.
Existe essa possibilidade ou devo deixar o anônimo com acesso?
Tentei fazer por diversas vezes, mas acho que estou fazendo algo errado no acesso do conteúdo.
Ou teria a possibilidade de dois usuários terem acesso a mesma pasta do ftp mas apenas um ser administrador e o outro apenas ler?
Tentei isso mas não consegui!
Obrigado pela atenção
Opa Douglas,
ExcluirTudo certo!
Coloque o usuário W como dono da pasta.
Coloque todos os outros usuários em um grupo.
Coloque este grupo como dono da pasta e de acesso somente de leitura e execucao 750.
Faça os testes e me reporte pra ver se funcionou.
Eu estou usando o modo passivo com as portas 9050-9059. No browser e em algum cliente FTP qualquer o meu FTP funciona normalmente, mas se eu for acessar ele via terminal dá conexão negada após o login, o que será? :/
ResponderExcluir230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,254,32,35,97).
ftp: connect: Conexão recusada