4º Práctica – Pure-FTPd en Centos
El objetivo de esta práctica es que el alumno se familiarice con el proceso de instalación de un servidor FTP, tanto desde su vertiente Anónima como No Anónima.
Para ello necesitará instalar en el servidor el software correspondiente. De las diferentes implementaciones de servidores de ftp existentes, trabajaremos con el Pure-FTPd.
Pure-FTPd es un servidor FTP libre basado en Troll-FTPd. 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 buffers 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, OpenBSD, BSDi, etc
Como ayuda haremos uso de la documentación presente en la web de PureFTP. Documentacion
El desarrollo de la práctica se realizará en varios apartados:
1) Obtener e instalar la última versión de pure-ftpd en la pasarela de su red.
Se procede a obtener la aplicación desde www.pureftpd.org.
Seleccionamos la última versión del directorio http://download.pureftpd.org/pub/pure-ftpd/releases/
Una vez descargada la última versión, procedemos a descomprimirla.
$ tar xvzf pure-ftpd-1.0.21.tar.gz
y según la documentación http://download.pureftpd.org/pub/pure-ftpd/doc/README instalamos haciendo dentro de la carpeta pure-ftpd-1.0.21 :
$ ./configure
$ make install-strip
Pero vamos a instalarlo con unas opciones básicas para poder realizar los siguientes apartados de la práctica.
$ ./configure --with-language=spanish --with-everything
$ make install-strip
2) Configurar el superdemonio xinetd en la pasarela de alguno de los subdominios para incluir el arranque del demonio bajo demanda, con la posibilidad de acceso remoto únicamente.
Para la instalación del superdemonio xinetd, procedemos de la siguiente forma:
Tecleamos en el terminal.
$ yum install xinetd
Una vez instalado, vamos a configurar el superdemonio como servicio, es decir para que arranque siempre que reiniciemos el sistema, para ello vamos a Sistema -> Administracion -> Servicios, buscamos el xinetd y lo marcamos.
A continuación creamos el fichero de configuración del servicio de ftp.
$ vim /etc/xinetd.d/pure-ftpd
En este archivo añadimos la siguientes líneas de configuración.
service ftp
{
socket_type = stream // Tipo de transferencia de archivos.
server = /usr/local/sbin/pure‐ftpd // Localización del servidor FTP en la máquina local.
protocol = tcp
user = root
wait = no // Define si el servicio es multi hilo o no, en este caso lo es.
disable = no // Especifica si el servicio está activo o no.
}
Podemos comprobar que el superdemonio está activo mirando las conexiones que estan abiertas y a la espera.
$ netstat -ato
que nos devuelve lo siguiente, en donde podemos ver que el servicio está activo y a la espera.
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State Timer
tcp 0 0 *:ieee-mms *:* LISTEN off (0.00/0/0)
tcp 0 0 *:sunrpc *:* LISTEN off (0.00/0/0)
tcp 0 0 *:ftp *:* LISTEN off (0.00/0/0)
tcp 0 0 *:smtp *:* LISTEN off (0.00/0/0)
3) Configurar distintas formas de acceder al servidor ftp incorporando las opciones indicadas:
La mayor parte de los siguientes apartados se realizan con la activación de los parametros de configuración en el archivo de configuración /etc/xinetd.d/pure-ftpd.
a) Posibilidad de acceso como usuario anónimo.
Cuando un usuario se identifica como anónimo el servicio lo asocia por defecto con el usuario ftp del sistema. Para comprobar que la instalación del pure-ftpd ha creado y configurado este directorio hacemos lo siguiente.
Mirar que directorio se ha puesto por defecto para el usuario ftp, para ello miramos el archivo /etc/passwd.
$ cat /etc/passwd | grep ftp
lo que nos devuelve las líneas donde aparece el usuario FTP
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
La carpeta que se ha asignado por defecto esta en /var/ftp, si no estuviese por alguna razón entonces la crearíamos de la siguente forma.
$ mkdir /var/ftp
$ chown -R ftp /var/ftp
$ chmod -R 700 /var/ftp
Ahora para permitir el acceso de usuarios anónimos accedemos al archivo de configuración /etc/xinetd.d/pure-ftpd.
$ vim /etc/xinetd.d/pure-ftpd
e introducimos el siguiente parámetro en la línea server_args =.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -e
protocol = tcp
disable = no
}
Reiniciamos el servicio xinetd y procedemos a realizar una conexión por ftp para comprobar esta nueva configuración.
$ /etc/init.d/xinetd restart
$ ftp localhost
Donde podemos ver en negrita el mensaje que nos avisa de que sólo se permiten usuarios anónimos.
Connected to localhost.localdomain.
220---------- Bienvenido a Pure-FTPd ----------
220-Eres el usuario numero 1 de 50 permitidos
220-La hora local es ahora 09:52. Puerto del servidor: 21.
220-Solo se permite FTP anonimo
220-Las conexiones IPv6 tambien son bienvenidas en este servidor
220 Seras desconectado despuus de 15 minutos de inactividad.
500 Extensiones de seguridad no implementadas
500 Extensiones de seguridad no implementadas
KERBEROS_V4 rejected as an authentication type
Name (localhost:root):
a-1) Presentación de un mensaje de bienvenida cuando un usuario acceda al ftp.
Para presentar un mensaje de bienvenida debemos de crear un archivo donde esté contenido el mensaje a mostrar, este archivo lo crearemos en /var/ftp/.banner
$ vim /var/ftp/.banner
En donde pondremos el siguiente texto de bienvenida:
----------------------------------------------------------------------
Bienvenido al servidor Ftp del dominio red2.redes.dis.ulpgc.es
Sientete como en tu casa...
-----------------------------------------------------------------------
Para comprobar que esta nueva configuración funciona, vamos a realizar una conexión por ftp a localhost, y veremos que cuando accedamos como usuario anónimo, el sistema nos muestra el contenido de este archivo.
$ ftp localhost
Connected to localhost.localdomain.
220---------- Bienvenido a Pure-FTPd ----------
220-Eres el usuario numero 1 de 50 permitidos
220-La hora local es ahora 09:58. Puerto del servidor: 21.
220-Solo se permite FTP anonimo
220-Las conexiones IPv6 tambien son bienvenidas en este servidor
220 Seras desconectado despues de 15 minutos de inactividad.
500 Extensiones de seguridad no implementadas
500 Extensiones de seguridad no implementadas
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): qwerty
230-----------------------------------------------------------------------
230-Bienvenido al servidor Ftp del dominio red2.redes.dis.ulpgc.es
230-Sientete como en tu casa...
230------------------------------------------------------------------------
230 Usuario An�nimo dentro del sistema
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
a-2) Los usuarios no puedan salir de los directorios de los cuales son propietarios (chroot).
Para evitar que los usuarios no puedan salir de sus directorios, lo conseguiremos con el siguiente comando en el archivo de configuración:
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -A // Mantiene a los usuarios en sus directorios.
protocol = tcp
disable = no
}
a-3) Presentación de mensajes de especificación de contenidos de los distintos directorios.
Para mostrar mensajes según se vayan accediendo a los directorios, únicamente tendremos que hacer es crear archivos .message en cada uno de los directorios que queremos que muestre un mensaje, en nuestro caso vamos a crear un directorio nuevo en /var/ftp/dirnuevo y crear el archivo del mensaje.
$ mkdir /var/ftp/dirnuevo
$ vim /var/ftp/dirnuevo/.message
----------------------------------------------------------------------
Hola estas en el directorio dirnuevo
-----------------------------------------------------------------------
Vamos a probar esto, conectamos por ftp a localhost como usuario anónimo y accedemos al directorio dirnuevo.
$ ftp localhost
ftp> cd dirnuevo
250-----------------------------------------------------------------------
250-Hola estas en el directorio dirnuevo
250------------------------------------------------------------------------
250 OK. El directorio actual es /dirnuevo
ftp>
a-4) Limitar el número de conexiones máximas.
Para limitar el número de conexiones máximas, hacemos uso del parámetro de configuración para el pure-ftpd "-c X", donde la X indica el número de conexiones.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -c 2
protocol = tcp
disable = no
}
a-5) Limitar el número de conexiones por dirección IP.
Para limitar el número de conexiones por IP, hacemos uso del parámetro de configuración para el pure-ftpd "-C X", en donde la X indica el numero de conexiones por IP .
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -C 2
protocol = tcp
disable = no
}
a-6) Desconexión en caso de inactividad.
Para indicar el tiempo en el que un usuario puede estar conectado y sin actividad, se hace uso del parámetro "-l X" , donde la X indica el tiempo en minutos, por defecto el tiempo es de 15 minutos.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -l 5 // a los 5 minutos sin actividad se desconecta
protocol = tcp
disable = no
}
a-7) Limitar el tamaño utilizado de la partición.
Para limitar el tamaño utilizado de la particion hacemos uso del parámetro " -k X ", donde X es el porcentaje de la partición a usar.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -k 20 // se va a usar el 20% de la particion.
protocol = tcp
disable = no
}
a-8) Limitar el ancho de banda
Para limitar el ancho de banda que pueda usar un usuario, haremos uso del parámetro " -t X", donde la X indica los kb/s que puede usar un usuario.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -t 4 // se va a limitar el anch de banda a 4 kb/s
protocol = tcp
disable = no
}
b) Posibilidad de acceso en modo de usuario del sistema.
Para permitir el acceso de usuarios del sistema al servidor FTP, haremos uso del parámetro " -E "
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -E // permitir usuarios del sistema
protocol = tcp
disable = no
}
b-1) Presentación de un mensaje de bienvenida cuando un usuario acceda al ftp.
Para mostrar un mensaje de bienvenida cuando el usuario accede a sistema se procede de igual forma que se hizo para mostrar el mensaje para usuarios anónimos, es decir, colocamos un archivo llamado .banner en el directorio personal de cada usuario.
$ vim /home/user1/.banner
----------------------------------------------
Bienvenido user1
----------------------------------------------
De esta forma cuando el usuario user1 acceda al ftp, verá este mensaje de bienvenida.
b-2) Los usuarios puedan salir de los directorios de los cuales son propietarios.
Para permitir que los usuarios puedan moverse libremente por el sistema, no hay que hacer nada, ya que como pudo verse antes, para evitar que los usuarios hiciesen esto, sólo habia que usar el parámetro -A, lo único que hay que hacer es no ponerlo y listo.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
protocol = tcp
disable = no
}
b-3) Permitir el acceso a los ficheros definidos por el sistema.
Para permitir el acceso a los ficheros, debemos de actuar igual que en el caso anterior, es decir, no poner el parámetro -A.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
protocol = tcp
disable = no
}
b-4) Desconexión en caso de inactividad.
Para indicar el tiempo en el que un usuario puede estar conectado y sin actividad, se hace uso del parámetro "-l X" , donde la X indica el tiempo en minutos, por defecto el tiempo es de 15 minutos.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -l 5 // se desconecta a los 5 minutos de inactividad.
protocol = tcp
disable = no
}
b-5) Limitar el ancho de banda.
Para limitar el ancho de banda que pueda usar un usuario, haremos uso del parámetro " -t X", donde la X indica los kb/s que puede usar un usuario.
service ftp
{
socket_type = stream
wait = no
user = root
server = /usr/local/sbin/pure-ftpd
server_args = -t 4 // se va a limitar el anch de banda a 4 kb/s
protocol = tcp
disable = no
}
c) Posibilidad de acceso como usuarios virtuales.
Para la creación de un usuario virtual se debe en primer lugar crear un grupo que se llamará “ftpgrupo”, a continuación se le añadirá al mismo el usuario con su correspondiente contraseña.
$ groupadd ftpgrupo
$ useradd -g ftpgrupo -d /dev/null -s /etc/ ftpuser
useradd: aviso: el directorio personal ya existe.
No se copia ningún fichero del directorio skel en él.
$ pure-pw useradd usuario -u ftpuser -d /home/ftpuser/usuario
Password:
Enter it again:
$ pure-pw mkdb
Creamos la base de datos que usará realmente el Pure‐ftp. Este comando pasará el fichero de los usuarios virtuales a una base de datos .pdb (del fichero /etc/pureftpd.passwd a /etc/pureftpd.pdb) que usa estos nombres de ficheros que además serán los que busque el Pure‐ftp por defecto sin necesidad de especificarlo.
Si le pusiéramos otro nombre a .pdb tendríamos que indicar la ruta usando para ello el comando
‐lpuredb:<archivo.pdb>
En nuestro caso al usar los nombres por defecto no es necesario.
Se ha usado:
pure‐pw mkdb.
Muchas gracias por vuestra atención.
