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.