Pure-FTPD como servidor FTP con usuarios virtuales en OpenBSD 3.2Artículo publicado originalmente en la página de
"El Demonio" en agosto del 2003
En este artículo trata de cómo instalar y configurar el servidor de ftp Pure-FTPD con usuarios virtuales en una OpenBSD 3.2. ¿Por qué Pure-FTPD y no otro? Pues... porque es el que conozco, el que tengo instalado y con el que me tuve que pelear, ni más ni menos.
La confección del artículo está pensada con OpenBSD 3.2 en mente, que es lo que tengo instalado, pero debería funcionar con otras versiones sin dificultad e incluso con otros sistemas operativos sin necesidad de mucha adaptación.
Para la confección del mismo he utilizado la documentación oficial disponible (ver links al final del documento) y la experiencia propia.
Compilación e instalaciónPodemos encontrar el port del Pure-FTPD en
/usr/ports/net/pure-ftpd. Si no está ahí, quizás tienes los ports poco (¡o nada!) actualizados, o simplemente no los tienes. De todos modos, aquí sólo se va a tratar la instalación/configuración del Pure-FTPD, así que una vez que tengas una versión actualizada o que al menos tenga el Pure-FTPD, haz:
politvs# cd /usr/ports/net/pure-ftpdComo queremos activar el soporte para usuarios virtuales, mensajes en castellano, y otras funcionalidades, tendremos que editar el archivo
Makefile con nuestro editor favorito (el
vi, claro :)), comentar la línea ya existente de
CONFIGURE_FLAGS+= ... (ojo, seguramente estará partida con una barra como esta "\", así que comenta las dos líneas si no quieres que te de un error...) y añade esta por ejemplo:
CONFIGURE_ARGS+= --without-inetd --without-paranoidmsg --with-puredb \ --with-language=spanish --without-bannerExplico un poco los flags utilizados:
--without-inetd => No utilizo inetd, así así que yo lo voy a desactivar
--with-paranoidmsg => Se le mostrará siempre el mismo mensaje de error (en caso de que lo haya, claro) al usuario independientemente de cuál haya sido el error que lo haya provocado. Quizás no es muy útil a la hora de depurar errores de configuración, pero sí es útil por motivos de seguridad.
--with-puredb => Habilitamos usuarios virtuales
--with-language=spanish => Lenguaje castellano en los mensajes del servidor
--without-banner => No imprime banner de saludo <= Esta opción la hay como flavor
Otros flags que alguna gente podrá encontrar interesantes:
--with-nonroot => Permite que otros usuarios que no sean root ejecuten el servidor (con algunas limitaciones)
--with-quotas,
--with-ratios => Activa cuotas de uso de disco, ratios de descarga...
--with-ftpwho => Soporte para el comando
pure-ftpwho (nos da información sobre usuarios conectados, qué descargan, etc). Necesita algo más de memoria, y al parecer pueden enlentecer cuando se utilizar Pure-FTPD con inetd.
Haciendo:
politvs# ./configure --helpdesde el directorio en donde están descomprimidos los fuentes (alguno que cuelgue de
/usr/ports/net/pure-ftpd pero eso ya depende de la versión) podrás obtener todos los flags posibles que puedes utilizar, y sino consulta la página web oficial (casi todo lo que pongo aquí está extraído de allí), en donde hay varios "readmes".
En resumen: añade la línea
CONFIGURE_FLAGS+= ... en el Makefile con los flags que quieras ;)
Ahora sólo queda hacer:
politvs# make install clean clean-dependsY si no hay problemas y después de un rato compilando, deberíamos tener ya el Pure-FTPD instalado.
Usuarios virtualesUno de los puntos que me gustan del Pure-FTPD es la posibilidad de trabajar con usuarios virtuales. Para ello hay que realizar algunos pasos previos. En primer lugar, añadiremos un grupo y un usuario al sistema:
politvs# groupadd -g 6000 ftpgroup
politvs# useradd -g ftpgroup -u 6000 -d /dev/null -s /etc ftpuserEsto no es estrictamente necesario (se pueden utilizar usuarios y grupos ya existentes), pero pienso que queda más claro y es lo que recomiendan en el "readme" de usuarios virtuales de la propia página web del programa. Ojo, hay que tener cuidado de que no exista ese usuario/grupo/uid/gid, ya que podría darnos problemas.
Seguramente te extrañará que el shell utilizado sea
/etc; francamente a mi también :) pero es como dice el "readme" que hay que hacerlo. Para ello, es casi seguro que tengas que añadir la línea
/etc en el archivo
/etc/shells ya que seguramente no la tendrás. Hay otra posibilidad, más clara pero que no he probado, que es la de añadir
/sbin/nologin (creo que ese es el path) en
/etc/shells y utilizar éste como shell del usuario ftpuser; supongo que funcionará igual, ya que se trata simplemente de tener una shell falsa.
Procedemos ahora a añadir el primero de nuestros usuarios virtuales. De forma rápida sería algo así:
pure-pw useradd nombre-de-usuario-virtual -u nombre-real-del-usuario -g grupo-real-del-usuario -d /ruta/del/home/virtualEs decir: si queremos añadir un usuario virtual pepe con el grupo y usuarios de sistema creados unas líneas atrás, y que tenga como home el directorio
/mnt/ftp, tendremos que hacer:
politvs# pure-pw useradd pepe -u ftpuser -g ftpgroup -d /mnt/ftpNos preguntará la contraseña dos veces por motivos de seguridad.
A la hora de crear usuarios tenemos muchas otras opciones, como encerrarlo en su directorio, permitir que se conecte desde una dirección ip determinada... pero esto es solo un breve tutorial así que no me meteré a fondo con esto (tampoco podría porque no he hecho pruebas en este sentido).
Para modificar datos de usuarios ya creados tenemos el comando
pure-pw usermod. Por ejemplo, si quisiéramos que pepe tenga una cuota de 1000 archivos y 10Mb, tendríamos que hacer algo así:
politvs# pure-pw usermod pepe -n 1000 -N 10Pero no lo he probado, así que inténtalo tú mismo y luego dime si funciona, da problemas, o qué pasa.
Para borrar al usuario pepe:
politvs# pure-pw userdel pepeOjo, el home no se borra, tendrás que hacerlo a mano si quieres.
Cambiar la contraseña sería algo como esto:
politvs# pure-pw passwd pepeDe nuevo nos la preguntará dos veces.
Si lo que queremos es ver información sobre el usuario pepe:
politvs# pure-pw show pepeEn todos estos ejemplos están dando por sentado que estamos trabajando con la base de datos de usuarios creada por defecto por el Pure-FTPD, que es
/etc/pureftpd.passwd. Podemos editar la información directamente en ese archivo, puesto que es texto plano (no recomendable). Sin embargo, hay que transformar esa información en un archivo binario con el que el Pure-FTPD pueda trabajar, y eso lo hacemos así:
politvs# pure-pw mkdbLo cual creará el archivo
/etc/pureftpd.pdb (siempre que sigamos trabajando con la los parámetros por defecto). Hablando claro, viene a ser como una compilación. Cada vez que haya un cambio en el archivo
.passwd, hay que "recompilarlo" para que el Pure-FTPD pueda usarlo.
Una opción interesante cuando añadimos usuarios, o cambiamos sus datos/contraseñas, es el modificador
-m, que hace que, inmediatamente después de la acción, se reconstruya el archivo binario de información:
politvs# pure-pw passwd pepe -m
politvs# pure-pw userdel pepe -mDe esta forma ya no será necesario hacer
pure-pw mkdb.
Iniciar el servidor
Bueno, llegó la hora de ver si todo esto funciona, así que activemos el servidor. En mi caso lo haré tal que así:
politvs# /usr/local/sbin/pure-ftpd -4 -B -j -lpuredb:/etc/pureftpd.pdb -lunix -c 2 -C 2 -A¡Y ya deberíamos poder conectarnos! Explicaré un poco los flags utilizados:
-4 => Activa IPv4.
-B => Inicia el servidor como demonio.
-j => Crea los homes al entrar por primera vez si no existían con anterioridad.
-lpuredb:/etc/pureftpd.pdb => Activa los usuarios virtuales y leerá la información del archivo
/etc/pureftpd.pdb-lunix => Si la validación como usuario virtual no funcionó, la intentará como usuario de sistema.
-c 2 => Permite sólo dos clientes simultáneos como máximo.
-C 2 => Permite sólo dos conexiones simultáneas por IP.
-A => Los usuarios no pueden descender más allá de su home.
-I 15 => Timeout a los 15 minutos.
También hay otras posibilidades interesantes:
-S 42 => Conecta al puerto 42 en lugar de al 21 (que es el habitual por defecto)
-f none => Desactiva logs
-E => Prohibe clientes anónimos
-w => Soporte FXP para usuarios autenticados (¡¡ojo, que FXP es un protocolo inseguro!!)
Para más información sobre estos y para saber qué otros están disponibles, échale un ojo a la página man:
politvs# man pure-ftpdMerecen especial atención los parámetros
-lpuredb:/etc/pureftpd.pdb -lunix. En ese orden, intentará primero validarse como usuario virtual y luego como usuario del sistema. Sería cuestión de probar qué pasaría si tenemos un usuario con el mismo nombre en el sistema y en el Pure-FTPD y el orden de los parámetros es el contrario. Quizás ya no se pueda añadir como usuario virtual... Si alguien lo prueba, por favor que nos cuente qué pasa.
Usuarios anónimos (probar)
En teoría (ésto no lo he probado), si existe un usuario ftp y tiene su propio home, Pure-FTPD aceptará conexiones anónimas como anonymous o como ftp los archivos compartidos deberán estar en el directorio home del usuario. No es necesario hacer
chown a esos archivos, sólo a los directorios en los que se quiera que pueda escribir.
BannersEn el caso de existir un archivo
.banner en el directorio home del usuario o del servidor virtual, se imprimirá cuando un usuario se conecte a modo de mensaje de bienvenida. Este archivo no debe superar los 4000 bytes o no se mostrará.
También puede haber en cada directorio un archivo
.message que será mostrado cuando un cliente entre en el directorio.
Inicio de Pure-FTPD cada vez que iniciemos el ordenadorPues sólo sería añadir algo como:
# Pure-FTPD
if [ -f /usr/local/sbin/pure-ftpd ]; then
echo -n ' Pure-FTPD'
/usr/local/sbin/pure-ftpd -4 -B -j -lpuredb:/etc/pureftpd.pdb -lunix -c 2 -C 2 -A
fi... en nuestro
/etc/rc.local. Podríamos refinarlo un poco más, pero así nos sirve.
LogsQuizás queramos cambiar el archivo de log o la información que en él se va a mostrar. Por defecto el Pure-FTPD lo hace a través del
syslog la configuración de este demonio la podemos cambiar a través del archivo
/etc/syslog.conf, así editamos este archivo con nuestro editor favorito (de nuevo
vi). Habrá ya una línea para
ftp de este estilo:
ftp.info /var/log/xferlogpero yo creo que es más claro loguear a otro archivo y que se incluya en este toda la información disponible, así que cambiaremos esta línea por esta otra:
ftp.* /var/log/ftpy luego sólo nos quedará reiniciar. Esta opción queda a gusto del consumidor.
Links y agradecimientosPágina oficial de Pure-FTPDDocumentación oficialMe gustaría aprovechar y agradecer la existencia de la página de
"El Demonio" por dar cabida a este humilde documento y facilitarnos la vida con sus documentos. Eternamente agradecido.
DespedidaY creo que eso es todo. Espero que este documento os haya servidor de algo.