Instalando e Configurando Servidor FTP com vsftpd no Fedora


Hoje venho ensinar como instalar e configurar um servidor FTP no Linux, mais precisamente no Fedora com o vsftpd.

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…

# sudo yum install vsftpd

Com nosso servidor instalado, vamos alterar algumas configura√ß√Ķes no arquivo que se encontra geralmente em /etc/vsftpd/vsftpd.conf:

# sudo vi /etc/vsftpd/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.

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

# sudo groupadd ftpusers

J√° temos o grupo, vamos criar um usu√°rio chamado “ftpuser”, adicionar ele no grupo “ftpusers” e definir uma senha:

# useradd -g ftpusers ftpuser
# passwd ftpuser

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:

# cd /home
# sudo mkdir ftpuser
# sudo chown ftpuser:ftpusers ftpuser
# sudo chmod a-w ftpuser

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):

# sudo mkdir /home/ftpuser/public
# sudo chown ftpuser:ftpusers /home/ftpuser/public

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/ftp/$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/ftp/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”.

Segue o exemplo de como fica um modelo da configuração final


#Exemplo do arquivo /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
idle_session_timeout=600
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
pasv_enable=YES
pasv_min_port=9040
pasv_max_port=9050
user_sub_token=$USER
local_root=/var/ftp/$USER

Ah, lembrando que após qualquer alteração dentro do arquivo de configuração, devemos reiniciar o serviço do FTP:

sudo service vsftpd restart

Caso você esteja com problemas para conectar, verifique se no firewall as portas 21 e 2121 estão abertas, assim como as portas do modo Passivo.

Até mais.