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.
1 2 | sudo apt-get install apache2 sudo apt-get install mysql-server mysql-common |
Lo primero de todo vamos a instalar los programas necesarios:
1 | sudo apt-get install proftpd-basic proftpd-mod-mysql |
Y para administrar MySQL vía interfaz web, usaremos phpmyadmin
1 | 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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:
1 | /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
1 | sudo nano /etc/proftpd/proftpd.conf |
Modifimos el parámetro DefaulRoot, para que sea el del usuario conectado:
1 | DefaultRoot ~ |
Al final del archivo añadimos las siguientes líneas:
1 2 3 | Include /etc/proftpd/sql.conf RequireValidShell off |
De ésta manera añadimos el archivo sql.conf
Creamos y editamos sql.conf
1 | sudo nano /etc/proftpd/sql.conf |
En la siguiente plantilla debemos modificar los parámetros genéricos por los nuestros:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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.
1 | sudo nano /etc/proftpd/modules.conf |
Y añadimos:
1 2 | LoadModule mod_sql.c LoadModule mod_sql_mysql.c |
Con esto sólo nos falta reiniciar el servicio:
1 | sudo service proftpd restart |
Espero que haya sido interesante.
Fuentes: DigitalOcean.com
Derechos de la imagen principal, aquí.