Cómo instalar Proftpd con soporte MySQL

Warehouse-Loading-Dock

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. sudo apt-get install apache2
  2. 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

proftpd-mysql-1

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.

proftpd-mysql-2

Una vez dentro nos dirigimos a la opción «Privilegios«

proftpd-mysql-3

Y en la parte inferior seleccionamos «Agregar nuevo usuario«

proftpd-mysql-4

Crearemos nuevo usuario, por ejemplo «ftpd«, y creamos una contraseña.

proftpd-mysql-5

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í.

proftpd-mysql-6

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. CREATE TABLE IF NOT EXISTS `ftpgroup` (
  2.   `groupname` VARCHAR(16) COLLATE utf8_general_ci NOT NULL,
  3.   `gid` SMALLINT(6) NOT NULL DEFAULT '5500',
  4.   `members` VARCHAR(16) COLLATE utf8_general_ci NOT NULL,
  5.   KEY `groupname` (`groupname`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci COMMENT='ProFTP group table';
  7.  
  8. CREATE TABLE IF NOT EXISTS `ftpuser` (
  9.   `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  10.   `userid` VARCHAR(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  11.   `passwd` VARCHAR(32) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  12.   `uid` SMALLINT(6) NOT NULL DEFAULT '5500',
  13.   `gid` SMALLINT(6) NOT NULL DEFAULT '5500',
  14.   `homedir` VARCHAR(255) COLLATE utf8_general_ci NOT NULL DEFAULT '',
  15.   `shell` VARCHAR(16) COLLATE utf8_general_ci NOT NULL DEFAULT '/sbin/nologin',
  16.   `count` INT(11) NOT NULL DEFAULT '0',
  17.   `accessed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  18.   `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  19.   PRIMARY KEY (`id`),
  20.   UNIQUE KEY `userid` (`userid`)
  21. ) 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«

proftpd-mysql-7

Aquí debemos de crear los usuario e indicar la ubicación de las carpetas a las que tendrán acceso.

proftpd-mysql-8

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:

proftpd-mysql-shell

Copias el código que nos devuelto comando en la casilla.

proftpd-mysql-9

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. Include /etc/proftpd/sql.conf
  2.  
  3. 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. SQLBackend        mysql
  2.  
  3. #Passwords in MySQL are encrypted using CRYPT
  4. SQLAuthTypes            OpenSSL Crypt
  5. SQLAuthenticate         users groups
  6.  
  7.  
  8. # used to connect to the database
  9. # databasename@host database_user user_password
  10. SQLConnectInfo  mysql_database@localhost mysql_user mysql_password
  11.  
  12.  
  13. # Here we tell ProFTPd the names of the database columns in the "usertable"
  14. # we want it to interact with. Match the names with those in the db
  15. SQLUserInfo     ftpuser userid passwd uid gid homedir shell
  16.  
  17. # Here we tell ProFTPd the names of the database columns in the "grouptable"
  18. # we want it to interact with. Again the names match with those in the db
  19. SQLGroupInfo    ftpgroup groupname gid members
  20.  
  21. # set min UID and GID - otherwise these are 999 each
  22. SQLMinID        500
  23.  
  24. # Update count every time user logs in
  25. SQLLog PASS updatecount
  26. SQLNamedQuery updatecount UPDATE "count=count+1, accessed=now() WHERE userid='%u'" ftpuser
  27.  
  28. # Update modified everytime user uploads or deletes a file
  29. SQLLog  STOR,DELE modified
  30. SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser
  31.  
  32. 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. LoadModule mod_sql.c
  2. 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í.