Servidor FTP · 6 min read · Jan 20, 2026
Alojamiento Virtual Con PureFTPd Y MySQL (Incl. Gestión De Cuotas Y Ancho De Banda) En Debian Lenny - Página 2
5 Configurar PureFTPd
Edita /etc/pure-ftpd/db/mysql.conf. Debería verse así:
cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
vi /etc/pure-ftpd/db/mysql.conf| MYSQLSocket /var/run/mysqld/mysqld.sock #MYSQLServer localhost #MYSQLPort 3306 MYSQLUser pureftpd MYSQLPassword ftpdpass MYSQLDatabase pureftpd #MYSQLCrypt md5, cleartext, crypt() or 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!
Luego crea el archivo /etc/pure-ftpd/conf/ChrootEveryone que simplemente contiene la cadena yes:
echo "yes" > /etc/pure-ftpd/conf/ChrootEveryoneEsto hará que PureFTPd chroot a cada usuario virtual en su directorio personal, por lo que no podrá navegar por directorios y archivos fuera de su directorio personal.
También crea el archivo /etc/pure-ftpd/conf/CreateHomeDir que nuevamente simplemente contiene la cadena yes:
echo "yes" > /etc/pure-ftpd/conf/CreateHomeDirEsto hará que PureFTPd cree un directorio personal para el usuario cuando inicie sesión y el directorio personal aún no exista.
Ahora debemos configurar PureFTPd como un demonio independiente (actualmente está controlado por inetd). Para hacer esto, abrimos /etc/default/pure-ftpd-common y cambiamos el valor del parámetro STANDALONE_OR_INETD a standalone:
vi /etc/default/pure-ftpd-common| # Configuración para pure-ftpd # (este archivo es utilizado por /bin/sh, edítalo en consecuencia) # STANDALONE_OR_INETD # los valores válidos son "standalone" y "inetd". # Cualquier cambio aquí anula la configuración en debconf. STANDALONE_OR_INETD=standalone # VIRTUALCHROOT: # si se debe usar un binario con soporte de virtualchroot # los valores válidos son "true" o "false" # Cualquier cambio aquí anula la configuración en debconf. VIRTUALCHROOT=false # UPLOADSCRIPT: si esto está configurado y el demonio se ejecuta en modo independiente, # pure-uploadscript también se ejecutará para iniciar el programa dado a continuación # para manejar cargas. ver /usr/share/doc/pure-ftpd/README.gz o # pure-uploadscript(8) # ejemplo: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl UPLOADSCRIPT= # si se establece, pure-uploadscript iniciará $UPLOADSCRIPT ejecutándose como el # uid y gid dados UPLOADUID= UPLOADGID= |
A continuación, modificamos /etc/inetd.conf y comentamos la línea ftp:
vi /etc/inetd.conf| [...] #:STANDARD: Estos son servicios estándar. #ftp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper [...] |
Después, reiniciamos Inetd y PureFTPd:
/etc/init.d/openbsd-inetd restart
/etc/init.d/pure-ftpd-mysql restart6 Población De La Base De Datos Y Prueba
Para poblar la base de datos, puedes usar el shell de MySQL:
mysql -u root -pUSE pureftpd;Ahora creamos el usuario exampleuser con el estado 1 (lo que significa que su cuenta ftp está activa), la contraseña secret (que se almacenará encriptada usando la función MD5 de MySQL), el UID y GID 2001 (usa el userid y groupid del usuario/grupo que creaste al final del paso dos!), el directorio personal /home/www.example.com, un ancho de banda de carga y descarga de 100 KB/sec. (kilobytes por segundo), y una cuota de 50 MB:
INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.example.com', '100', '100', '', '*', '50', '0');quit;Ahora abre tu programa cliente FTP en tu estación de trabajo (algo como WS_FTP o SmartFTP si estás en un sistema Windows o gFTP en un escritorio Linux) e intenta conectarte. Como nombre de host usas server1.example.com (o la dirección IP del sistema), el nombre de usuario es exampleuser y la contraseña es secret.
Si puedes conectarte - ¡felicitaciones! Si no, algo salió mal.
Ahora, si ejecutas
ls -l /homedebes ver que el directorio /home/www.example.com (el directorio personal de exampleuser) ha sido creado automáticamente, y es propiedad de ftpuser y ftpgroup (el usuario/grupo que creamos al final del paso tres):
server1:~# ls -l /home
total 8
drwxr-xr-x 2 administrator administrator 4096 2009-02-16 13:18 administrator
drwxr-xr-x 2 ftpuser ftpgroup 4096 2009-06-05 16:09 www.example.com
server1:~#7 Administración De La Base De Datos
Para la mayoría de las personas es más fácil si tienen un front-end gráfico para MySQL; por lo tanto, también puedes usar phpMyAdmin (en este ejemplo bajo http://server1.example.com/phpmyadmin/) para administrar la base de datos pureftpd.

Siempre que quieras crear un nuevo usuario, debes crear una entrada en la tabla ftpd, así que explicaré las columnas de esta tabla aquí:
Tabla ftpd:
- User: El nombre del usuario virtual de PureFTPd (por ejemplo, exampleuser).
- status: 0 o 1. 0 significa que la cuenta está deshabilitada, el usuario no puede iniciar sesión.
- Password: La contraseña del usuario virtual. Asegúrate de usar la función MD5 de MySQL para guardar la contraseña encriptada como una cadena MD5:

- UID: El userid del usuario ftp que creaste al final del paso dos (por ejemplo, 2001).
- GID: El groupid del grupo ftp que creaste al final del paso dos (por ejemplo, 2001).
- Dir: El directorio personal del usuario virtual de PureFTPd (por ejemplo, /home/www.example.com). Si no existe, se creará cuando el nuevo usuario inicie sesión por primera vez a través de FTP. El usuario virtual estará encarcelado en este directorio personal, es decir, no puede acceder a otros directorios fuera de su directorio personal.
- ULBandwidth: Ancho de banda de carga del usuario virtual en KB/sec. (kilobytes por segundo). 0 significa ilimitado.
- DLBandwidth: Ancho de banda de descarga del usuario virtual en KB/sec. (kilobytes por segundo). 0 significa ilimitado.
- comment: Puedes ingresar cualquier comentario aquí (por ejemplo, para tu administración interna) aquí. Normalmente dejas este campo vacío.
- ipaccess: Ingresa direcciones IP aquí que están permitidas para conectarse a esta cuenta FTP. * significa que cualquier dirección IP está permitida para conectarse.
- QuotaSize: Espacio de almacenamiento en MB (no KB, como en ULBandwidth y DLBandwidth!) que el usuario virtual puede usar en el servidor FTP. 0 significa ilimitado.
- QuotaFiles: cantidad de archivos que el usuario virtual puede guardar en el servidor FTP. 0 significa ilimitado.
8 FTP Anónimo
Si deseas crear una cuenta ftp anónima (una cuenta ftp a la que todos pueden iniciar sesión sin una contraseña), puedes hacerlo así:
Primero crea un usuario ftp (con el homedir /home/ftp) y grupo ftp:
groupadd ftp
useradd -s /bin/false -d /home/ftp -m -c "ftp anónimo" -g ftp ftpLuego crea el archivo /etc/pure-ftpd/conf/NoAnonymous que contiene la cadena no:
echo "no" > /etc/pure-ftpd/conf/NoAnonymousCon esta configuración, PureFTPd permitirá inicios de sesión anónimos.
Reinicia PureFTPd:
/etc/init.d/pure-ftpd-mysql restartLuego creamos el directorio /home/ftp/incoming que permitirá a los usuarios anónimos cargar archivos. Daremos al directorio /home/ftp/incoming permisos de 311 para que los usuarios puedan cargar, pero no ver ni descargar ningún archivo en ese directorio. El directorio /home/ftp tendrá permisos de 555 que permiten ver y descargar archivos:
cd /home/ftp
mkdir incoming
chown ftp:nogroup incoming/
chmod 311 incoming/
cd ../
chmod 555 ftp/Ahora los usuarios anónimos pueden iniciar sesión, y pueden descargar archivos de /home/ftp, pero las cargas están limitadas a /home/ftp/incoming (y una vez que un archivo se carga en /home/ftp/incoming, no se puede leer ni descargar desde allí; el administrador del servidor tiene que moverlo a /home/ftp primero para hacerlo disponible para otros).
9 Enlaces
- PureFTPd: http://www.pureftpd.org
- MySQL: http://www.mysql.com
- phpMyAdmin: http://www.phpmyadmin.net
- Debian: http://www.debian.org
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.