Configuración de un servidor FTP con Pure-FTPD

Introducción.

Pure-FTPd es un servidor FTP libre (GPL) basado en Troll-FTPd. Fue modificado por Frank Dennis por razones de seguridad y funcionalidad.

Los principales objetivos de este servidor FTP son la eficiencia, la seguridad y la facilidad de uso. Está diseñado para ser seguro en su configuración por defecto; no tiene buffer overflows conocidos y es muy sencillo de instalar. Ha sido diseñado para los kernels modernos, y ha sido portado con éxito a Linux, FreeBSD, NetBSD, OpenBSD, BSDi, Solaris, Darwin, Tru64, Irix y HPUX.

Entre las características que destacan en Pure-ftpd se encuentran: directorios home enjaulados ( chrood()ed ) y también virtual chroot()ed, dominios virtuales, 'ls' preincluido, sistema anti-warez, puertos configurables para descargas en modo pasivo, protocolo FXP, control de ancho de banda, ratios, autenticación contra LDAP / MySQL, PostgreSQL, archivos fortuna, archivos de registro tipo Apache, modo rápido standalone, reportes de estado en tiempo real txt / HTML / XML, usuarios virtuales, quotas virtuales, separación de privilegios, SSL/TLD y más.

Instalación del servidor Pure-FTPD.

Con solo un apt-get podemos tener el sistema andando en un debian

#apt-get install pure-ftpd 

Arrancando el servidor y opciones de configuración.

Ahora que ya tenemos instalado el servidor seguiremos con su arranque y veremos las opciones de configuración.

Para arrancar el servidor es tan simple como ejecutar el programa “pure-ftpd”.

# pure-ftpd &

*NOTA: Al usar este método la autenticación se hace contra el archivo /etc/passwd , es decir, usando cuentas del sistema, mas adelante veremos que parametro usar para arrancar el servicio con autenticación para usuarios virtuales.

Y comprobamos que el proceso fue iniciado asi:

# ps auxw | grep pure-ftpd

root     12052  0.0  0.6  1856  568 pts/0    S    23:09   0:00 pure-ftpd (SERVER)

[SERVER] es el Servidor principal. Si matas este proceso, el servidor terminara por completo despues de la siguiente conexión.

Entonces probaremos haciendo una conexión al servidor y veremos esto:

$ ftp ftp.dominio.com
Connected to ftp.dominio.com.
220---------- Welcome to Pure-FTPd ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 23:11. Server port: 21.
220 You will be disconnected after 15 minutes of inactivity.
Name (ftp.dominio.com:usuario):

Y ahora hacemos de nuevo:

# ps auxw | grep pure-ftpd

Y veremos esta linea extra:

root     12060  0.0  0.9  2016  860 pts/0    S    23:11   0:00 pure-ftpd (IDLE)

[IDLE] muestra un cliente sin transferencias activas.

Para facilidad al hace scripts, el archivo '/var/run/pure-ftpd.pid' es creado y siempre contiene el PID (Process ID, Identificador del proceso) de el proceso de el servidor principal.

Como vimos en la parte que muestra al hacer una conexión al servidor, vemos que muestra algo asi:

220-You are user number 1 of 50 allowed.
220-Local time is now 23:11. Server port: 21.
220 You will be disconnected after 15 minutes of inactivity.
  • La primer linea dice que es el usuario numero 1 de 50 permitodos.
  • La segunda linea dice la hora actual y el puerto al que se estableció la conexión.
  • La tercer linea dice que despues de 15 minutos de inactividad la conexión sera cerrada.

Estas son algunas de las opciones predeterminadas con las que el servidor fue iniciada.

Como hemos visto hasta ahora no usamos ningún archivo de configuración como es usual al iniciar algún servicio de red, Pure-ftpd no usa por default ningún archivo de configuración (aunque es posible con el script pure.config.pl y usando el archivo /etc/pureftpd.conf) las opciones con las que queremos que el servidor sea inicido se pasan como parametros al programa pure-ftpd, algo asi:

# pure-ftpd -opción1 -opción2 -opción3

Estas son unas de las opciones mas usuales:

-A				Chroot para todos los usuarios. No pueden salir
 				del directorio del FTP.
-c 10				10 conexiones máximas al FTP.
-B				Ejecutar en segundo plano.
-C 2				Permitir solamente 2 conexiones para una misma IP.
-d				Verbose log.
-E				No permitir usuario anonymous.
-f ftp				Logear a través de syslog.
-H				No resolver IP.
-I 15				Si el usuario está 15 minutos inactivo, es 
				desconectado
-L 2000:8			Límite de recursividad.
-m 3				Máxima carga por encima de la cual el servidor 
				deja de funcionar.
-s				Antiwarez.
-U 133:022			umask
-u 100				minuid
-k 90				Se podrá usar como máximo el 90% de la partición.
-lpuredb:/etc/pureftpd.pdb	Usaremos usuarios virtuales de FTP en vez de 
				cuentas reales del sistema.
-S hostname_o_ip,puerto		Escuchamos en el puerto especificado de esa IP o 
				Hostname, si el equipo tiene varias IPs.

Para ver todas las opciones disponibles ver el archivo README en /usr/doc/pure-ftpd-1.0.20

Usuarios Virtuales en Pure-ftpd.

Los usuarios virtuales es un simple mecanismo para almacenar una lista de usuarios con su contraseña, nombre, uid, directorio, etc. Es casi como /etc/passwd. Pero no es /etc/passwd. Es un archivo diferente, solo para FTP.

Significa que puedes crear fácilmente cuentas solo para FTP.

Además, los archivos de usuarios virtuales pueden almacenar información de quotas, ratios, ancho de banda, etc. Las cuentas de sistema no pueden hacer esto.

Miles de cuentas pueden almacenar el mismo usuario de sistema,y pueden ser chrooted y tener su propio directorio HOME.

Una recomendación antes de empezar con los usuarios virtuales, es crear un usuario de sistema. Por supuesto, puedes usar una cuenta ya existente como “nobody” (pero no root), aunque es recomendado hacer una cuenta dedicada para este fin.

Y ahora crearemos un grupo “ftpgroup” y un usuario “ftpuser”.

# groupadd ftpgroup # useradd -g ftpgroup -d /dev/null -s /etc ftpuser

Entonces, todo el mantenimiento de los usuarios virtuales puede ser hecho con el comando “pure-pw”. También puedes editar los archivos a mano si asi lo deseas.

Creación de usuarios Virtuales.

Para agregar un nuevo usuario, usaremos la siguiente sintaxis:

	
	# pure-pw useradd <login> [-f <passwd file>] -u <uid> [-g <gid>]
                         -D/-d <home directory> [-c <gecos>]
                         [-t <download bandwidth>] [-T <upload bandwidth>]
                         [-n <max number of files>] [-N <max Mbytes>]
                         [-q <upload ratio>] [-Q <download ratio>]
                         [-r <allow client host>[/<mask>][,<allow client host>[/<mask>]]...]
                         [-R <deny client host>[/<mask>][,<deny client host>[/<mask>]]...]
                         [-i <allow local host>[/<mask>][,<allow client host>[/<mask>]]...]
                         [-I <deny local host>[/<mask>][,<deny local host>[/<mask>]]...]
                         [-y <max number of concurrent sessions>]
                         [-z <hhmm>-<hhmm>] [-m]

Bien creemos el usuario “pruebas”, con su directorio home en /home/ftpusers/pruebas. La cuenta de sistema asociada al usuario virtual “pruebas” es “ftpuser”.

# pure-pw useradd pruebas -u ftpuser -d /home/ftpusers/pruebas
Password:
Enter it again:

Entonces te preguntara la contraseña para el usuario pruebas.

Con -d, pruebas sera enjaulado. Si quieres darle acceso a todo el sistema de archivos al usuario, usa -D en lugar de -d.

No es necesario crear /home/ftpusers/pruebas si corres pure-ftpd con el parametro -j(–createhome). Con este parametro, el directorio home sera creado automaticamente cuando el usuario inicia sesion por primera vez.

Con la opcion ”-z” permite al usuario conectarse solo durante un rango de tiempo en el dia. Por ejemplo, con -z 0900-1800, pruebas solo podra conectarse al servidor ftp de 9 am a 18 pm. Alerta: un usuario que se conecto duranto una hora autorizada puede finalizar la sesion aun despues de estos horarios de autorizacion.

-r y -R se usan para restringir desde donde se conecta el usuario. Pueden ser seguidas por un simple para IP/MASK (-r 192.168.1.0/24), multiples pares separados por coma (-r 192.168.1.0/24, 10.1.0.0/16, 127.0.0.1/32), una sola IP ( -r 192.168.1.1, 10.1.1.5), nombres de hosts ( -r bla.bla.bla.net, dominio.com), o cualquier combinacion de estas.

-y es usado para restringir el numero de conexiones concurrentes que un usuario puede tener al mismo tiempo.0 siginifica ilimitado. Evita esta opcion en servidores con mucha carga. Mejor usa limites por-ip.

Con esto hemos creado el archivo de usuarios virtuales en /etc/pureftpd.passwd el cual contiene algo asi:

# cat pureftpd.passwd pruebas:$1$7A8JOUM0$jPo6Qdh/UhV9cgcJUhSZD0:5012:104::/home/ftpusers/pruebas/./::::::::::::

Para que esto surta efecto y el servidor pure-ftpd los considere deberemos ejecutar el comando “pure-pw mkdb”:

# pure-pw mkdb

Y creara el archivo /etc/pureftpd.pdb

El cual es un archivo PureDB. este es un archivo igual a pureftpd.passwd, pero en este archivo, las cuentas son indexadas para un acceso mas rapido, aun cuando haya miles de cuentas. Los archivos PureDB son archivos binarios, no trates de verlos o tu terminal pitara como el infierno.

Ahora si podremos arrancar el servidor con la opcion para que use los usuarios virtuales leyendo el archivo /etc/pureftpd.pdb, asi:

# pure-ftpd -j -lpuredb:/etc/pureftpd.pdb &

Cambiando la informacion de los usuarios virtuales.

Una vez que el usuario virtual ha sido creado, puedes editar su informacin. Por ejemplo quieres asignari un limite de ancho de banda, cambiar la quota, agregar su nombre completo, actualizar el ratio, etc.

El comando “pure-pw usermod” trabaja similar a “pure-pw useradd” excepto que modifica una cuenta ya existente en lugar de crear una nueva.

Por ejemplo, necesitas cambiar la quota a pruebas. pruebas debera ser limitado a 2 archivos y solo 10 Megabytes.

# pure-pw usermod pruebas -n 2 -N 10

Por supuesto correremos el comando “pure-pw mkdb” para que este cambio tome efecto. y comprobaremos este cambio subiendo unos archivos.

Supongamos que ya iniciamos sesion y tenemos dos archivos en nuestro home:

ftp> ls
200 PORT command successful
150 Connecting to port 35871
-rw-r--r--    1 5012     104             0 Jan  2 00:41 archivo.1
-rw-r--r--    1 5012     104             0 Jan  2 00:41 archivo.2
226-Options: -l
226 2 matches total

Y al querer subir un archivo de mas veremos esto:

ftp> put archivo.3
local: archivo.3 remote: archivo.3
200 PORT command successful
150 Connecting to port 35872
550-Quota exceeded: archivo.3 won't be saved
550-2 files used (100%) - authorized: 2 files
550 0 Kbytes used (0%) - authorized: 10240 Kb
ftp>

Ahora comprobaremos el limite de archivo a subir, para esto solo tenemos un archivo y subiremos un archivo.2 con tamaño de 13.0 MB.

ftp> ls
200 PORT command successful
150 Connecting to port 35875
-rw-r--r--    1 5012     104             0 Jan  2 00:41 archivo.1
226-Options: -l
226 1 matches total

ftp> put archivo.2
local: archivo.2 remote: archivo.2
200 PORT command successful
150 Connecting to port 35876
550-Quota exceeded: archivo.2 won't be saved
550-1 files used (50%) - authorized: 2 files
550 0 Kbytes used (0%) - authorized: 10240 Kb
ftp>

Reseteando Atributos a cuentas.

Para desabilitar quotas de archivos, usa pure-pw usermod <usuario> -n Para desabilitar quotas de tamaño, usa pure-pw usermod <usario> -N Para desabilitar ratios, usa pure-pw usermod <usuario> -q -Q Para desabilitar limite de ancho de banda (download), usa pure-pw usermod <usuario> -t Para desabilitar limite de ancho de banda (upload), usa pure-pw usermod <usuario> -T Para desabilitar Filtrado por IP, usa pure-pw usermod <usuario> ←i,-I,-r or -R> Para desabilitar restriccion de tiempo, usa pure-pw usermod <usuario> -z Para desabilitar el numero de conexiones concurrentes, usa pure-pw usermod <usuario> -y ''

Eliminando Usuarios.

Para eliminar un usuario de la base de datos de pure-ftpd (Archivo PureDB) es tan simple como correr el comando “pure-pw userdel”, con esta sintaxis:

# pure-pw userdel <login> [-f <passwd file>] [-m]

Por ejemplo borraremos el usuario pruebas:

# pure-pw userdel pruebas

El contenido del directorio home de este usuario se mantendra, si se desea eliminar sera a mano si asi lo deseas.

Cambiando contraseñas de usuarios.

Para cambiar la contraseña de un usuario, usa el comando “pure-pw passwd”:

# pure-pw passwd <login> [-f <passwd file>] [-m]

Por ejemplo:

# pure-pw passwd pruebas2 Password: Enter it again:

Mostrando la informacion de las cuentas.

Para revisar la informacion acerca de un usuario, leer el archivo /etc/pureftpd.passwd esta bien, pero no es tan facil de leer.

Para esto usaremos el comando “pure-pw show” con esta sintaxis:

# pure-pw show <login> [-f <passwd file>]

Por ejemplo para ver la informacion del usuario pruebas2:

# # pure-pw show pruebas2

Login : pruebas2 Password : $1$Dq8Vn7g0$B/cYZ4TxGSi1vd3Uh5soi1 UID : 5012 (ftpuser) GID : 104 (ftpgroup) Directory : /home/ftpusers/pruebas2/./ Full name : Download bandwidth : 0 Kb (unlimited) Upload bandwidth : 0 Kb (unlimited) Max files : 0 (unlimited) Max size : 0 Mb (unlimited) Ratio : 0:0 (unlimited:unlimited) Allowed local IPs : Denied local IPs : Allowed client IPs : Denied client IPs : Time restrictions : 0000-0000 (unlimited) Max sim sessions : 0 (unlimited)

"/./" al final del directorio home significa que el usuario sera enjaulado
(chroot()ed).

Haciendo efectivo los cambios.

Como ya se dijo antes para que los cambios de agregar usuarios, cambiar algun parametro al usuario, eliminar un usuario no seran considerados por pure-ftpd hasta que no se ejecute el comando “pure-pw mkdb”.

No hay necesidad de reiniciar el servidor pure-ftpd para hacer efectivos los cambios.

Si quieres hacer efectivo un cambio automaticamente despues de usar el comando “pure-pw” con alguna opcion y automaticamente correr “pure-pw mkdb” despues. usa la opcion -m, por ejemplo:

# pure-pw passwd pruebas2 -m

Bien, ahora ya puedes trabajar con tus usuarios virtuales, como hemos visto cuando agregamos un usuario virtual a la DB de pure-ftpd se les asigna un user id (uid) y el group id (gid) se asigna automaticamente ya que el user ftpuser tiene por default el gid ftpgroup, esto es para que le asigne los permsisos a el directorio y asi puede accesarlos.

Usuarios virtuales asignados a un usuario de sistema.

Si quieres agregar un virtual user que es igual a un usuario de sistema, entonces tendras que asignarle el uid, y gid a ese usuario virtual para que use esos permisos y no tengas problemas de permisos, por ejemplo tenemos el usuario pruebas3, lo vemos en /etc/passwd

pruebas3:x:1000:100:,,,:/home/pruebas3:/bin/bash

Como vemos aqui el usuario pruebas3 tiene el uid 1000 y el gid 100 entonces tendremos que crear el usuario asi:

# pure-pw useradd pruebas3 -u 1000 -g 100 -d /home/pruebas3
Password:
Enter it again:

Y lo vemos asi:

# pure-pw show pruebas3

Login              : pruebas3
Password           : $1$odpRkxC0$vv6lT1zFWzWzuZ1ND.9b6.
UID                : 1000 (pruebas3)
GID                : 100 (users)
Directory          : /home/pruebas3/./
Full name          :
Download bandwidth : 0 Kb (unlimited)
Upload   bandwidth : 0 Kb (unlimited)
Max files          : 0 (unlimited)
Max size           : 0 Mb (unlimited)
Ratio              : 0:0 (unlimited:unlimited)
Allowed local  IPs :
Denied  local  IPs :
Allowed client IPs :
Denied  client IPs :
Time restrictions  : 0000-0000 (unlimited)
Max sim sessions   : 0 (unlimited)

Bien con este documento ya se explico como tener un servidor FTP seguro, ahora para que lo afines a tus necesidades recuerda que todas las opciones se las pasas al programa como parametros, para ver un listado con su explicacion ver el archivo: /usr/doc/pure-ftpd-1.0.20/README

Algunos de estos parametros los puedes usar por-usuario cuando haces uso de los usuarios virtuales y otros son generales para todo acceso.

Para más informacion ver la documentacion que acompaña al paquete.

Autor: Jorge Armando Medina. email: jmedina@tuxjm.net Sitio Web: http://www.tuxjm.net

Visita la pagina del Grupo de Usuarios Linux Tijuana en: http://www.linuxtj.org

 
Ir hasta arriba
linux/pure-ftp_manual.txt · Última modificación: 2009/09/22 11:24 (editor externo)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0