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.