BSDes

ezine 1

Programando para inetd

Juan J. Martínez (reidrac)enlace_articulo01


PostgreSQL: Instalación y primeros pasos

Borja López Río (Wu)enlace_articulo02


ProFTPD con MySQL

Oscar M. Lage (r0sk)enlace_articulo03


Confinando procesos con jail

Víctor Balada Díazenlace_articulo04


ProFTPD con MySQL


Oscar M. Lage

Septiembre de 2003

Este artículo describe como preparar un servidor ProFTPD para trabajar con MySQL en FreeBSD.

Oscar M. Lage (r0sk), con 24 años, trabaja como administrador de sistemas y programador de servicios en internet. Miembro y co-fundador de www.eslack.org y su lista de correo, Oscar ha participado en diferentes iniciativas alrededor de los sistemas BSD como HispaBSD, eldemonio.org o userbsd.org.

Contacto: r0sk@userlinux.net


(versión para imprimir: PDF - PS)

Tabla de contenidos

1. Qué es ProFTPD

ProFTPD nace con la necesidad de tener un servidor FTP configurable y seguro. Actualmente existen muy pocos servidores FTP ejecutándose bajo sistemas Unix (Unix-like). El más común de todos es el Wu-ftpd. Mientras que Wu-ftpd proporciona excelentes resultados y es un buen producto, es muy pobre en cuanto a seguridad (solamente con ver su historial de fallos nos podemos hacer una idea). Mucha gente, incluyendo desarrolladores de ProFTPD, han pasado parte de su tiempo corrigiendo errores e implementando nuevas características de Wu-ftpd. Desafortunadamente se necesitaría un completo rediseño de Wu-ftpd desde cero para poder arreglar todos los desaguisados de seguridad. De ahí nace ProFTPD. No es un fork basado en otro servidor, es un proyecto independiente. En la actualidad numerosos sitios conocidos (con un gran tráfico de datos) usa ProFTPD.

ProFTPD está portado a muchas plataformas, lo que hace que tenga un sabor adicional su elección como servidor FTP (AIX, BSD/OS, Cygwin, DG/UX, Digital Unix, FreeBSD, HP/UX, IRIX, Linux for IBM S/390, zSeries, Linux, Mac OS X, NetBSD, OpenBSD, SCO, Solaris, SunOS).

2. Instalación de MySQL

Existen multitud de documentos explicando de diferentes formas la instalación de MySQL, por lo que no me voy a extender en ésto, pero de todas formas explicaré muy brevemente los pasos del protocolo:

# portinstall -rv /usr/ports/databases/mysql323-server
# rehash
# mysqladmin -u root password nuevo_password

3. Instalación de ProFTPD con soporte MySQL

Este artículo está basado en FreeBSD, pero en cualquier Unix-like la configuración necesaria es homóloga. Lo primero es instalar ProFTPD con soporte MySQL. Para ello haremos lo siguiente:

# export WITH_MYSQL=TRUE && cd /usr/ports/ftp/proftpd/ && make install

Una vez ejecutado el comando anterior ya tendemos nuestro ProFTP preparado con soporte MySQL y listo para comenzar a configurar, así de sencillo y simple funciona FreeBSD. En Linux probablemente los pasos a seguir serían un pelín distintos, pero se salen del objetivo de este documento, aún así daré alguna pista... Alguien que alguna vez haya instalado algo en Linux sabrá que hay tres pasos mínimos para la instalación de un tarball:

# ./configure
# make
# make install

Bien, pues con un ./configure --help tendremos respuesta seguro para darle soporte MySQL al programa. Creo que es una pista más que considerable...

4. Configuración MySQL y ProFTPD

Queremos autentificarnos a través del MySQL, por lo que una de las primeras cosas que debemos hacer es pensar la base de datos y hacerla "realidad" :D. Nuestra base de datos (ftp_db) tendrá una sola tabla donde meteremos la información de cada usuario. La estructura de la misma sería algo así:

CREATE TABLE users (
  userid varchar(30) NOT NULL default '',
  passwd varchar(80) NOT NULL default '',
  uid int(11) default NULL,
  gid int(11) default NULL,
  homedir varchar(255) default NULL,
  shell varchar(255) default NULL,
  UNIQUE KEY uid (uid),
  UNIQUE KEY userid (userid)
) TYPE=MyISAM;

También es conveniente crear un usuario dentro de MySQL para que sea solamente ese usuario el único en hacer modificaciones y consultas:

   
# mysql -p
Enter password:

mysql> GRANT insert,select,update,delete,create,drop,alter
ON ftp_db.* TO usuario@localhost IDENTIFIED BY 'contrasenia';

Ahora que tenemos la base de datos lista tenemos que decirle al ProFTPD que tiene que autentificarse a través de ella y no ir a buscar usuarios del sistema como hace por defecto. Esto se logra con el archivo de configuración /usr/local/etc/proftpd.conf. Lo editamos con nuestro editor preferido cerciorándonos de que queda algo así:

#
# To have more informations about Proftpd configuration
# look at : http://www.proftpd.org/
#
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use.  It establishes a single server
# and a single anonymous login.  It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.

ServerName                      "Nuestro Mega Servidor FTP-MySQL"
ServerType                      standalone
DefaultServer                   on
DefaultRoot                     ~
RequireValidShell               off
AuthPAM                         on

#------------------------mysql Modul: 4.x
#
# Autentificacion por MySQL
#
SQLAuthTypes                    Plaintext
SQLAuthenticate                 users*
SQLConnectInfo                  ftp_db@localhost usuario contrasenia
SQLDefaultGID                   65534
SQLDefaultUID                   65534
SQLMinUserGID                   100
SQLMinUserUID                   500
SQLUserInfo                     users userid passwd uid gid homedir shell
#------------------------mysql

# Port 21 is the standard FTP port.
Port                            21

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask                           022

# To prevent DoS attacks, set the maximum number of child processes
# to 30.  If you need to allow more than 30 concurrent connections
# at once, simply increase this value.  Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances                    30

# Set the user and group under which the server will run.
User                            nobody
Group                           nogroup

# Normally, we want files to be overwriteable.

  AllowOverwrite                on

Creo que queda suficientemente claro lo que significa cada uno de los parámetros SQL, ;)

5. Iniciando el servicio

Todo está listo para comenzar a utilizar nuestro nuevo servidor FTP. Ahora solamente queda insertar registros en la base de datos (advertencia: el homedir debe existir y tener los permisos correctos).

Una vez rellenada la base de datos podemos iniciar el daemon ProFTPD:

# cd /usr/local/etc/rc.d/
# cp proftpd.sh.sample proftpd.sh
# /usr/local/etc/rc.d/proftpd.sh start

La próxima vez que iniciemos el ordenador ya se reiniciará automáticamente.

Y ésto es todo amigos, un saludo y a disfrutar de forma segura de vuestras transferencias de ficheros ;D