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

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
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«

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