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:
- Suporte para utilizadores virtuais
- Suporte para IPv6
- Suporte para virtual IPs
- Suporte para SSL
- Controlo para largura de banda a usar
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:
- Anfitrião (IP/nome do servidor FTP
- Nome do utilizador e respectiva Palavra-Passe
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