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 😉


28 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   LiGNUxero dijo

    MUY BUENO!!! Hace un par de semanas estuve instalandome esto pero con vsftpd y no me termino de convencer asi que voy a probar esto a ver que tal esta. Gracias

    1.    KZKG^Gaara dijo

      Gracias amigo.
      vsftpd no recuerdo cuándo fue la última vez que lo usé… harán algunos años ya, … si es que alguna vez lo usé JAJA. Por el momento con PureFTPd ando más que contento 😀

  2.   proper dijo

    Muy buen aporte!

    1.    KZKG^Gaara dijo

      Thanks compa 😀
      Se hace lo que se puede jejeje….

  3.   Informático de Guardia dijo

    Uuumm, interesante… pásame la ip de la BD que quiero tener esa recopilación de usuarios y contraseñas a mano 😉

    Don’t be evil, man

    1.    KZKG^Gaara dijo

      No entendí jejeje… ¿de qué IP y DB hablas?
      Si te refieres a que estos datos que puse en el tutorial podrían estar así mismo en un servidor, síp ahí tienes razón… están en un servicio FTP en una PC virtual en mi laptop, esta tiene un MUY buen firewall (iptables) por lo que… HAHAHAHAHA claro que don’t be evil LOL!!!

  4.   Informático de Guardia dijo

    Joroña que joroña…. va a ser más complicado de lo que parece aprovechar alguna vulnerabilidad y capturar esos datos 😉

  5.   Algabe dijo

    ¡¡Muy interesante!! 🙂

    1.    KZKG^Gaara dijo

      Gracias 🙂
      Esto es lo que intento que nos diferencie del resto de sitios … que nosotros intentamos poner no tanto noticias sino como artículos técnicos 😀

  6.   Giskard dijo

    Qué tan rápido es esto respecto a Samba? (red local solamente)

    1.    LiGNUxero dijo

      que samba y ftp son 2 cosas distintas, ftp es un protocolo en serio y smb solo para facilitar la comparticion entre win y linux.
      Si buscas rendimiento en la red utiliza un servicio de FTP de lo contrario utiliza samba nomas sin problemas

      1.    KZKG^Gaara dijo

        Exacto.
        Digamos que FTP es un tanto más serio que Samba, al menos en mi opinión así lo es.

        No he hecho benchmarks ni mucho menos, pero tal vez FTP sea un poco más rápido.

        1.    Giskard dijo

          Gracias. Yo uso Samba para que desde mi consola Wii (usando wiimc) pueda ver pelis y series que descargo en la compu. Pero wiimc también se puede conectar a un servidor ftp. Yo usé Samba porque era lo más fácil, pero siempre me intrigó si sería más rápido con ftp. Tendré que probar.

          1.    KZKG^Gaara dijo

            Bueno, también podrías montar simplemente Apache en tu PC, y así el Wii se conectaría, este debe ser más rápido que samba… y muchísimo más simple de configurar que FTP 😀

          2.    Giskard dijo

            El wiimc (un Wii Media Player) sólo acepta conexiones Samba y FTP.

  7.   Max Steel dijo

    Excelente. Sólo le hace falta algo a este tipo de artículos (y al sitio en general) para quede todo perfecto; una plantilla CSS para poder imprimir los artículos a PDF o en papel.

  8.   LiGNUxero dijo

    No se si será a mi solo, pero el gran problema con esto es que los usuarios pueden recorrer todos los directorios por mas que le doy un directorio específico como «/var/www/sitio_usuario» si se conectan por ftp tienen acceso a cualquier lugar de mi pc ¬¬
    no es muy seguro eso jaja

  9.   LiGNUxero dijo

    ACA ESTA!!!
    Para evitar que los usuarios que creamos puedan navegar por todo nuestro sistema hay que agregarle el parametro «-A» al lanzar el pure…

    O sea lo que agregamos al /etc/rc.local que pones en el tuto es esto
    pure-ftpd-mysql -l mysql:/etc/pure-ftpd/pure-ftpd-mysql.conf

    y hay que reemplazarlo por esto otro:
    pure-ftpd-mysql -A -l mysql:/etc/pure-ftpd/pure-ftpd-mysql.conf

    Se aprecia?… Esta nueva línea lleva el parámetro -A para restringirle el directorio solamente al que le asignamos y nada mas, puede crear pero no puede subir de nivel.

    D: esta lindo puro-fptd

    1.    KZKG^Gaara dijo

      Gracias por el tip 😀

  10.   Roberto dijo

    Hola es posible implementar quotas en esta implementación de MySQL y FTP, yo actualmente tengo un servidor ftp con vsftpd y no tengo problema alguno con las quotas, pero al ser un usuario virtual (creado en mysql) serán validas las quotas? y lo segundo es en donde se almacenan los archvios subidos por los usuarios, es decir cuales son los directorios de cada usuario.

    1.    KZKG^Gaara dijo

      En teoría sí se pueden implementar cuotas, de hecho la base de datos tiene los campos creados para ello, y el archivo de configuración del servicio FTP tiene puesta las consultas para esto, lo que en realidad no he probado esto 😉

      Sobre el dónde los usuarios pondrían los archivos, lo defines en el 5to campo, mira el screenshot: https://blog.desdelinux.net/wp-content/uploads/2012/09/phpmyadmin-screenshot-nuevo-usuario.jpg

  11.   Roberto dijo

    Muchas Gracias por tu comentario, voy a probar este sistema en un servidor de prueba y comento los resultados, ojala se pueda por que es un gran método para tener todo ordenadito, y con un RAID tienes un sistema de backup estable :D.

    1.    KZKG^Gaara dijo

      Gracias a tí por el comentario 🙂

  12.   Roberto dijo

    Tengo una pregunta, ya he logrado instalar pure-ftp con mysql y quotas, el tema ahora es como puedo suspender una cuenta desde la propia tabla mysql, sin modificar su contraseña usuario o archivos subidos.

    1.    KZKG^Gaara dijo

      Se me ocurren dos formas, la más simple es cambiarle el valor de Status de 1 a 0, en teoría si está en 0 la cuenta está desactivada, prueba esto y me dices 🙂

  13.   Birkhoff dijo

    Roberto, como lograste poner las cuotas usando esta instalación? Por favor socializa la información.
    Muy buena entrada!!

    1.    RobertoSotelo dijo

      Birkhoff, justamente en mi blog personal cree un tema sobre eso, te dejo el link para que lo revises:

      http://aprendelinux.net/instalar-servidor-ftp-pure-ftp-con-cuentas-virtuales-en-mysql/

  14.   klaus dijo

    Saludos:

    EStoy tratando de seguir todo pero me aparece error 501 y mas que todo hacer referencia a que el password es incorrecto cuando se que esta bien