Posteado por: Gabriel en: Agosto 9, 2009
Como tuve varias consultas sobre la configuración del servicio Vsftpd con usuarios virtuales me puse a configurar el servicio Vsftpd paso a paso según el artículo Manual para configurar un Servidor FTP con Vsftpd en openSUSE que escribí ya hace mucho tiempo y que solo lo había probado completamente en las versiones 10.3 y 11.0 de openSUSE, pero esta vez le llegó el turno a la versión 11.1 de la misma distro.
Les comento que la configuración ha funcionado perfectamente en todos los ámbitos: configuración básica para usuarios locales y anónimos, configuración para el acceso mediante usuarios virtuales y configuración para el acceso con seguridad TLS/SSL, para todos los casos he hechos pruebas y no he encontrado ningún inconveniente, con lo que el manual aún cubre las expectativas para esta última versión de la distribución.
Pero aparte de realizar esta prueba de configuración del servicio Vsftpd, también me puse a investigar como hacer para que los usuarios virtuales y sus contraseñas sean almacenados en una base de datos MySQL, en vez de ser almacenados en una base de datos del tipo Berkeley como se detalla en el manual. Los pasos que he seguido para configurar esta funcionalidad anexa a la configuración ya propuesta en el Manual para configurar un Servidor FTP con Vsftpd en openSUSE se detallarán mas abajo.
OBS: Aclaro que no se volverá a detallar cada uno de los pasos para configurar la funcionalidad de usuarios virtuales para el servicio vsftpd, eso ya ha sido tratado en el Manual para configurar un Servidor FTP con Vsftpd en openSUSE y no lo volveré a hacer acá, sino que simplemente se detallará la forma en que se deberá almacenar los datos de los usuarios virtuales en la base de datos MySQL y como deberá estar definido el método de autenticación PAM para el servicio vsftpd. Tampoco se abarca en este post la instalación y configuración de la base de datos MySQL y sus respectivas herramientas de administración (como phpMyAdmin, etc.).
Una vez que hayamos configurado el servicio vsftpd con la implementación de usuarios virtuales almacenados en la base de datos Berkeley, no será demasiado trabajoso modificar el esquema para que los usuarios virtuales sean almacenados en una base de datos MySQL.
CREATE DATABASE vsftpd DEFAULT CHARACTER SET utf8 COLLATE utf8_spanish_ci;
CREATE USER 'vsftpd'@'localhost' IDENTIFIED BY 'vsftpd';
GRANT USAGE ON *.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'vsftpd' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
GRANT ALL PRIVILEGES ON vsftpd.* TO vsftpd@localhost WITH GRANT OPTION;
CREATE TABLE IF NOT EXISTS `usuarios` (
`numero` int(11) NOT NULL AUTO_INCREMENT,
`usuario` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`numero`),
UNIQUE KEY `usuario` (`usuario`)
) ENGINE=MyISAM AUTO_INCREMENT=1;
INSERT INTO usuarios (usuario, password) VALUES('login_usuario', PASSWORD('contraseña_en_texto_plano'));
Donde en reemplazo a la palabra login_usuario irá el nombre del usuario virtual y en reemplazo de la palabra contraseña_en_texto_plano la contraseña de ese usuario virtual, la función PASSWORD de MySQL convertirá la contraseña de texto plano a un código hash que ocultará la contraseña original en la tabla.
auth required pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=vsftpd host=127.0.0.1 db=vsftpd table=usuarios usercolumn=usuario passwdcolumn=password crypt=2
Como se puede ver los pasos necesarios no son tantos, sin embargo, me pareció importante documentarlos para complementar la información acerca del servicio vsftpd que ya tenía en esta bitácora.
GK.
Comentarios recientes