main

GNU/LinuxUncategorized

PROFTPD con autentificación en mysql

12 octubre, 2010 — by drmodding0

Ayer me encargaron un ftp y regularmente me toma minutos ya que es únicamente instalar vsftpd y listo pero decidí darle un pelin de variedad y recordando una platica de peda con mi amigocho RWZ decidí instalar proftpd con autentificación en mysql, se ya se que también es posible hacerlo con vsftpd pero decidí hacer el cambio completo.

Para que usar la autentificación con mysql??? para no tener que crear los usuarios sobre el sistema operativo. Únicamente sobre la base de datos y se crea una carpeta virtual ya con los permisos predefinidos.

La instalación la hice sobre un Ubuntu 10.04 y supongo que debería de funcionar también con la reciente 10.10
En el Internet hay varios manuales pero casi todos tenían fallas así que les pongo el mio que probé sobre Ubuntu.

Comandos iniciales:
sudo apt-get install proftpd proftpd-mod-mysql mysql-server

Cuando instalen el Mysql les va a pedir una contraseña, guárdenla la van a necesitar

sudo groupadd -g 3001 ftpgroup
sudo useradd -s /bin/false -d /bin/null -c «proftpd user» –uid 3001 -g ftpgroup ftpuser

Creación de la base de datos

mysqladmin -u root -p create proftpddb

Ahora necesitan crear el contenido de la bd con el siguiente archivo:

Descargar aqui

Basicamente seria descomprimirlo y ingresar el contenido a la bd:

tar xvfz proftpd_inicial.sql.tar.gz

mysql -u root -p proftpddb < proftpd.sql

Esto les creara la estructura inicial de la bae de datos y los permisos para el grupo usuario que crearon en sistema que seria ftpuser

ahora hay que crear el usuario inicial en la base de datos:

mysql -u root -p

Dentro de la consola del mysql hay que crear el usuario que usara el proftpd par acceder a la bd

use mysql;

INSERT INTO user (Host,User,Password) VALUES(‘127.0.0.1′,’proftpduser’,PASSWORD(‘Tu_contraseña_va_aqui‘));

darle permisos a ese usuario para usar la base de datos:

GRANT USAGE ON *.* TO Tu_usuario_con_acceso_a_la_bd@localhost IDENTIFIED BY ‘Tu_contraseña_va_aqui‘;

GRANT SELECT, INSERT, UPDATE, DELETE ON Nombre_basededatos.* TO ‘Tu_usuario_con_acceso_a_la_bd‘@’localhost’;

Ahora cambiamos de base de datos para crear los usuarios que van a acceder al ftp

use proftpddb;

INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (1, ‘tu.nombre.de.usuario.va.aqui’, PASSWORD(‘lacontraseña aqui’), 3001, 3001, ‘/var/proftp/firstuser’, ‘/sbin/nologin’, 0, », »);

otro usuario

INSERT INTO `ftpuser` (`id`, `userid`, `passwd`, `uid`, `gid`, `homedir`, `shell`, `count`, `accessed`, `modified`) VALUES (2, ‘tu.nombre.de.usuario2.va.aqui’, PASSWORD(‘lacontraseña2 aqui’), 3001, 3001, ‘/var/proftp/firstuser’, ‘/sbin/nologin’, 0, », »);

Ahora unicamente hay que decirle al proftpd que se autentifique con el mysql, ya inicialmente le instalamos el modulo de mysql ahora hay que descomentarlo y hay que entrar basicamente a 3 archivos (En Ubuntu son 3)

sudo nano /etc/proftpd/proftpd.conf

Ahi se modifican o se agregan las siguientes lineas:

RootLogin                       off
RequireValidShell         off
CreateHome                    on

En la ultima linea se agrega:

SQLLogFile /var/log/proftpd/sql.log

Esta linea los ayudara en caso de que alguna parte les haya fallado ya que les mostrara los errores del sql
Tambien como recomendacion descomenten la siguiente linea si no desean que los usuarios vean los archivos de otros usuarios:
DefaultRoot                     ~

Ahora el siguiente archivo es para activar los modulos del sql y del mysql:

sudo nano /etc/proftpd/modules.conf

Hay que descomentar para que queden estas 2 lineas sin el #

LoadModule mod_sql_mysql.c

LoadModule mod_sql.c

Despues en el siguiente archivo se le da la informacion al PROFTPD para que sepa la estructura el usuario, contraseña y datos del servidor:

sudo nano /etc/proftpd/sql.conf

Ahora, el contenido del archivo es el siguiente:

#
# Choose a SQL backend among MySQL or PostgreSQL.
# Both modules are loaded in default configuration, so you have to specify the backend
# or comment out the unused module in /etc/proftpd/modules.conf.
# Use ‘mysql’ or ‘postgres’ as possible values.
#
SQLBackend mysql
#
SQLEngine on
SQLAuthenticate on
#
# Use both a crypted or plaintext password
#SQLAuthTypes Crypt Plaintext
#
# Use a backend-crypted or a crypted password
SQLAuthTypes Backend Crypt
#
# Connection
SQLConnectInfo Nombre_basededatos@localhost Tu_usuario_con_acceso_a_la_bd Tu_contraseña_va_aqui
#
# Describes both users/groups tables
#
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
#