Alojamiento Virtual · 5 min read · Dec 03, 2025

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

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

Versión 1.0
Autor: Falko Timme

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 Mandriva 2009.0. Ya deberías haber configurado un sistema básico de Mandriva 2009.0, por ejemplo, como se describe en los primeros seis capítulos de este tutorial: https://www.howtoforge.com/perfect-server-mandriva-2009.0-i386

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

¡Este documento se presenta sin garantía de ningún tipo! Quiero decir que esta no es la única forma 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 funcione 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:

urpmi MySQL MySQL-client phpmyadmin

Por defecto, la red no está habilitada en el paquete MySQL de Mandriva 2009.0. Podemos cambiar esto comentando la línea skip-networking en /etc/my.cnf:

vi /etc/my.cnf

| [...] # No escuchar en un puerto TCP/IP en absoluto. Esto puede ser una mejora de seguridad, # si todos los procesos que necesitan conectarse a mysqld se ejecutan en el mismo host. # Toda interacción con mysqld debe hacerse a través de sockets Unix o pipes con nombre. # Ten en cuenta que usar esta opción sin habilitar pipes con nombre en Windows # (a través de la opción "enable-named-pipe") hará que mysqld sea inútil! # #skip-networking [...] |

Después, creamos los enlaces de inicio del sistema para MySQL y Apache…

chkconfig mysqld on  
chkconfig httpd on

… y comenzamos ambos servicios:

/etc/init.d/mysqld start  
/etc/init.d/httpd restart

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

mysqladmin -u root password yourrootsqlpassword  
mysqladmin -h server1.example.com -u root password yourrootsqlpassword

3 Instalar PureFTPd Con Soporte Para MySQL

El paquete PureFTPd de Mandriva soporta varios backends, como MySQL, PostgreSQL, LDAP, etc. Lo instalamos así:

urpmi pure-ftpd pure-ftpd-anon-upload pure-ftpd-anonymous

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 usará más tarde 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)  
) TYPE=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.

5 Configurar PureFTPd

Edita /etc/pure-ftpd/pure-ftpd.conf y asegúrate de que las líneas ChrootEveryone, MySQLConfigFile y CreateHomeDir estén habilitadas y se vean así:

vi /etc/pure-ftpd/pure-ftpd.conf

| [...] ChrootEveryone yes [...] MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf [...] CreateHomeDir yes [...] |

La configuración ChrootEveryone hará que PureFTPd chroot a cada usuario virtual en su directorio de inicio, por lo que no podrá navegar por directorios y archivos fuera de su directorio de inicio. La línea CreateHomeDir hará que PureFTPd cree el directorio de inicio de un usuario cuando el usuario inicie sesión y el directorio de inicio aún no exista.

Luego editamos /etc/pure-ftpd/pureftpd-mysql.conf. Debería verse así:

cp /etc/pure-ftpd/pureftpd-mysql.conf /etc/pure-ftpd/pureftpd-mysql.conf_orig  
cat /dev/null > /etc/pure-ftpd/pureftpd-mysql.conf  
vi /etc/pure-ftpd/pureftpd-mysql.conf

| MYSQLSocket /var/lib/mysql/mysql.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() o password() - md5 es MUY RECOMENDABLE sobre texto claro MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") |

Asegúrate de reemplazar la cadena ftpdpass con la contraseña real para el usuario MySQL pureftpd en la línea MYSQLPassword! Ten en cuenta que usamos md5 como método MYSQLCrypt, lo que significa que almacenaremos las contraseñas de los usuarios como una cadena MD5 en la base de datos, lo cual es mucho más seguro que usar contraseñas en texto plano.

Ahora iniciamos PureFTPd:

/etc/init.d/pure-ftpd start
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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