HowTo: Servicio FTP usando base de datos MySQL

A pesar de alguna cierta incertidumbre que pueda rondar a MySQL, personalmente sigo prefiriendo trabajar con esta DB a usar alguna otra. No tengo nada contra Postgre, simplemente he usado de toda una vida MySQL, y hasta ahora no he tenido motivos para replantearme su uso.

Esta vez les enseñaré a instalar un servidor FTP, pero no solo eso, les enseñaré de una forma no tan compleja, cómo hacer que los usuarios, passwords y demás datos de los usuarios sean guardados en una base de datos MySQL, y no en cuentas locales.

¿por qué hacer esto así?

Simple, porque a la hora de hacer un backup, reinstalar un servidor o cualquier otro cambio significativo, mover el servicio sería tan simple como copiar un archivo de configuración, y exportar la base de datos MySQL referente al FTP.

Para lograr esto usaremos Pure-FTPd, bien… empecemos 

Instalación del servicio FTP con Pure-FTPd

1. Lo primero que debemos hacer es instalar el paquete: pure-ftpd-mysql

En distros como Debian o derivados: aptitude install pure-ftpd-mysql

2. Una vez instalado, se nos inició el servicio pero debemos detenerlo, para detenerlo en sistemas como Debian o derivados basta con:

/etc/init.d/pure-ftpd-mysql stop

No obstante, les dejo una línea que detendrá el servicio sin importar la distro que usen:

ps ax | grep pure | grep -v grep | awk '{print $1}' | xargs kill

Si desean entender con lujo de detalles esta línea, leer ESTE artículo

Preparando condiciones en el servidor MySQL

Ya expliqué hace no mucho cómo crear una base de datos, un usuario y darle permisos a ese usuario en la base de datos: Usuarios y permisos en MySQL

Pasemos a ¿qué haremos acá? …

1. Crearemos una base de datos sí, pero primero accedemos a MySQL :

mysql -u root -p

Aquí ponen el password de root y accederán a la terminal de MySQL.

2. Una vez dentro de MySQL pasamos a crear la base de datos myftpdb:

CREATE DATABASE myftpdb;

Noten el punto y coma «;» al final de la línea.

3. Ahora crearemos el usuario myftpuser y le daremos permisos a use usuario sobre la base de datos que recién creamos, este usuario tendrá como password myftppassword:

CREATE USER 'myftpuser'@'localhost' IDENTIFIED BY 'myftppassword';
GRANT ALL PRIVILEGES ON myftpdb.* TO 'myftpuser'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES ;

4. Listo, ya creamos la base de datos, el usuario y establecimos los permisos. Ahora debemos importar la base de datos por defecto (o limpia) para que esto esté completo. Para ello primero salgamos de MySQL:

exit;

Ahora descarguemos la base de datos por default que les ofrezco:

Descarga DB por default

O bien en el servidor usen la siguiente línea:

wget http://ftp.desdelinux.net/myftpdb.sql

Listo, ya la tenemos en nuestro servidor, ahora solo queda importar sus datos:

mysql -u root -p myftpdb < myftpdb.sql

Y listo!

También pueden usar alguna aplicación web como Adminer o PHPMyAdmin para importar la base de datos, lo dejo al gusto.

5. Y esto es todo para tener listo las condiciones de nuestro MySQL listas.

Uniendo FTP con MySQL

Bien, ya tenemos el servicio FTP instalado, el servicio MySQL instalado y con nuestra base de datos puesta… ahora solo falta, unir el servicio FTP con MySQL.

1. Primero debemos descargar el archivo de configuración que usaremos para lo antes marcado. En la terminal del servidor pongamos la siguiente línea:

cd /etc/pure-ftpd/ && wget http://ftp.desdelinux.net/pure-ftpd-mysql.conf

2. Ahora iniciamos el servicio FTP indicándole que use para autenticar usuarios MySQL, y además le indicaremos qué archivo de configuración usar para conectarse a MySQL:

pure-ftpd-mysql -l mysql:/etc/pure-ftpd/pure-ftpd-mysql.conf

Y listo 

Esto basta para instalar nuestro propio servidor FTP autenticando con una base de datos MySQL.

Si desean que siempre que el servidor se inicie automáticamente inicie el servicio FTP, deben poner en el archivo /etc/rc.local la línea que usamos para ejecutar el FTP, o sea, ponemos en /etc/rc.local esto:

pure-ftpd-mysql -l mysql:/etc/pure-ftpd/pure-ftpd-mysql.conf

Por cierto, podrán acceder al FTP usando cualquier navegador, así como clientes FTP como Filezilla… y no solo eso, usando navegadores de archivo como Nautilus, Dolphin o PCManFM también podrán bajar archivos y subirlos 

Usuario de prueba que está en la base de datos

Usuario: testuser

Password: testpassword

¿Cómo administrar los usuarios del FTP?

Bueno, teniendo en cuenta que es una base de datos MySQL, como dije arriba… usando PHPMyAdmin o Adminer les bastará. Simplemente usen su aplicación favorita para administrar la base de datos, la cual contiene una sola tabla: users … y en ella se encuentran los usuarios, aquí les dejo un screenshot:

Si desean crear un nuevo usuario, pueden duplicar o clonar la línea existente y cambiar los datos que serían diferentes entre ambos usuarios, aquí les muestro un screenshot:

Bueno… nada más que agregar 

Espero esto les sea de utilidad y ya saben, cualquier duda o sugerencia me la dejan saber.

Saludos

PD: En este tutorial usamos passwords guardados en la base de datos en texto plano, si desean mayor seguridad les recomiendo prueben con md5 