Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión

Foros del Club

Páginas: [1]   Ir Abajo
  Enviar tema  |  Imprimir  
Autor Tema: Tutorial - Montando un servidor FTP con Pure-FTPd sobre Debian - By Sherekan  (Leído 3322 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Sherekan
Savant
*******

Prestigio: 8
Desconectado Desconectado

Sexo: Femenino
Mensajes: 30


Just Sherekan


WWW
Lenguajes:
PHP, Java, C/C++
XML, HTML/XHTML
Bases de datos:
MySQL
« en: 18/10/2007, 22:35:12 »

Montando un servidor FTP con Pure-FTPd sobre Debian



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
  • -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: 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 /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.
(en pocas palabras, si vas a hacer un fuckin copy&paste de esto, por favor incluí mi nombre).
« Última modificación: 19/10/2007, 23:48:09 por Sherekan » En línea
oscar
Technocrat
*********

Prestigio: 10
Desconectado Desconectado

Mensajes: 149



« Respuesta #1 en: 19/10/2007, 08:42:14 »

Solo por comentar que he leído dicho tutorial lo cual me motivo a instalarlo en mi sistema, pero yo uso gentoo, lo cual me sirvió para ver las diferencias, por lo menos en apenas 10 minutos de prueba, cuando pase la hora veré que puedo agregar.
Lo primero es que esta en los repositorios así que la instalación fue directa. La colocación a nivel de daemon se hace automáticamente.
La colocación de parámetros lo hice por default así que cuando pase la hora veré si algo de lo comentado en las opciones fue distinto.
La diferencia mas observable es que en gentoo toda la configuración del servidor se hace cambiando un archivo /etc/conf.d/pure-ftpd
por ejemplo los parámetros que se le pasa al servidor se usa una variable:

## Misc. Others ##
MISC_OTHER="-A -E -x -j -R -Z"

como veras gentoo es mas ordenado y/o simple a la hora de instalar servidores.
En línea
Sherekan
Savant
*******

Prestigio: 8
Desconectado Desconectado

Sexo: Femenino
Mensajes: 30


Just Sherekan


WWW
Lenguajes:
PHP, Java, C/C++
XML, HTML/XHTML
Bases de datos:
MySQL
« Respuesta #2 en: 19/10/2007, 18:10:04 »

Hola! qué tal?

No lo probé en Gentoo, sería interesante saber como anda ahí y que diferencias hay.

Si, me olvidé de decir, Pure-FTPd ofrece dos formas de configuración:
- por el pase de parámetros en el arranque del servidor (como puse en el tuto)
- o por archivos de configuración (como viene en los repositorios).

Es casi lo mismo, pero personalmente no me gusta mucho la idea de usar un parser, prefiero pasarle los parámetros directamente.

Yo al principio lo instalé desde el repositorio de Debian, pero me dió problemas para instalarlo como daemon y para configurar los usuarios virtuales, por lo que decidí compilar el fuente.

Bueno, no puedo decir mucho ya que como dije antes, lo instalé hace poco. Pero hasta ahora no me decepcionó para nada, espero escuchar sus opiniones.

Saludos!
« Última modificación: 19/10/2007, 18:58:14 por Sherekan » En línea
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #3 en: 05/11/2007, 11:49:57 »

Muy bueno, te invito a publicarlo en el sitio principal (en la sección GNU/Linux).
Fijate mi firma.

Saludos.
En línea

Sherekan
Savant
*******

Prestigio: 8
Desconectado Desconectado

Sexo: Femenino
Mensajes: 30


Just Sherekan


WWW
Lenguajes:
PHP, Java, C/C++
XML, HTML/XHTML
Bases de datos:
MySQL
« Respuesta #4 en: 05/11/2007, 16:17:56 »

Hola!

Gracias Gastón, ya lo estoy enviando para revisión, supongo que pronto va a estar disponible.

Saludos!
En línea
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #5 en: 19/11/2007, 20:39:24 »

Me alegro que hayas publicado tu artículo. Espero que otros como vos se prendan y aporten material y recursos al sitio.

Gracias a vos.
En línea

Foros del Club
   

 En línea
Páginas: [1]   Ir Arriba
  Enviar tema  |  Imprimir  
 
Ir a: