Alojamiento Virtual · 4 min read · Feb 10, 2026

Alojamiento Virtual Con vsftpd Y MySQL En Debian Lenny

Alojamiento Virtual Con vsftpd Y MySQL En Debian Lenny

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

Vsftpd es uno de los servidores FTP más seguros y rápidos para Linux. Normalmente, vsftpd está configurado para trabajar con usuarios del sistema. Este documento describe cómo instalar un servidor vsftpd que utiliza usuarios virtuales de una base de datos MySQL en lugar de usuarios del sistema reales. Esto es mucho más eficiente y permite tener miles de usuarios FTP en una sola máquina.

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 Debian Lenny (Debian 5.0). Ya deberías haber configurado un sistema básico de Debian Lenny, como se describe en los primeros siete capítulos de este tutorial: El Servidor Perfecto - Debian Lenny (Debian 5.0) [ISPConfig 2]

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 proporciona 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 doy 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 vsftpd, MySQL Y phpMyAdmin

Vsftpd no tiene soporte MySQL incorporado, por lo tanto, debemos usar PAM para autenticar contra la base de datos MySQL. Así que instalamos libpam-mysql además de vsftpd, MySQL y phpMyAdmin:

aptitude install vsftpd libpam-mysql mysql-server mysql-client phpmyadmin

Se te harán las siguientes preguntas:

Nueva contraseña para el usuario “root” de MySQL: <– tucontraseñarootsql
Repetir contraseña para el usuario “root” de MySQL: <– tucontraseñarootsql
Servidor web para reconfigurar automáticamente: <– apache2

3 Crear La Base De Datos MySQL Para vsftpd

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

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

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

USE vsftpd;
CREATE TABLE `accounts` (  
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,  
`username` VARCHAR( 30 ) NOT NULL ,  
`pass` VARCHAR( 50 ) NOT NULL ,  
UNIQUE (  
`username`  
)  
) 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 vsftpd. Luego puedes echar un vistazo a la base de datos. Más adelante puedes usar phpMyAdmin para administrar tu servidor vsftpd.

4 Configurar vsftpd

Primero creamos un usuario no privilegiado llamado vsftpd (con el directorio home /home/vsftpd) que pertenece al grupo nogroup. Ejecutaremos vsftpd bajo este usuario, y los directorios FTP de nuestros usuarios virtuales estarán en el directorio /home/vsftpd (por ejemplo, /home/vsftpd/user1, /home/vsftpd/user2, etc.).

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

Luego hacemos una copia de seguridad del archivo original /etc/vsftpd.conf y creamos el nuestro:

cp /etc/vsftpd.conf /etc/vsftpd.conf_orig  
cat /dev/null > /etc/vsftpd.conf  
vi /etc/vsftpd.conf

El archivo debería tener el siguiente contenido:

| listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES nopriv_user=vsftpd chroot_local_user=YES secure_chroot_dir=/var/run/vsftpd pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem guest_enable=YES guest_username=vsftpd local_root=/home/vsftpd/$USER user_sub_token=$USER virtual_use_local_privs=YES user_config_dir=/etc/vsftpd_user_conf |

Las opciones de configuración se explican en http://vsftpd.beasts.org/vsftpd_conf.html. Las opciones importantes para nuestra configuración virtual son chroot_local_user, guest_enable, guest_username, user_sub_token, local_root y virtual_use_local_privs.

Con la opción user_config_dir puedes especificar un directorio para archivos de configuración por usuario que anulan partes de la configuración global. Esto es totalmente opcional y depende de ti si deseas utilizar esta función. Sin embargo, deberíamos crear ese directorio ahora:

mkdir /etc/vsftpd_user_conf

Ahora debemos configurar PAM para que utilice la base de datos MySQL para autenticar a nuestros usuarios FTP virtuales en lugar de /etc/passwd y /etc/shadow. La configuración de PAM para vsftpd está en /etc/pam.d/vsftpd. Hacemos una copia de seguridad del archivo original y creamos uno nuevo así:

cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_orig  
cat /dev/null > /etc/pam.d/vsftpd  
vi /etc/pam.d/vsftpd

| auth required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 account required pam_mysql.so user=vsftpd passwd=ftpdpass host=localhost db=vsftpd table=accounts usercolumn=username passwdcolumn=pass crypt=2 |

¡Por favor, asegúrate de reemplazar la contraseña de MySQL con la tuya propia!

Después, reiniciamos vsftpd:

/etc/init.d/vsftpd restart
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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