Vsftpd es uno de los servidores FTP más seguros y rápidos para Linux. Por lo general, vsftpd está configurado para funcionar con los 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 eficaz y permite tener miles de usuarios de ftp en una sola máquina.
Para la administración de la base de datos MySQL, puede usar herramientas basadas en web como phpMyAdmin, que también se instalará en este instructivo. phpMyAdmin es una interfaz gráfica cómoda, lo que significa que no tiene que perder el tiempo con la línea de comandos.
Este tutorial está basado en Debian Squeeze (Debian 6.0). Ya debería haber configurado un sistema Debian Squeeze básico.
Este howto pretende ser una guía práctica; no cubre los antecedentes teóricos. Se tratan en muchos otros documentos en la web.
¡Este documento viene sin garantía de ningún tipo! Quiero decir que esta no es la única forma de establecer un sistema de este tipo. Hay muchas maneras de lograr este objetivo, pero este es el camino que tomo. ¡No emito ninguna garantía de que esto funcione para usted!
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 usted, por lo que debe reemplazarlas cuando corresponda.
2 Instalar vsftpd, MySQL y phpMyAdmin
Vsftpd no tiene soporte incorporado para MySQL, por lo tanto, debemos usar PAM para autenticarnos en 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 phpmyadmin
Se le harán las siguientes preguntas:
Nueva contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
Repita la contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
Servidor web para reconfigurar automáticamente:<-- apache2
¿Configurar la base de datos para phpmyadmin con dbconfig-common? <-- No
3 Crea 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 usará 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;
Reemplace la cadena ftpdpass con la contraseña que desee usar para el usuario de MySQL vsftpd. Todavía en el shell 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 la renuncia; hemos dejado el shell de MySQL y estamos de vuelta en el shell de Linux.
Por cierto, (supongo que el nombre de host de su sistema de servidor ftp es server1.example.com) puede acceder a phpMyAdmin en http://server1.example.com/phpmyadmin/ (también puede usar la dirección IP en lugar de server1 .example.com) en un navegador e inicie sesión como usuario vsftpd. A continuación, puede echar un vistazo a la base de datos. Más tarde puede usar phpMyAdmin para administrar su servidor vsftpd.
4 Configurar vsftpd
Primero creamos un usuario sin privilegios llamado vsftpd (con el homedir /home/vsftpd) perteneciente al grupo nogroup. Ejecutaremos vsftpd con 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 /etc/vsftpd.conf original y creamos el nuestro propio:
cp /etc/vsftpd.conf /etc/vsftpd.conf_orig
cat /dev/null > /etc/vsftpd.conf
vi /etc/vsftpd.conf
El 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 |
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 |