Servidor FTP · 6 min read · Feb 13, 2026

Alojamiento Virtual Con PureFTPd Y MySQL (Incl. Gestión De Cuotas Y Ancho De Banda) En Fedora 18

Alojamiento Virtual Con PureFTPd Y MySQL (Incl. Gestión De Cuotas Y Ancho De Banda) En Fedora 18

Versión 1.0
Autor: Falko Timme
Sígueme en Twitter

Este documento describe cómo instalar un servidor PureFTPd que utiliza usuarios virtuales de una base de datos MySQL en lugar de usuarios reales del sistema. Esto es mucho más eficiente y permite tener miles de usuarios ftp en una sola máquina. Además, mostraré el uso de cuotas y límites de ancho de banda de carga/descarga con esta configuración. Las contraseñas se almacenarán encriptadas como cadenas MD5 en la base de datos.

Para la administración de la base de datos MySQL, puedes usar herramientas basadas en la web como phpMyAdmin, que también se instalará en este tutorial. phpMyAdmin es una interfaz gráfica cómoda, lo que significa que no tienes que lidiar con la línea de comandos.

Este tutorial se basa en Fedora 18. Ya deberías haber configurado un sistema básico de Fedora 18.

Este tutorial está destinado como una guía práctica; no cubre los antecedentes teóricos. Estos se tratan en muchos otros documentos en la web.

¡Este documento se proporciona sin garantía de ningún tipo! Quiero decir que este no es el único modo de configurar un sistema así. Hay muchas maneras de lograr este objetivo, pero este es el camino que elijo. No emito ninguna garantía de que esto funcionará para ti!

1 Nota Preliminar

En este tutorial utilizo el nombre de host server1.example.com con la dirección IP 192.168.0.100. Estas configuraciones pueden diferir para ti, así que debes reemplazarlas donde sea apropiado.

2 Instalar MySQL Y phpMyAdmin

Todo esto se puede instalar con un solo comando:

yum install mysql mysql-server phpMyAdmin httpd

Ahora configuramos phpMyAdmin. Cambiamos la configuración de Apache para que phpMyAdmin permita conexiones no solo desde localhost (comentando todo en el bloque y agregando la línea Require all granted):

vi /etc/httpd/conf.d/phpMyAdmin.conf

| # phpMyAdmin - Navegador MySQL basado en la web escrito en php # # Permite solo localhost por defecto # # Pero permitir phpMyAdmin a cualquier persona que no sea localhost debe considerarse # peligroso a menos que esté debidamente asegurado por SSL Alias /phpMyAdmin /usr/share/phpMyAdmin Alias /phpmyadmin /usr/share/phpMyAdmin # # # Apache 2.4 # # Require ip 127.0.0.1 # Require ip ::1 # # # # # Apache 2.2 # Order Deny,Allow # Deny from All # Allow from 127.0.0.1 # Allow from ::1 # Require all granted # Apache 2.4 Require ip 127.0.0.1 Require ip ::1 # Apache 2.2 Order Deny,Allow Deny from All Allow from 127.0.0.1 Allow from ::1 # Estos directorios no requieren acceso a través de HTTP - tomados del tarball original de # phpMyAdmin upstream # Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None Order Deny,Allow Deny from All Allow from None # Esta configuración previene que mod_security en los directorios de phpMyAdmin # filtre SQL, etc. Esto puede romper tu implementación de mod_security. # # # # SecRuleInheritance Off # # |

Luego creamos los enlaces de inicio del sistema para MySQL y Apache (para que ambos se inicien automáticamente cada vez que se inicie el sistema) y comenzamos ambos servicios:

systemctl enable mysqld.service  
systemctl start mysqld.service
systemctl enable httpd.service   
systemctl start httpd.service

Crea una contraseña para el usuario root de MySQL (reemplaza yourrootsqlpassword con la contraseña que deseas usar):

mysql_secure_installation

[root@server1 ~]# mysql_secure_installation

NOTA: SE RECOMIENDA EJECUTAR TODAS LAS PARTES DE ESTE SCRIPT PARA TODOS LOS SERVIDORES MySQL
EN USO EN PRODUCCIÓN! POR FAVOR, LEE CUIDADOSAMENTE CADA PASO!

Para iniciar sesión en MySQL y asegurarla, necesitaremos la
contraseña actual para el usuario root. Si acabas de
instalar MySQL, y no has configurado la
contraseña de root aún, la
contraseña estará en blanco,
por lo que solo debes presionar enter aquí.

Ingresa la contraseña actual para root (presiona enter para ninguno): <– ENTER
OK, se utilizó la contraseña con éxito, avanzando…

Configurar la contraseña de root asegura que
nadie pueda iniciar sesión en el
usuario root de MySQL sin la
autorización adecuada.

¿Establecer contraseña de root? [Y/n] <– ENTER
Nueva contraseña: <– yourrootsqlpassword
Reingresa la nueva contraseña: <– yourrootsqlpassword
¡Contraseña actualizada con éxito!
Recargando tablas de privilegios..
… ¡Éxito!

Por defecto, una instalación de MySQL
tiene un usuario anónimo,
permitiendo que cualquiera
pueda iniciar sesión en MySQL
sin tener que tener una
cuenta de usuario creada
para ellos. Esto está
intencionado solo para
testing, y para
hacer que la instalación
sea un poco más
suave. Debes
eliminarlos
antes de pasar a un
ambiente de producción.

¿Eliminar usuarios anónimos? [Y/n] <– ENTER
… ¡Éxito!

Normalmente, solo se debe permitir que root
se conecte desde ‘localhost’. Esto
asegura que alguien
no pueda adivinar la
contraseña de root desde
la red.

¿Deshabilitar inicio de sesión remoto de root? [Y/n] <– ENTER
… ¡Éxito!

Por defecto, MySQL
viene con una
base de datos llamada
‘test’ a la que
cualquiera puede
acceder. Esto también
está destinado solo
para testing, y
debería ser eliminado
antes de pasar a un
ambiente de producción.

¿Eliminar base de datos de prueba y
acceso a ella? [Y/n] <– ENTER

  • Eliminando base de datos de prueba…
    … ¡Éxito!
  • Eliminando privilegios
    sobre la base de datos de prueba…
    … ¡Éxito!

Recargar las tablas de privilegios
asegurará que todos
los cambios realizados
hasta ahora
tomen efecto
imediatamente.

¿Recargar tablas de privilegios ahora? [Y/n] <– ENTER
… ¡Éxito!

Limpiando…

¡Todo listo! Si has completado
todos los pasos anteriores,
tu instalación de MySQL
debiera estar ahora
asegurada.

¡Gracias por usar MySQL!

[root@server1 ~]#

3 Instalar PureFTPd Con Soporte Para MySQL

El paquete PureFTPd de Fedora soporta varios backends, como MySQL, PostgreSQL, LDAP, etc. Por lo tanto, todo lo que tenemos que hacer es instalar el paquete normal de PureFTPd:

yum install pure-ftpd

Luego creamos un grupo ftp (ftpgroup) y un usuario (ftpuser) al que se mapearán todos nuestros usuarios virtuales. Reemplaza el grupo y el ID de usuario 2001 con un número que esté libre en tu sistema:

groupadd -g 2001 ftpgroup  
useradd -u 2001 -s /bin/false -d /bin/null -c "usuario pureftpd" -g ftpgroup ftpuser

4 Crear La Base De Datos MySQL Para PureFTPd

Ahora creamos una base de datos llamada pureftpd y un usuario MySQL llamado pureftpd que el demonio PureFTPd utilizará más adelante para conectarse a la base de datos pureftpd:

mysql -u root -p
CREATE DATABASE pureftpd;  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';  
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';  
FLUSH PRIVILEGES;

Reemplaza la cadena ftpdpass con la contraseña que deseas usar para el usuario MySQL pureftpd. Aún en la consola de MySQL, creamos la tabla de base de datos que necesitamos (sí, ¡solo hay una tabla!):

USE pureftpd;
CREATE TABLE ftpd (  
User varchar(16) NOT NULL default '',  
status enum('0','1') NOT NULL default '0',  
Password varchar(64) NOT NULL default '',  
Uid varchar(11) NOT NULL default '-1',  
Gid varchar(11) NOT NULL default '-1',  
Dir varchar(128) NOT NULL default '',  
ULBandwidth smallint(5) NOT NULL default '0',  
DLBandwidth smallint(5) NOT NULL default '0',  
comment tinytext NOT NULL,  
ipaccess varchar(15) NOT NULL default '*',  
QuotaSize smallint(5) NOT NULL default '0',  
QuotaFiles int(11) NOT NULL default 0,  
PRIMARY KEY (User),  
UNIQUE KEY User (User)  
) ENGINE=MyISAM;
quit;

Como habrás notado, con el comando quit; hemos salido de la consola de MySQL y estamos de vuelta en la consola de Linux.

Por cierto, (asumo que el nombre de host de tu sistema de servidor ftp es server1.example.com) puedes acceder a phpMyAdmin en http://server1.example.com/phpMyAdmin/ (también puedes usar la dirección IP en lugar de server1.example.com) en un navegador e iniciar sesión como el usuario pureftpd. Luego puedes echar un vistazo a la base de datos. Más adelante puedes usar phpMyAdmin para administrar tu servidor PureFTPd.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.