Instalando e Configurando Servidor FTP com vsftpd no Linux
Fala pessoal, hoje venho ensinar como instalar e configurar um servidor FTP no Linux, mais precisamente no Ubuntu 12.04.
Dentre as muitas opções de programas que temos por ai, irei instalar o vsftpd, que parece ser muito seguro e é utilizado pela RedHat e OpenSuse além de outras empresas..
Entendendo o FTP
Por padrão o protocolo de transferência de arquivos utiliza duas portas para comunicação, a 21 para comandos e 20 para transferência dos dados.
Porém nem sempre a porta 20 é utilizada para transferência de dados, isso depende do modo que ele está configurado: ativou ou passivo.
Modo Ativo
No modo ativo, o cliente conecta-se através de uma porta randômica maior que 1023 (N > 1023) na porta 21 do servidor. Então o cliente começa ouvir na porta N + 1 e envia para o servidor essa porta, o servidor conecta-se de volta na porta especificada pelo cliente (N + 1) através da porta local 20.
Representação:
O problema com esse modo do FTP é que o servidor que começa uma conexão para transferência de dados, isso pode gerar problemas com o firewall do cliente pois está recebendo uma solicitação de fora e que geralmente é bloqueada.
Modo Passivo
Para resolver essa questão, foi desenvolvido o modo passivo (PASV). Nesse modo, o cliente abre duas portas randômicas maiores do que 1023 (N > 1023 e N+1). A primeira porta conecta-se com a porta 21 do servidor, mas invés de informar o servidor a porta para comunicação de dados, o cliente usará o comando PASV. Como resultado, o servidor vai abrir uma porta randômica (ou não, se configurarmos) P e então enviará essa porta P como resposta ao PASV para o cliente. Por fim, o cliente inicia o conexão através da porta N+1 na porta P do servidor para transferência de dados.
Representação:
Essa foi uma breve abordagem sobre o funcionamento do FTP e dos modos ativo e passivo, recomendo esse excelente link caso você queira saber mais.
Instalação e Configuração
Agora que já temos uma base, vamos à instalação.
Primeiro, atualize a lista de pacotes e depois instale o vsftpd:
Após a instalação, podemos testar acessando o servidor FTP localmente como anônimo (usuário sem senha), basta rodarmos o comando ftp localhost
e digitarmos "anonymous" no usuário e deixar a senha vazia.
Com nosso servidor instalado e funcionando, vamos alterar algumas configurações no arquivo que se encontra geralmente em /etc/vsftpd.conf
.
Vamos começar desabilitando acesso anônimo de nosso servidor. Abra o arquivo de configuração para editar e defina anonymous_enable=NO
.
Se tentarmos acessar o servidor agora não conseguiremos pois estamos sem nenhuma forma de autenticação.
sudo service vsftpd restart
para isso.Precisamos de usuário para acessar nosso servidor, vamos dizer ao vsftpd para permitir login com usuários locais (do sistema operacional). Abra o arquivo de configuração e descomente a linha local_enable=YES
.
Uma boa prática é criar um grupo para usuários de FTP no Linux, assim facilita a administração de permissões para esses indivíduos. Execute o comando abaixo para criar um grupo chamado "ftpusers".
Já temos o grupo, vamos criar um usuário chamado "ftpuser", adicionar ele no grupo "ftpusers" e definir uma senha:
Se tentarmos acessar nosso servidor FTP agora, veremos que precisamos criar uma pasta com o mesmo nome do usuário dentro de /home
. Vamos criar esse diretório do usuário, mudar o owner para "ftpuser" e o grupo para "ftpusers". Também precisamos remover o acesso de escrita desse diretório, pois o vsftpd não permite que a pasta do usuário (somente ela, os subdiretórios podem ter) tenha acesso de escrita:
Após as operações acimas, devemos ter isso:
Como o diretório do usuário não tem acesso de escrita, iremos criar um diretório chamado public
dentro de /home/ftpuser
onde o usuário poderá armazenar seus arquivos e depois mudaremos o owner para o usuário e seu grupo (para que ele consiga ter acesso total)
A partir de agora já conseguimos acessar o servidor FTP com o usuário criado, só que tem algo de errado ai, o usuário consegue acessar qualquer diretório do sistema a partir do diretório dele, basta executar cd /
para acessar a raiz do Linux por exemplo..
Descomente a linha chroot_local_user=YES
para enjaular o usuário apenas no diretório dele, assim ele só poderá acessar subdiretórios de sua pasta.
Até agora está tudo certo, porém ainda estamos utilizando o modo ativo, isso pode nos gerar problemas.. Vamos ativar o modo passivo, para isso precisamos definir pasv_enable=YES
no arquivo de configuração.
Nesse servidor não foi necessário, mas em alguns pode ser necessário definir o ip do servidor FTP no qual o cliente deve fazer a solicitação, se for seu caso, basta definir pasv_address=XXX.XXX.XXX.XXX
(troque XXX.XXX.XXX.XXX pelo ip do seu servidor FTP) no arquivo de configuração.
Pode-se também definir uma faixa de portas na qual o servidor FTP irá usar para transferir arquivos, basta definir pasv_min_port=9040
e pasv_max_port=9050
no arquivo de configuração, nesse caso estariamos liberando as portas 9040 até 9050 para transferência no modo passivo.
Se você desejar pode mudar onde será o diretório inicial do usuário FTP (o padrão é /home/nome_usuario
), basta definir local_root=/var/$USER
no arquivo de configuração, caso você utilize a variável $USER
do sistema no caminho (como nesse exemplo), defina também a linha user_sub_token=$USER
para o vsftpd entender como uma variável. No exemplo dado, ao acessarmos o servidor FTP com o usuário "ftpuser" o vsftpd estaria procurando o diretório /var/ftpuser
.
Para finalizar, muitas vezes podemos precisar que o diretório inicial do servidor FTP aponte para um outro diretório que não seja um subdiretório (que esteja fora da home), a melhor forma para fazer isso seria montar o diretório desejado dentro da pasta inicial do usuário. Temos aqui um exemplo: sudo mount --bind /var/webapps/meu-blog /home/usuario_ftp/blog
, assim cada vez que acessarmos o diretório "blog" do usuário estaremos na verdade acessando o "meu-blog" dentro de "var".
Por hoje é só, não esqueça de deixar sua opinião nos comentários.
Até mais.