Servidor FTP · 5 min read · Feb 11, 2026
Alojamiento Virtual Con vsftpd Y MySQL En Debian Squeeze
Vsftpd es uno de los servidores FTP más seguros y rápidos para Linux. Normalmente, vsftpd se configura 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 reales del sistema. 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 Squeeze (Debian 6.0). Ya deberías haber configurado un sistema básico de Debian Squeeze.
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 manera de configurar un sistema así. Hay muchas formas de lograr este objetivo, pero este es el camino que sigo. No emito ninguna garantía de que esto funcione para ti!
1 Nota Preliminar
En este tutorial uso 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:
apt-get install vsftpd libpam-mysql mysql-server mysql-client phpmyadminSe 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
¿Configurar la base de datos para phpmyadmin con dbconfig-common? <– No
3 Crear La Base De Datos MySQL Para vsftpd
Ahora creamos una base de datos llamada vsftpd y un usuario MySQL llamado vsftpd que el demonio vsftpd utilizará más adelante para conectarse a la base de datos vsftpd:
mysql -u root -pCREATE 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 vsftpdLuego 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.confEl archivo debe 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 usar esta función. Sin embargo, deberíamos crear ese directorio ahora:
mkdir /etc/vsftpd_user_confAhora debemos configurar PAM para que use 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 |
¡Asegúrate de reemplazar la contraseña de MySQL con la tuya propia!
Después, reiniciamos vsftpd:
/etc/init.d/vsftpd restart5 Crear El Primer Usuario Virtual
Para poblar la base de datos, puedes usar la consola de MySQL:
mysql -u root -pUSE vsftpd;Ahora creamos el usuario virtual testuser con la contraseña secret (que se almacenará encriptada usando la función PASSWORD de MySQL):
INSERT INTO accounts (username, pass) VALUES('testuser', PASSWORD('secret'));
quit;directorio home de testuser es /home/vsftpd/testuser; desafortunadamente, vsftpd no crea ese directorio automáticamente si no existe. Por lo tanto, lo creamos manualmente ahora y lo hacemos propiedad del usuario vsftpd y del grupo nogroup:
mkdir /home/vsftpd/testuser
chown vsftpd:nogroup /home/vsftpd/testuserAhora abre tu programa cliente FTP en tu estación de trabajo (algo como FileZilla o FireFTP) y trata de conectarte. Como nombre de host usas server1.example.com (o la dirección IP del sistema), el nombre de usuario es testuser y la contraseña es secret.
Si puedes conectarte, ¡felicitaciones! Si no, algo salió mal.
6 Administración De La Base De Datos
Para la mayoría de las personas, es más fácil si tienen una interfaz gráfica 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 vsftpd.

Siempre que crees o modifiques un usuario, asegúrate de usar la función PASSWORD de MySQL para encriptar la contraseña de ese usuario. Además, cuando crees un nuevo usuario virtual, por favor no olvides crear el directorio home de ese usuario en la consola, como se mostró al final del capítulo anterior.

7 Enlaces
- vsftpd: http://vsftpd.beasts.org/
- Debian: http://www.debian.org/
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.