Monday, March 16, 2015

Instalar e configurar vsftpd (ftp) no Ubuntu

O vsftpd é um servidor FTP, free, para Linux que oferece boa performance e segurança, com configuração relativamente simples. Nesse post eu demonstro como instalar e configurar o vsftpd com usuários virtuais. Usuários que acessam o FTP, mas que não possuem acesso ao Linux (server). O Linux utilizado como referência é o Ubuntu Server 14.04. Os usuários virtuais são persistidos no formato db4 (Berkeley DB).

Primeira etapa é instalar o vsftpd e db-utils (se ainda não estiver instalado):
$ sudo apt-get install vsftpd db-utils

Assim que a instalação do vsftpd estiver concluída, faça um backup do arquivo vsftpd.conf (original):
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.back

Modifique o arquivo vsftpd.conf para que contenha apenas o conteúdo:
$ sudo apt-get install vsftpd db-utils

Assim que a instalação do vsftpd estiver concluída, faça um backup do arquivo vsftpd.conf:
$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.back

Modifique o conteúdo do arquivo vsftpd.conf para que contenha apenas as linhas:
listen=YES
anonymous_enable=NO
local_enable=YES

# Usuarios virtuais com os mesmos privilegios de usuarios locais
virtual_use_local_privs=YES
write_enable=YES

# Nome do servico PAM (Pluggable Authentication Modules) - em /etc/pam.d/
pam_service_name=vsftpd.virtual

# Ativa usuarios virtuais
guest_enable=YES

# Define o diretorio home para cada usuario virtual, baseado em um template: /home/{virtual}/$USER
user_sub_token=$USER

# usuario local (raiz), acima dos usuarios virtuais: vftpd - /home/vftp
local_root=/home/vftp/$USER

# Restringindo usuarios as suas respectivas pastas (home)
chroot_local_user=YES
allow_writeable_chroot=YES

# Esconde informacoes do dono
hide_ids=YES

# Habilita o log /var/log/vsftpd.log
xferlog_enable=YES


Agora vamos criar o banco de dados dos usuários virtuais do vsftpd. Para simplificar a manipulação vou criar dois usuários: joao e maria. Ambos serão armazenamos, inicialmente, em um arquivo texto e posteriormente convertidos em arquivo db4. O arquivo texto será organizado em linhas, primeiro o username e depois password. Os arquivos são mantidos no diretório /etc/vsftpd (será necessário criar esse diretório):
$ sudo mkdir /etc/vsftpd
$ sudo vi users.txt

Coloque o seguinte conteúdo no arquivo users.txt:
joao
joao123
maria
maria456

Salve o arquivo e execute as instruções para: converter para formato db4; modificar o acesso ao arquivo:
$ db_load -T -t hash -f users.txt vsftpd-virtual-user.db 
$ chmod 600 vsftpd-virtual-user.db

Se for conveniente, remova o arquivo users.txt. Fique atento para a inclusão de novos usuários, caso deseje remover o arquivo texto.

Próxima etapa é criar o arquivo PAM e indicar que o repositório de usuários (db4):
$ sudo vi /etc/pam.d/vsftpd.virtual

Coloque o seguinte conteúdo no arquivo vsftpd.virtual:
auth       required     pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
account    required     pam_userdb.so db=/etc/vsftpd/vsftpd-virtual-user
session    required     pam_loginuid.so

Agora é o momento de criar a estrutura de pastas no Linux, aonde os arquivos trafegados via FTP serão mantidos. Cada pasta será devidamente vinculada ao usuário, de acordo com as configurações realizadas previamente no vsftpd:
$ mkdir -p /home/vftp/{joao,maria}

Ajustar o dono e o grupo desses diretórios:
$ chown -R ftp:ftp /home/vftp

Repita os dois últimos comandos para cada novo usuário adicionado ao vsftpd.

Última etapa é reiniciar o serviço vsftpd:
$ service vsftpd restart

O teste pode ser via comando ftp do Linux, ou no Firefox via plugin FireFTP. Indique a url, o login (ex joao) e a senha (ex joao123).

Documentação utilizada como referência:
@edermag

No comments: