Cómo instalar Proftpd con soporte MySQL
Aunque no es el método más seguro de transferencia de archivos, sftp sí lo es, la transferencia de archivos vía ftp es muy popular. Ya en su día explique cómo instalar el programa proftpd de manera básica. Hoy veremos cómo instalarlo y configurar con apoyo MySQL.
De ésta manera podremos administrar múltiples usuarios y ubilicaciones de manera sencilla. Utilizando proftpd, mysql y phpmyadmin.
Antes de empezar, instalaremos el servicio web Apache2 y MySQL.
sudo apt-get install apache2
sudo apt-get install mysql-server mysql-common
Lo primero de todo vamos a instalar los programas necesarios:
sudo apt-get install proftpd-basic proftpd-mod-mysql
Y para administrar MySQL vía interfaz web, usaremos phpmyadmin
sudo apt-get install phpmyadmin
Nos preguntará que servicio web queremos utilizar, nosotros escogeremos Apache2
A continuación nos pedirá usar la base de datos dbconfig-common, le diremos que sí.
El siguiente paso es escoger una contraseña.
Trabajando desde la web vía phpmyadmin
Ahora crearemos los usuarios y las ubicaciones de las carpetas FTP desde el entorno phpmyadmin, vía web.
Escribimos en nuestro navegador: http://nuestra.ip/phpmyadmin
Escribimos el usuario y la contraseña.
Una vez dentro nos dirigimos a la opción «Privilegios«
Y en la parte inferior seleccionamos «Agregar nuevo usuario«
Crearemos nuevo usuario, por ejemplo «ftpd«, y creamos una contraseña.
En la parte inferior, si descendemos, usando la barra lateral, nos preguntará si queremos vincular el usuario a una base de datos con el mismo nombre, le decimos que sí.
El resto de configuración la dejamos tal y como está, y aceptamos.
Ya tenemos creada la base de datos, ahora nos falta crear las tablas, para facilitarnos las cosas usaremos las siguientes órdenes SQL, que insertaremos en la parte superior.
CREATE TABLE IF NOT EXISTS `ftpgroup` (
`groupname` VARCHAR(16) COLLATE utf8_general_ci NOT NULL,
`gid` SMALLINT(6) NOT NULL DEFAULT '5500',
`members` VARCHAR(16) COLLATE utf8_general_ci NOT NULL,
KEY `groupname` (`groupname`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP group table';
CREATE TABLE IF NOT EXISTS `ftpuser` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`userid` VARCHAR(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
`passwd` VARCHAR(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
`uid` SMALLINT(6) NOT NULL DEFAULT '5500',
`gid` SMALLINT(6) NOT NULL DEFAULT '5500',
`homedir` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '',
`shell` VARCHAR(16) COLLATE utf8_general_ci NOT NULL DEFAULT '/sbin/nologin',
`count` INT(11) NOT NULL DEFAULT '0',
`accessed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `userid` (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP user table';
A continuación seleccionamos la base de datos y la tabla «ftpuser«.
Seleccionamos «Insertar«
Aquí debemos de crear los usuario e indicar la ubicación de las carpetas a las que tendrán acceso.
Si os dais cuenta no he rellenado la casilla de contraseña. Eso es debido a que las contraseñas introducidas directamente no van cifradas, para ello vamos crearlas desde la línea de comandos, utilizando el comando y parámetros siguientes:
/bin/echo "{md5}"`/bin/echo -n "contraseña" | openssl dgst -binary -md5 | openssl enc -base64`
Si no tenemos mucha idea de crear contraseñas o nos falta imaginación, podemos usar el programa pwgen, que ya hablé de él en su día.
Al ejecutar el comando nos devolerá un código, que es el tenemos que pegar en la casilla de contraseña.
En la siguiente imagen podéis ver una muestra de la utilización:
Copias el código que nos devuelto comando en la casilla.
Respecto a la ubicación de la carpeta FTP recuerda que nunca debe de ser una carpeta dentro de HOME, yo he usado MNT
Modificar archivo configuración proftpd
Editamos el archivo de configuración proftpd.conf
sudo nano /etc/proftpd/proftpd.conf
Modifimos el parámetro DefaulRoot, para que sea el del usuario conectado:
DefaultRoot ~
Al final del archivo añadimos las siguientes líneas:
Include /etc/proftpd/sql.conf
RequireValidShell off
De ésta manera añadimos el archivo sql.conf
Creamos y editamos sql.conf
sudo nano /etc/proftpd/sql.conf
En la siguiente plantilla debemos modificar los parámetros genéricos por los nuestros:
SQLBackend mysql
#Passwords in MySQL are encrypted using CRYPT
SQLAuthTypes OpenSSL Crypt
SQLAuthenticate users groups
# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo mysql_database@localhost mysql_user mysql_password
# Here we tell ProFTPd the names of the database columns in the "usertable"
# we want it to interact with. Match the names with those in the db
SQLUserInfo ftpuser userid passwd uid gid homedir shell
# Here we tell ProFTPd the names of the database columns in the "grouptable"
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftpgroup groupname gid members
# set min UID and GID - otherwise these are 999 each
SQLMinID 500
# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
SqlLogFile /var/log/proftpd/sql.log
Los parámetros a modificar son: mysql_database@localhost mysql_user mysql_passwpord
Ahora habilitamos el módulo MySQL en la configuración proftpd.
sudo nano /etc/proftpd/modules.conf
Y añadimos:
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
Con esto sólo nos falta reiniciar el servicio:
sudo service proftpd restart
Espero que haya sido interesante.
Fuentes: DigitalOcean.com
Derechos de la imagen principal, aquí.