BSDes
ezine 1
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
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).
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
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...
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, ;)
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