Cargando la página...

Usted está aquí:

Montando un servidor FTP con Pure-FTPd sobre Debian

Publicado por Sherekan el 05.11.2007 16:14:09 en GNU Linux - Nivel Básico

Avatar de Sherekan
Avatar de

Instalación y configuración de Pure-FTPd sobre Debian

Página 01 de 01 | Versión completa

Introducción

Bueno, hace poco instalé Pure-FTPd en mi Debian, escribo este tuto con el fin de evitarles algunos de los dolores de cabeza que yo me llevé... Espero les sea útil.

Pure-FTPd es un servidor FTP muy potente, liviano, fácil de instalar y configurar y por sobre todo, seguro. Es de libre distribución, existe para múltiples plataformas y en muchos idiomas.

En esta guía voy a explicar como instalarlo y configurarlo sobre Debian. Voy a explicar como aprovechar sus características más destacadas, por mencionar algunas:

* Directorios home enjaulados
* Usuarios virtuales
* Cuotas virtuales

Descargamos la última versión

Bueno, lo primero es descargarnos la última versión estable de http://www.pureftpd.org/, en este caso la 1.0.21.
La descargamos dentro de /usr/local/src porque somos personas organizadas. Y lo descomprimimos:

cd /usr/local/src
wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.21.tar.gz
tar xzvf pure-ftpd-1.0.21.tar.gz


Compilamos e instalamos el servidor

Entramos en el directorio descomprimido, y lo compilamos con los siguientes flags:

* --without-inetd: sin inetd (vamos a correr nuestro servidor como demonio aparte, en modo standalone, así que no necesitamos inetd)
* --with-puredb: soporte para usuarios virtuales
* --with-ratios: soporte para ratios de subida/bajada
* --with-quotas: soporte para cuotas
* --with-throttling: soporte para limitar ancho de banda
* --with-language=spanish: soporte para ponerlo nuestro idioma
* --with-paranoidmsg: sirve para que siempre se muestre el mismo mensaje de error (útil por motivos de seguridad)
* --with-nonroot: para que solo root pueda ejecutar el servidor
* --with-ftpwho: soporte para logs en tiempo real (usuarios conectados, etc.)

NOTA: recomiendo consultar todos los flags disponibles con ./configure --help. Ya que pueden variar según la versión que se instale.

cd /usr/local/src/pure-ftpd-1.0.21
./configure --without-inetd --with-puredb --with-ratios --with-quotas --with-throttling --with-language=spanish --with-paranoidmsg --with-nonroot --with-ftpwho
make
make install


Si no sale ningún error en la compilación, es porque son muy capaces y lo instalaron correctamente.

Configurando todo

Modo standalone
Si compilamos el servidor con el flag --with-out-inetd, supongo que querrán arrancar el servidor como standalone. Por lo que no deberían saltearse este paso.
Se trata de decirle a inetd que no lo necesitamos, que nuestro servidor va a correr como demonio a parte. Para esto abrimos el archivo de configuración de inetd y comentamos la línea correspondiente al puerto donde corre el FTP.

nano /etc/inetd.conf

Comentamos la línea:

#ftp stream tcp nowait root

Usuarios virtuales

NOTA: Para usar la maravillosa característica de los usuarios virtuales, necesitamos haber compilado el servidor con el flag --with-puredb.

Los usuarios virtuales son usuarios que NO existen en el sistema, solo pertenecen al Pure-FTPd. Están asociados a un usuario del sistema, pero son virtuales. Por lo tanto, si un usuario "malicioso" lograra conseguir una cuenta FTP en nuestro sistema, no podría hacer mucho...
Estos usuarios virtuales pueden almacenarse en una base de datos MySQL o en LDAP, etc. En este caso usamos la que viene por defecto con el Pure-FTPd para no complicarnos la existencia.

Primero que nada creamos un grupo y un usuario en el sistema a los cuales los usuarios virtuales van a estar asociados.

groupadd ftp
useradd ftp -g ftp -s /bin/false -d /dev/null


El grupo y el usuario se llaman ftp, le pasamos como argumento -s /bin/false para que no tenga shell y -d /dev/null para que no tenga directorio principal. Es decir, es un usuario sin ningún tipo de privilegio, a un atacante no le serviría de nada (bueno, al menos a ningún lammer).

Bien, solo nos resta crear los usuarios virtuales. Para eso hacemos:

pure-pw useradd <<nombre_usuario>> -u ftp -g ftp -d /home/ftp/<<nombre_usuario>> -t 25 -T 25 -c "<<nombre_usuario>>"
pure-mkdb


* pure-pw useradd: es el comando que nos ofrece Pure-FTPd para crear usuarios virtuales
* <<nombre_usuario>>: el nombre del usuario virtual
* -u y -g: el usuario y el grupo del sistema al cual vamos a asociarnos
* -d: el directorio principal del usuario (esta opción hace chroot en el directorio a diferencia de -D)
* -t y -T: el grupo del sistema al cual vamos a asociarnos (para usar estos parámetros debió haberse compilado el servidor el flag --with-throttling[/i]
* -c: el nombre "real" del usuario virtual
* pure-mkdb: es el comando que sirve para actualizar la base de datos de usuarios virtuales, hay que usarlo cada vez agregamos/eliminamos/modificamos usuarios virtuales, o en su defecto utilizar el parámetro -m

CONSEJO

Podemos hacernos un script para crear usuarios virtuales, así no tenemos que escribir "semejante línea" cada vez que queramos crear un usuario:
nano /usr/sbin/userftpadd

Escribimos el siguiente script dentro:

Código:

pure-pw useradd $1 -u ftp -g ftp -d /home/ftp/$1 -t 25 -T 25 -c $2 -m

Y le damos permisos de ejecución:

chmod a+x /usr/sbin/userftpadd

Ahora cada vez que queramos crear un usuario hacemos:

userftpadd <<nombre_usuario>> "<<nombre_usuario>>"

El primer parámetro es el nombre del usuario virtual y el segundo es el nombre "real" del mismo.

Script de inicio

Nos falta crear el script de arranque en /etc/init.d y configurar los niveles de ejecución para iniciar el servidor.

Creamos el script

nano /etc/init.d/pure-ftpd

Con la siguiente línea dentro:

Código:

/usr/local/sbin/pure-ftpd -j -B -lpuredb:/etc/pureftpd.pdb -A -c 10 -C 2 -d -E -k 90 -u 100

Le damos permisos de ejecución:

chmod a+x pure-ftpd

Y creamos los niveles de ejecución (los de defecto).:

update-rc.d pure-ftpd defaults

De esta manera el servidor se va a iniciar cada vez que inicie el sistema, con lo siguientes flags:

* -j: si al arrancar, el directorio raíz de un usuario no existe, lo crea
* -B: corre en background
* -lpuredb:/etc/pureftpd.pdb: indica el fichero donde se almacenan los usuarios virtuales (no olvidar verificar que este sea correcto)
* -A: hace chroot (así nadie sale de su directorio principal)
* -c 10: 10 conexiones simultanes máximo (depende de tu servidor)
* -C 2: cantidad de conexiones por IP (nadie debería conectarse más de dos veces simultaneamente desde una misma IP, por cuestiones de seguridad)
* -d: log verboso
* -E: no se permiten usuarios anónimos
* -k 80: se podrá ocupar como máximo el 80% de la partición
* -u 100[/i]: UID mínimo 100 (para que nadie se loguee como root ni nada parecido)

Abriendo puerto en router

Si están bajo un router, no olvidar forwardear los puertos 20 y 21 al servidor. Eso es según el router, y yo no me voy a meter en eso.
Otra cosa, como montamos el servidor en modo pasivo, si intentan conectarse a la IP pública pero desde su misma IP, no van a poder. Tienen que conectarse desde una máquina remota.

Conectándonos y probando el servidor

Primero de manera local:

ftp localhost

Debería pedirles que se logueen con un usuario y conectarlos al directorio principal de dicho usuario.

Después intenten de manera remota (repito, háganlo desde otra IP que no sea la del servidor, ya que está en modo pasivo):

ftp tudominio.com

Problemas frecuentes

"No puedo loguearme como usuario virtual"

* ¿Compilaste el servidor con el flag --with-puredb?
* ¿Iniciaste el servidor con el parámetro -lpuredb:/etc/pure-ftpd.pdb?
* ¿Existe el fichero /etc/pure-ftpd.pdb? si no existe hay dos opciones:
1. no compilaste con la opción --with-puredb, SOLUCION: volvé a compilar el servidor con el flag --with-puredb
2. estás usando otra versión y el fichero se encuentra en otra ruta, como por ejemplo en [i]/etc/pure-ftpd/pure-ftpd.pdb
, SOLUCIÓN: cambiá el flag de inicio -lpuredb

"No inicia el servidor"
¿Compilaste con --without-inetd?
¿Deshabilitaste FTP en inetd.conf?
¿Revisaste que todos los parámetros de inicio sean correctos?

"Tengo que arrancar el servidor manualmente, yo quiero que arranque al iniciar"
Tenés que configurar los niveles de ejecución, en esta guía explico como.

"Me puedo conectar localmente pero remotamente no"
Revisá el router, que tengas forwardeados los puertos 20 y 21.

"Me puedo conectar, pero los comandos no responden"
Repito por tercera vez: si te estás conectando desde la misma IP donde está el servidor, no vas a poder, ya que está en modo pasivo. Intentá desde otra IP.

Bueno, creo que es todo. Si alguien tiene alguna duda o hay algún paso que no se entiende... me dicen.
Sugerencias para agregarle a la guía son bienvenidas, (en especial en la parte de "Problemas frecuentes").
Y si hay errores (que no creo, porque soy perfecta jaja) bueno, me lo dicen también.
Y si simplementen quieren hacerme saber de que algún mortal leyó este tuto, ¡también me lo dicen! Cheesy

IMPORTANTE: se permite la reproducción de este documento siempre y cuando se mencione la fuente, el autor y un enlace a su ubicación original.
Bueno, dudas en el foro o a sherekan@sherekan.com.ar
(en pocas palabras, si vas a hacer un fuckin copy&paste de esto, por favor incluí mi nombre).

Página 01 de 01 | Versión completa

Descargas asociadas al artículo:

No existen descargas asociadas

Estadisticas:

Artículo leido 2547 veces con un puntaje de 9.00 pts

Comentarios.

Sus comentarios son importantes.

No hay comentarios para listar, si desea puede crear el primer comentario para este artículo.

Debe estar identificado para agregar un comentario