You are on page 1of 12

Servidor ftp validado en MySql

Servidor ftp validado en MySql .

........................net..................2...................................... Configurando proftpd ............................. Ejemplo de configuracion .....8 iii ...2..................1 1....1 1...................................................................................... Compilando el servidor FTP ............................................................................................................................................ Configurando el servidor MySql..........................................1................................................................................................3....................................4................................1 1................................4.........................3 2.......................................4 2.....................................................1 2........................1........Table of Contents 1........... script sql para crear la base de datos............................ ¿ Que es lo que queremos hacer ? ......................6.........................1 1............. Copyleft 2003 debianitas.............................................3 2..................... ¿ Que es eso de ftp ?..................... Enlaces relaccionados ................................................................................................. Compilando Proftpd ............. Previos..............................................................................................................................................8 2..................................5......... ...3... ¿ Que servidores vamos a utilizar y porque ? ..............................................3 2....................6 2..........

net ) 1. 1 . www.1. contra un servidor. es decir. siempre de forma teorica. se da por echo que la persona que desea realizar este tipo de instalacion tiene los conocimientos basicos necesarios tanto sobre el protocolo en si.net Este documento ha sido desarrollado por Jose Pedro Andres ( macklus@debianitas. En la practica tendremos siempre 2 "implementaciones" de FTP. de forma sencilla y comoda. El autor no se hace responsable de los daños producidos por la utilización de la informacion del documento. y por ser una solucion tan comoda como potente para sistemas gestores de bases de datos. si ves algun error. Nos permite enviar/recibir ficheros por internet ( o por cualquier red ). o protocolo de transferencia de ficheros. escribeme. Este documento esta siempre en revision. Se caracteriza por su dedicacion hacia la seguridad. Mysql: Este es un servidor de bases de datos caracterizado por su rapidez ( esta optimizado para el uso en internet ). es tal vez la mejor opcion en la actualida para montar un servidor FTP sin demasiadas complicaciones.Chapter 1. modificar o distribuir este manual bajo las condiciones de la licencia GNU General Public License ( GNU GPL ) Si se desea hacer una copia total o parcial del documento se deberá adjuntar debidamente la identidad del autor asi como la dirección www. Hemos de tener en cuenta que FTP solo es un protocolo. Copyleft 2003 debianitas. 1. un cliente y un servidor. sino que consideraremos que el lector esta suficientemente preparado como para montarlo el solito.net en las partes superior e inferior del manual. • NOTA: En este documento no vamos a ver como instalar una base de datos MySql. Pese a la breve introduccion. ¿ Que es eso de ftp ? FTP son las siglas de File Transfer Protocol.2.net Copyleft 2003 Jose Pedro Andres ( macklus@debianitas. es posible que en breve documente este tema con mas calma.3. ¿ Que servidores vamos a utilizar y porque ? Para este articulo vamos a utilizar los siguientes servidores: • Proftpd: Este servidor es uno de los mas extendidos para unix/linux en internet. como sobre la arquitectura cliente/servidor mas sencilla.net ) Se puede copiar . de tal forma que realizaremos las conexiones desde un cliente. Previos 1. En cualquier caso. tienes algun consejo o quieres darnos tu opinion. define la forma/manera en que se debe realizar esta transferencia.debianitas. por su facilidad de configuracion . actualmente.debianitas. En este documento vamos a explicar como instalar un servidor FTP que se autentifique contra un servidor de bases de datos.

txt RFC del protocolo FTP ( en castellano ) : http://www.4.org/getfile.org/ 2 .org Documentacion de proftpd en español ( cortesia del grupo galpon ) : http://es.mysql.org/in-notes/rfc959.net Servidor MySql : http://www.proftpd. Enlaces relaccionados RFC del protocolo FTP : ftp://ftp. Previos 1.Chapter 1.proftpd.rfc-editor.php?rfc=0959 Servidor Proftpd : http://www.rfc-es.

podemos mantener nuestra base de datos ( altas / bajas de usuarios ) de forma comoda ( desde la consola. tenemos todos los datos centralizados. sino que para sitios grandes.8 --with-modules=mod_sql:mod_sql_mysql --with-includes=/opt/mysql/include/mysql/ --with-libraries=/opt/mysql/lib/mysql/ 3 .org/distrib/source/proftpd-1. no solo es muy comodo y relativamente sencillo de instalar. De esta forma.bz2 Lo descomprimimos en el directorio actual. con gran numero de usuarios. Compilando el servidor FTP Antes de empezar a compilar./configure --prefix=/opt/proftpd-1.8 --exec-prefix=/opt/proftpd-1.8 Entramos al directorio con los fuentes del servidor ftp • . ¿ Que es lo que queremos hacer ? Lo que se pretende con este documento es instalar un servidor ftp que guarde todos los usuarios y password ( amen de otros datos que ya se veran ) en una base de datos.2.1.2. a aplicaciones web muy sencillas.bz2 Descargamos el archivo. • tar xvjf proftpd-1. A lo largo de este articulo seguire esta politica. en su ultima version estable. siguiendo los siguientes pasos: • cd /usr/src Nos situamos en el directorio donde vamos a trabajar • wget ftp://ftp. es importante que sepamos lo que vamos a hacer.8. gracias a la base de datos no necesitamos crear usuarios de sistema ( con el posible riesgo que ello conlleva ). Como se ha dicho. En primer lugar. bien en sistemas estilo LDAP ). conseguimos que cada vez que un usuario intente hacer login contra nuestro servidor. cambiar el enlace y reiniciar.Chapter 2.2. y los enlazo con un enlaze situado /opt/nombre.proftpd. de forma que si tu no usas la misma.8.tar.2. • cd proftpd-1. 2. vamos a compilar el servidor proftpd. es casi la unica opcion viable. y en caso de que exista se valide su password. se compruebe en la base de datos si existe.tar.2. pasar de una version a otra es tan simple como parar el servidor.2. en mi caso yo instalo todos los servidores bajo el directorio /opt/nombre-version . Hoy en dia mantener este tipo de datos centralizado ( bien en una base de datos. Compilando Proftpd 2. Ademas. De esta forma. deberas adaptar las lineas de ./configure.

Damos por echo que ya tenemos un servidor mysql instalado y funcionando.8 tendremos la estructura de nuestro servidor ftp. Es importante tener en cuenta los siguientes puntos: • Deberemos crear un script de arranque en /etc/init. En principio basta con que ejecutes el binario proftpd situado en el subdirectorio sbin.’ or ’\h’ for help.2. Durante este proceso es muy importante que estemos atentos a posibles errores . 1 row affected (0. De esta forma en el caso de que otra persona sea la que tenga que administrar estos datos. en nuestro directorio /opt/proftpd-1. no tendra acceso mas que a aquellas partes necesarias. Query OK. Si esto te falla.55 Type ’help.d para que nuestro servidor arranque al iniciar el sistema. o a usar alguno de los scripts de arranque de tu distribucion favorita. or \g.23. Your MySQL connection id is 8 to server version: 3. y crearemos un usuario que tenga el control de dicha base de datos. • 2. revisa el error.00 sec) 4 . y si lo deseas. • make install Los instalamos en los directorios que hemos escojido en el . si tienes alguna herramienta distinta. usala !. El error mas comun es que no pueda encontrar las librerias de mysql. Utilizamos l script configure para indicar que queremos instalar todo el servidor a partir del directorio /opt/proftpd ( opciones --prefix y --exec-prefix./configure Tras esto.d. Commands end with . prueba a utilizar el q yo utilizo. Todo el proceso lo realizaremos a traves de la consola de mysql. tu servidor no arrancara hasta que no lo enlaces desde los subdirectorios de los runlevel adecuados. Type ’\c’ to clear the buffer. Por mucho que crees el script en /etc/init. Revisa la documentacion de tu distribucion para asegurarte de hacer bien este proceso. mandamelo para añadirelo a este documento. Compilando Proftpd Con esta instruccion preparamos la compilacion de nuestro server. Configurando el servidor MySql En esta seccion vamos a ver la configuracion que hemos de utilizar en nuestro servidor mysql para poder autentificar nuestro servidor ftp.Chapter 2. macklus@maki:~$ /opt/mysql/bin/mysql -u root -p Enter password: Welcome to the MySQL monitor.3. ver mas arriba ) • make Compilamos los binarios de nuestro servidor. mysql> create database ftpdata. Si quieres optimizarlo mas. En primer lugar crearemos una nueva base de datos. ya que de no compilarse bien no conseguiremos nada.

+----------+ | Database | +----------+ | ftpdata | | mysql | | test | | vpopmail | +----------+ 4 rows in set (0.Chapter 2. Aqui creamos la base de datos que vamos a utilizar para mantener los datos de nuestro servidor ftp. Este comando nos mostrara las bases de datos que tenemos en el sistema.00 sec) mysql> GRANT ALL ON ftpdata. Query OK. que se llamara ftpdata • show databases.* TO ftpuserlist@localhost IDENTIFIED BY "ftpuser". de forma que podremos asegurarnos de que realmente existe . Reading table information for completion of table and column names You can turn off th Database changed mysql> SELECT * FROM user WHERE user="ftpuserlist".) 5 . a continuacion vamos a ver una a una las sentencias que he empleado: • create database ftpdata. +-----------+-------------+------------------+-------------+-------------+-----------| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | +-----------+-------------+------------------+-------------+-------------+-----------| localhost | ftpuserlist | 40ca4f0b09893903 | N | N | N | N | N | N | N | N | N | N | N | N | N | N | +-----------+-------------+------------------+-------------+-------------+-----------1 row in set (0.03 sec) En el screen anterior se ve el resultado. 0 rows affected (0.00 sec) mysql> SELECT * FROM db WHERE user="ftpuserlist".00 sec) mysql> use mysql. Compilando Proftpd mysql> show databases. +-----------+---------+-------------+-------------+-------------+-------------+------| Host | Db | User | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv | Index_priv | Alter_priv | +-----------+---------+-------------+-------------+-------------+-------------+------| localhost | ftpdata | ftpuserlist | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | +-----------+---------+-------------+-------------+-------------+-------------+------1 row in set (0.

En la documentacion oficial de proftpd no he podido encontrar un archivo con los datos necesarios para crear las tablas directamente. • SELECT * FROM user WHERE user="ftpuserlist".1000. En nuestro caso hemos usado la orden INSERT INTO usertable VALUES (’usuario’. Es importante que este usuario no sea un usuario real del sistema. Mas adelante explicaremos este punto. Para terminar con nuestra base de datos.password=’secreto’. el ultimo paso es configurar adecuadamente nuestro servidor ftp. El siguiente paso es intentar conectarnos desde el cliente mysql para asegurarnos de que se realiza el login de forma correcta. Aqui nos aparecera una linea con el usuario que hemos creado. y si tras escribir la contraseña que le hemos puesto conecta. para indicar si el usuario puede o no iniciar una sesion ftp en el sistema. es importante asegurarnos de que no dispone de ningun permiso en esta tabla. Tras crear los cambios. El uso del comando grant nos asegura que en el caso de que ese usuario no exista sera creado. Si ya tenemos nuestra base de datos lista para trabajar. En la linea que aqui nos va a aparecer. Hay que tener en cuenta que en la configuracion que yo utilizo le añado un campo a la tabla de usuarios. todo ira como deberia. vamos a crear un usuario de prueba. tendra el password ftpuser. llamado valida. Con esta orden. Compilando Proftpd • GRANT ALL ON ftpdata. • SELECT * FROM db WHERE user="ftpuserlist". para ello vamos a seleccionar la base de datos mysql. • use mysql. asi que lo he creado yo mismo. el siguiente paso es crear las tablas que usara el servidor.’/home/mack’. tendremos un usuario ( ftpuserlist ).Chapter 2.1000.0). debemos asegurarnos de que si tiene todos los permisos.* TO ftpuserlist@localhost IDENTIFIED BY "ftpuser". para ello usaremos el comando mysql -u ftpuserlist --database=ftpdata --host=localhost -p .’/bin/bash’. para evitar posibles confusiones. que se podra conectar a la base de datos ftpdata con todos los permisos. siempre que conectemos desde el localhost. ya que los permisos se los daremos en la tabla db. vamos a darle todos los permisos al usuario ftpuserlist. Una vez que podemos conectar con nuestro usuario. que deberemos usar a la hora de conectarnos. Tras esto. ya que los permisos de esta tabla solamente se aplicaran en la base de datos expecificada. dentro de la base de datos ftpdata. ademas. y esta disponible al final de este documento. 6 . vamos a asegurarnos de que se ha creado bien.

bastaran las siguientes directivas: • SQLAuthTypes Backend Le indica que las contraseñas de nuestros usuarios seran encriptadas usando metodos propios de ese servidor. • SQLConnectInfo ftpdata@localhost ftpuserlist ftpuser Le damos los datos necesarios para conectar con nuestro servidor MySql. • SQLUserInfo usertable userid passwd uid gid homedir shell valida Esta opcion es vital. • SQLUserWhereClause "valida = 0" 7 . y despues el de todos los campos que tiene dicha tabla. Compilando Proftpd 2.4.Chapter 2. • SQLMinUserUID 5000 Fijamos el UID minimo que ha de tener nuestro usuario para poder iniciar sesion. puedes acceder a la documentacion existente. Si deseas mas informacion sobre la configuracion de este servidor. • SQLAuthenticate users* le indicamos que unicamente queremos validar a nuestros usuarios mediante mysql. Configurando proftpd El proceso de configuracion de proftpd no es complicado. En primer lugar indicaremos el nombre de la tabla en si. Para que nuestro servidor pueda trabajar con la base de datos que tenemos. debemos indicar la estructura de nuestra tabla de usuarios en nuestra base de datos. En nuestro caso concreto. En este caso concreto vamos a ver unicamente los parametros de configuracion concretos para nuestra configuracion. • SQLDefaultGID 65534 Indicamos el GID por defecto para nuestros usuarios • SQLDefaultUID 65534 Indicamos el UID por defecto para nuestros usuarios • SQLMinUserGID 500 Fijamos el GID minimo que ha de tener nuestro usuario para poder iniciar sesion. usaremos el metodo password que mysql implementa para codificar nuestras contraseñas.

passwd char(100) NOT NULL default ”. 2. It assumes that you have a user/group # "nobody" and "ftp" for normal operation and anon.conf’ for actual use. --. En este caso. añadimos la condicion de que el valos del campo valida ha de ser 0 para que el usuario pueda iniciar sesion.6. shell char(20) default NULL. En el caso de que este valor sea 1. -.Chapter 2.MySQL dump 8. ServerName "ProFTPD Default Installation" ServerType standalone DefaultServer on # Port 21 is the standard FTP port.Host: localhost Database: ftpdata ---------------------------------------------------------. gid smallint(6) NOT NULL default ’0’. script sql para crear la base de datos. podremos realizar sin problema la autentificacion de nuestros usuarios contra nuestra base de datos mysql.Server version 3. members longtext ) TYPE=MyISAM.55 --.Table structure for table ’grouptable’ -CREATE TABLE grouptable ( groupname varchar(20) NOT NULL default ”. 8 . Ejemplo de configuracion # This is a basic ProFTPD configuration file (rename it to # ’proftpd. Con estos parametros. valida tinyint(4) default ’0’ ) TYPE=MyISAM. homedir char(50) default NULL. 2. uid smallint(6) default NULL.Table structure for table ’usertable’ -CREATE TABLE usertable ( userid char(12) NOT NULL default ”. Compilando Proftpd Aqui añadimos un parametro mas a la sentencia SELECT que determina si el usuario puede o no iniciar sesion. It establishes a single server # and a single anonymous login.23. gid smallint(6) default NULL.5.22 --. el acceso sera automaticamente denegado.

If you need to allow more than 30 concurrent connections # at once. siempre se puede perfeccionar la configuracion aun mas. simply increase this value..message # Limit WRITE everywhere in the anonymous chroot <Limit WRITE> DenyAll </Limit> </Anonymous> En este ejemplo vemos las directivas necesarias para configurar nuestro Proftpd-MySql . 9 . we want files to be overwriteable. and ’. Umask 022 # To prevent DoS attacks. #DefaultRoot ~ # Sentencias SQL SQLAuthTypes Backend SQLAuthenticate users* SQLConnectInfo ftpdata@localhost ftpuserlist ftpuser SQLDefaultGID 65534 SQLDefaultUID 65534 SQLMinUserGID 500 SQLMinUserUID 5000 SQLUserInfo usertable userid passwd uid gid homedir shell valida SQLUserWhereClause "valida = 0" # Normally. pero esa es otra historia.Chapter 2. in inetd mode you should use an inetd server # that allows you to limit maximum number of processes per service # (such as xinetd). Note that this ONLY works # in standalone mode. DisplayLogin welcome. no upload directories. <Directory /> AllowOverwrite on </Directory> # A basic anonymous configuration. uncomment this line. Por supuesto. <Anonymous ~ftp> User ftp Group ftp # We want clients to be able to login with "anonymous" as well as "ftp" UserAlias anonymous ftp # Limit the maximum number of anonymous logins MaxClients 10 # We want ’welcome.. Compilando Proftpd Port 21 # Umask 022 is a good standard umask to prevent new dirs and files # from being group and world writable. y debera ser contada en otra ocasion.msg’ displayed at login. If you do not # want anonymous users. User nobody Group nogroup # To cause every FTP user to be "jailed" (chrooted) into their home # directory. set the maximum number of child processes # to 30. simply delete this entire <Anonymous> section.message’ displayed # in each newly chdired directory. MaxInstances 30 # Set the user and group under which the server will run.msg DisplayFirstChdir .