Pplware

Servidor de FTP, com utilizadores virtuais no MySQL

Pessoalmente considero que as distribuições GNU/Linux têm as características perfeitas para implementar serviços de rede. As configurações dos serviços são normalmente realizadas em ficheiros, as quais podemos gerir/controlar facilmente qualquer serviço remotamente usando por exemplo SSH .

Como administrador de uma rede de dados,  já referi em vários artigos que dou preferência a distribuições Linux quando tenho de implementar algum tipo de serviço (ex. DHCP, DNS, HTTP, etc). Hoje deixamos aqui um pequeno guia de como criar um servidor de FTP, usando o vsftpd, com utilizadores virtuais no MySQL.

O vsftpd (Very Secure FTPD) é provavelmente um dos mais rápidos e seguros servidores de FTP para sistemas Unix. Este serviço oferece um conjunto de características das quais destacamos:

Pré-requisitos

Para este tutorial, vamos considerar que o hostname da nossa máquina é pplware.com e tem o endereço 192.168.1.84. Como vamos necessitar de várias vezes de privilégios root, podemos começar por executar o comando:

sudo su
Instalação do vsftpd, MySQL e phpMyAdmin

Passo 1 – De seguida, vamos instalar o vsftpd, MySQL e phpMyAdmin. Para uso, podemos usar apenas o seguinte comando

apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin libpam-ldap

e preenchemos com a seguinte informação:

New password for the MySQL "root" user: <-- PASSWORD
Repeat password for the MySQL "root" user: <-- PASSWORD
Web server to reconfigure automatically: <-- apache2
Configure database for phpmyadmin with dbconfig-common? <-- No
LDAP server Uniform Resource Identifier: <-- ENTER
Distinguished name of the search base: <-- ENTER
LDAP version to use: <-- 3
Make local root Database admin: <-- Yes
Does the LDAP database require login? <-- No
LDAP account for root: <-- ENTER
LDAP root account password: <-- ldaprootpw
Criar a base de dados para o serviço vsftpd

Passo 2 – Para este exemplo, vamos criar uma base de dados com o nome db_vsftpd e o utilizador MySQL u_vsftpd. Para tal, acedemos ao MySQL com o seguinte comando:

mysql -u root -p

e em seguida criamos a base de dados e definimos as permissões para o utilizador _vsftpd

CREATE DATABASE vsftpd; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON db_vsftpd.* TO 'u_vsftpd'@'localhost' IDENTIFIED BY 'password; 
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON db_vsftpd.* TO u_vsftpd'@'localhost.localdomain' IDENTIFIED BY 'password'; 
FLUSH PRIVILEGES;

Nota: deverá alterar o campo ‘password’ para a password que pretende atribuir ao utilizador

Acesso a base de dados e criação da estrutura

Passo 3 – Ainda dentro do MySQL usamos o seguinte comando para nos “posicionarmos” na base de dados db_vsftpd.

USE db_vsftpd;

depois criamos a estrutura da base de dados com o seguinte código:

CREATE TABLE `accounts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 30 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
UNIQUE (
`username`
)
) ENGINE = MYISAM ;

Para sair escrevemos quit

Configurar o vsftp

Passo 4 – Primeiro vamos criar o utilizador  vsftpd, sem privilégios, com o homedir em /home/vsftpd e associá-lo ao grupo nogroup. Os directorios dos utilizadores virtuais ficarão dentro de /home/vsftpd (ex.home/vsftpd/user1, /home/vsftpd/user2)

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

De seguida abrimos o ficheiro /etc/vsftpd.conf e incluimos a seguintes configuração:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
nopriv_user=vsftpd
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
guest_enable=YES
guest_username=vsftpd
local_root=/home/vsftpd/$USER
user_sub_token=$USER
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd_user_conf

(Opcional) De salientar que a variável user_config_dir aponta para /etc/vsftpd_user_conf. Nesse sentido é necessário criar essa diretoria, usando o comando:

mkdir /etc/vsftpd_user_conf

Agora vamos proceder a configuração do PAM (Pluggable authentication modules) de modo a podermos usar a informação da base de dados criada para autenticar os utilizadores (em vez da informação contida em /etc/passwd ou /etc/shadow). A configuração do PAM, para o vsftp, é realizada no ficheiro /etc/pam.d/vsftpd.

Assim, abrimos o ficheiro etc/pam.d/vsftpd e incluímos a seguinte informação:

auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 

account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2

Após as configurações anteriores, vamos reiniciar o serviço MySQL usando o comando

/etc/init.d/vsftpd restart
Criação de utilizadores virtuais

Passo 5 – O próximo passo é a criação de utilizadores virtuais. Para isso voltamos a entrar no MysQL e voltamos a posicionarmos-nos na base de dados db_vsftpd

mysql -u root -p
USE db_vsftpd;

De seguida criamos o nosso primeiro utilizador virtual. Para este exemplo vamos criar o utilizador pplware com a password ppl1220

Como não existe um processo automático para criação dos directórios dos utilizadores, basta executar/adaptar o seguinte código para outros utilizadores

mkdir /home/vsftpd/ppinto
chown vsftpd:nogroup /home/vsftpd/ppinto

E está feito.

Nota: uma vez que têm instalado o phpMyadmin, podem facilmente acrescentar novos utilizadores.

Como aceder ao FTP remotamente

Depois de instalado e configurado o serviço de  FTP, o acesso pode ser realizado via um simples browser ou através de uma aplicação cliente para FTP (ex. FileZilla, fireFTP). Neste exemplo vamos usar o FileZilla.

Para aceder ao serviço de FTP remoto basta indicar:

Como podem ver na imagem anterior, o acesso foi realizado com sucesso à home directory do utilizador ppinto. Esperamos que este tutorial seja útil e brevemente ensinaremos mais algumas configurações úteis.Ref

Exit mobile version