"Práctica 1
Servicio FTP
TRABAJO REALIZADO POR: BLANCO RIVAS, Héctor CABRERIZO PÉREZ, David
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
ÍNDICE
1. 2. ENUNCIADO.......................................................................................... 1 WU-FTP.................................................................................................. 3 2.1. Instalación. ............................................................................................. 3 2.2. Configuración ......................................................................................... 5 2.2. 1. Usuarios anónimos ........................................................................ 6 2.3. Pruebas ................................................................................................ 12 2.3. 1. Pruebas de acceso ...................................................................... 12 2.3. 2. Pruebas de rendimiento............................................................... 17 PRO-FTPD ........................................................................................... 22 3.1. Instalación. ........................................................................................... 22 3.2. Configuración ....................................................................................... 24 3.3. Pruebas ................................................................................................ 31 3.3. 1. Pruebas de acceso ...................................................................... 31 3.3. 2. Pruebas de rendimiento............................................................... 36 3.4. Nos han ayudado ................................................................................. 39
3.
I
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
1. ENUNCIADO
El objetivo de esta práctica es la instalación y configuración de un servidor FTP con servicio para usuarios anónimos. Posteriormente se evaluará el consumo de recursos de dicho servidor. El primer paso es la elección del programa servidor FTP. Puede optarse por el servidor ftp estándar que viene con nuestra distribución de Linux, sin embargo se recomienda trabajar con otros servidores más potentes como por ejemplo
• WU-FTPd: http://www.wu-ftpd.org/ • ProFTPd: http://proftpd.linux.co.uk/
El siguiente paso es la instalación del servidor. En el apartado de FAQ de las páginas web reseñadas hay abundante información que detalla este proceso. Se valorará que la instalación se realice desde las fuentes en lugar de hacerlo con instaladores automáticos, el dselect o paquetes con binarios ya compilados. A continuación se configurará el servidor. En este punto se decidirán aspectos tan importantes como el funcionamiento del servidor en modo autónomo (standalone) o a través de inetd, la limitación del número de accesos simultáneos para usuarios anónimos. La seguridad del servidor dependerá en gran medida de su correcta configuración. Esta fase incluye también puntos menos críticos como los mensajes de bienvenida y despedida, tiempo de inactividad ... El enlace de las FAQ de las páginas antes mencionadas incluye información y enlaces para la configuración de los servidores. Se recomienda la lectura detenida de los apartados que contienen las recomendaciones para la configuración del servicio ftp anónimo, el potencialmente más peligroso. En caso de las FAQ del WUFTPd Anonymous ftp configuration guidelines. Consultar también los siguiente documentos del CERT (proporcionados en la documentación de la práctica)
• http://www.cert.org/tech_tips/anonymous_ftp_abuses.html • http://www.cert.org/tech_tips/anonymous_ftp_config.html
Por último, una vez completados los pasos anteriores, habrá que verificar el correcto funcionamiento del sistema instalado. Si se quiere comprobar el funcionamiento con una carga de trabajo importante puede utilizarse el benchmark dkftpbench (ver material auxiliar). El guión de la práctica, breve pero completo, deberá especificar: • Entorno hardware: características de la máquina de prueba. • Entorno software: sistema operativo, versión, ... • Servidor/es ftp instalado/s • Proceso de instalación: a partir de las fuentes o con dselect.
1
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
• Funcionamiento: • En modo autónomo (standalone) a través de inetd • Configuración: • Creación de usuarios • Ficheros y directorios modificados/añadidos • Arranque del servidor • Verificación del correcto funcionamiento del servidor. • Permisos acceso (lectura/escritura ficheros/directorios) • Número de conexiones: máximo simultáneo • ... • Impacto del servidor en el sistema: en entorno Linux se dispone (entre otras) de las siguientes herramientas de prestaciones y monitorización del sistema: • vmstat: cálculo de utilización de la CPU, así como información del uso de memoria y paginado. • uptime: carga media de la CPU. • ps o top: porcentaje de CPU que está usando cada proceso. • netstat: información del uso de la red.
2
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
2. WU-FTP
2.1. Instalación.
La instalación con Debian del servidor Wu-Ftp puede ser extremadamente fácil o fácil. La manera extremadamente fácil es hacer, en modo root: apt-get install wu-ftpd La fácil, y por la que nosotros optamos, consiste en bajarse el tarball de www.wu-ftpd.org. Así obtendremos un archivo de tipo .tar.gz. En nuestro caso era el archivo wu-ftpd-2.6.2.tar.gz. Lo descomprimimos en un directorio que nos venga bien con la orden. tar xvzf wu-ftpd-2.6.2.tar.gz Al descomprimir se crea un directorio, el wu-ftpd-2.6.2. Entramos en él: cd wu-ftpd-2.6.2 Por cierto, que cuando instalamos esta versión, se habia descubierto una vulnerabilidad grave y habia que parchear un fichero de la instalación. Aprovecharemos así para explicar como hacer eso. Bajamos el parche de www.wu-ftpd.org . En este caso era el realpath.patch. Había que parchear el fichero realpath.c de la instalación. Bueno, pues copiamos este archivo dentro del directorio de instalación (wu-ftpd-2.6.2). Entramos a este directorio (en el que recordemos, ya está realpath.patch) y, como root, ejecutamos patch –p0 < realpath.patch ¡¡Y ya está parcheado!!. Para compilar, este cacharro utiliza la herramienta automake, que tendremos que tener instalada en nuestro sistema. Le damos a la auto configuración (que detecte qué tenemos instalado, cual es nuestra máquina...) ./configure Saldrá una ventana tal que así:
3
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Esperamos a que termine y procedemos a lo que es la compilación propiamente dicha. make y a la instalación de lo que haya compilado (¡Ojete!. Como root) su root make install Cuando termine, saldrá una ventanica tal que así:
4
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
2.2. Configuración
¡Hala!. Ya tenemos el Wu-Ftpd en el sistema. ¿Y funcionando?. Noooo. Aún falta. Para empezar, ya nos está diciendo el programa de instalación que como no teníamos un fichero ftpconversions, que él nos ha puesto uno en //etc, y que seguramente tendremos que tocarlo. Ya veremos. De momento tenemos que lanzar el servicio. Podemos elegir entre “embeberlo” en inetd o lanzar un demonio de manera autónoma. Optamos por la primera opción. Para ello, hay que retocar el archivo /etc/inetd.conf de manera que aparezca la línea FTP que se marca en negrita en el texto.
#:STANDARD: These are standard services. #:BSD: Shell, login, exec and talk are BSD protocols. #:FTP: Le endilgamos el servicio FTP ftp stream tcp nowait root /usr/sbin/tcpd #:MAIL: Mail, news and uucp services.
/usr/sbin/in.ftpd -laio
¿Qué hace eso?. Pues si no lo sabes es porque no has ido a clase de SANRI en el Cps ¿eh?. Pues mira
ftp
Protocolo. No hace falta especificar el puerto porque ya viene detallado en /etc/services
stream tcp
nowait root
/usr/sbin/tcpd
/usr/sbin/in.ftpd -laio
a (ftpd por Argumentos del ejecutable. -l: Que cada sesión sea registrada en el syslog. -a Activar la configuración que viene en el fichero /etc/ftpaccess. -i Que se registre en xferlog los archivos subidos al servidor -o Que se registre en xferlog los archivos descargados del servidor.
Un nuevo servidor para cada cliente (un proceso por cada petición)
Quién lanza el demonio.
Ejecutable lanzar embebido inetd)
Tipo de comunicación Flujo tcp a través de un socket stream. Detallado en /etc/protocols
Decimos que tcpd controle y embeba la llamada al demonio y haga sus comprobaciones antes de llamar al programa en cuestión
Por cierto, que en algunas versiones de inetd, el poner que el demonio es lanzado por root,así, a secas, da problemas. Algunas veces se exige que sea root.root. Misterios de la vida diaria, oiga. Como root, reiniciamos el demonio: killall –HUP inetd Con esto que hemos hecho, pueden entrar usuarios que tengan cuenta en el sistema, y acceder a su home, y navegar por la estructura de directorios como si estuviesen en local. En estos momentos, nuestro servidor ftp parece más bien un servidor telnet (bueno, vale, un servidor telnet que solo puede manejar archivos). De momento no pueden entrar usuarios anonymous. Demostración fehaciente:
5
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Usuario anónimo
Usuario hector (con cuenta)
2.2. 1. Usuarios anónimos
Tenemos, para empezar, que crear un usuario ftp que será el equivalente de los usuarios que entren como “anonymous”. Para que no empiece a preguntar contraseñas, crear homes él solo y toda la pesca, utilizaremos useradd ftp Ya tenemos un nuevo usuario en el sistema. Luego hay que entender que Wu-ftpd utiliza chroot() al entrar de manera anónima, ocultándose todo el árbol de directorios, y “simulando” la estructura raíz en el directorio de instalación del usuario anonymous (vamos, que se enjaula, porque establece como raíz /home/ftp, ó, para hablar con mayor propiedad ~ftp ). Es decir, que todos los ejecutables, binarios y librerías de las que éstos dependan, deben ser replicados en esta estructura, haciendo equivalente ~ftp a /. También deben estar en este home los ficheros que queremos compartir y los directorios a los que permitiremos subir archivos de los usuarios anónimos. El directorio del que permitiremos descargar será ~ftp/pub y el que permitiremos depositar cosas será ~ftp/pub/incoming. Cuando compilamos, el propio protocolo permite utilizar ls ó dir para listar el contenido de una carpeta, pero es una porquería. Nos interesa utilizar el ls que tenemos en nuestros Linux, que es muy majo. Modo Default Modo bien
6
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
¿Cómo?. Bueno, pues en ~ftp tenemos que replicar la estructura de directorios necesaria para utilizar el programa ls. De normal el binario está en /bin/. Pues tendremos que crear una carpeta /home/ftp/bin donde dejar el comando ls. Cuidadín, porque también necesita librerías que se encuentran en /lib/ (¡hala! a crear un /home/ftp/lib). ¿Y qué librerías?. Pues eso se sabe con el comando ldd.
borrajax@Enano:~$ cp /bin/ls ~ftp/bin/ Copiamos el binario Averiguamos las librerias borrajax@Enano:~$ ldd /bin/ls librt.so.1 => /lib/librt.so.1 (0x40019000) libc.so.6 => /lib/libc.so.6 (0x4002a000) libpthread.so.0 => /lib/libpthread.so.0 (0x40148000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Nos interesa fijarnos en lo que sale a la derecha del =>, porque es la ruta completa hasta la librería que está utilizando el comando en ese momento. Si hubiésemos instalado el programa con apt-get, por defecto se crea una estructura que permite utilizar los servicios ls, tar y gzip. Esa estructura es la siguiente.
Nosotros podemos replicarla a mano, y poner más servicios, copiando los binarios en ~ftp/bin y las librerías que utilicen en ~ftp/lib. De momento, además del ya explicado ls, vamos a copiar también /bin/tar y /bin/gzip a ~ftp/bin/ cp /bin/gzip /bin/tar /home/ftp/bin Bueno... Pues ya tenemos (junto con tar y gzip) el ls. Pero... ¡Un momento!. ¿Qué clase de usuarios estamos manejando?:
7
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Vaya... Pues yo quiero que me salgan root y staff. ¿Cómo hago eso?. Pues necesito meter en ~ftp/etc/ los ficheros de usuarios (/etc/passwd) y de grupos (/etc/group). ¡Ojo!. No se deben copiar así como así. Hay que intentar meter la menor información posible. Desde luego, nada de dar nombres de usuarios reales que puedan entrar al ftp (hector y borrajax). Si acaso, podemos dejar el root, porque no puede entrar por el ftp (está “capado” en /etc/ftpusers). ~ftp/etc/passwd root:x:0:0::: daemon:x:1:1::: ftp:x:1002:100:::
Tabla 1
~ftp/etc/group root:x:0: bin:x:2: staff:x:50: ftp:x:100:
Por cierto, que se vea que el usuario /ftp que aparece por /etc/passwd tiene shell (/bin/bash). Bueno, pues en nivel “paranoico” de seguridad, podemos editar ese fichero y quitarle la shell a este pobre usuario ftp. ¡Cuidado!. Si instalamos otro servidor FTP (como Pro-Ftpd) esto puede ser problemático, porque según como esté configurado Pro-Ftpd, puede que si se lo encuentra con el shell /bin/false se raye y no nos deje iniciar sesión. Si solo vamos a utilizar este Wu-Ftpd podemos dejar el /etc/passwd asín:
... sshd:x:101:65534::/var/run/sshd:/bin/false borrajax:x:1001:1001:El Borrajudo,Ese,,:/home/borrajax:/bin/bash ftp:x:1002:100::/home/ftp:/bin/false ...
Bueno; tras este sabroso y ligero paréntesis, ya podemos continuar con la explicación acerca de los accesos al servidor y las movidas que nos aparecen por pantalla. Con esto que hemos puesto en /home/ftp/etc/passwd va que chuta. Para que salgan los nombres en lugar de los UID y GID cuando hagamos un ls, aún habrá que añadir alguna librería más a ~ftp/lib/. Esas son: libnss_compat.so.2 libnss_files-2.2.25.so libnsl.so.1
8
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Así, al hacer ls ó dir desde nuestro cliente ftp ya obtendremos:
Bueno. Y ahora, a mirar el fichero de configuración /etc/ftpaccess, que es el fichero en el que se detalla lo que es el funcionamiento, mensajes, permisos... del servidor ftp.
class limit all all real,guest,anonymous 5 Any * /etc/msgs/msg.dead
#Limitamos a los usuarios de cualquier tipo (anónimos, con #cuenta...) que puede haber en el servidor a 5
readme readme README* README* login cwd=*
#¿Cuándo leemos cosas?. Al loguearse (linea superior) y al #entrar en los directorios (linea inferior)
greeting text Servidor ready!!
#Mensaje a mostrar al conectarse al servidor
#Qué mensajes serán leidos, y cuando message /welcome.msg login message .message cwd=*
#¿Qué cosas leemos? Pues el welcome.msg cuando entremos al #servidor y los archivos .message que nos encontremos al ir #entrando en las diferentes carpetas
compress tar
yes yes
all all
#Permitimos comprimir y tarear a todos los usuarios
overwrite delete rename chmod umask no no no no no anonymous anonymous anonymous anonymous anonymous
#No permitimos sobreescribir, borrar, renombrar, cambiar el #modo ni la máscara de los archivos a los usuarios anónimos.
log commands real log transfers anonymous,real inbound,outbound
#Qué registraremos en /var/log/syslog: Los comandos #ejecutados por los usuarios con cuenta (linea superior) y #las transferencias que hagan tanto anónimos como reales
passwd-check rfc822 enforce
#Forzamos que el password dado por los anónimos cumpla el
9
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
#rfc822 (Que sea [carácter+]@[carácter+].[carácter+]). #Otra posibilidad es, en lugar de force, warn, y que diga #que la proxima vez ponga una dirección de correo valida, o #directamente borrar esta linea, con lo que no dice nada y #acepta todo lo que le echen.Ver Tabla 2
shutdown /etc/chumsg
#Mensaje para avisar de que el servidor se apaga
upload /home/ftp /incoming yes ftp ftp 0440 nodirs
#Permitimos a los usuarios anónimos subir ficheros al #directorio /home/ftp/incoming, pero al subirlos se le #aplicará la máscara 440 y además no permitimos que hagan #subdirectorios en incoming.
upload /home/ftp * no
#No permitimos subir archivos a ningún otro sitio
noretrieve /home/ftp
#Según esta orden no se puede descargar nada de ningún sitio
allow-retrieve /home/ftp/pub
#Con esto, permitimos descargas desde /pub cdpath / #para que esté donde esté pueda hacer cd pub Posibilidades de passwd-check Enforce y no entramos
Enforce y entramos
Warn
Tabla 2
El fichero /e tc/ftpaccess es el que controla prácticamente toda la configuración del Wu-Ftp. Jugueteando con sus opciones podemos tunear a nuestro gusto el servidor. Por seguridad, y tal y como se indica en la página 706 del libro Linux Administration Handbook se utilizarán los siguientes permisos para las carpetas: File /Dir ~ftp ~ftp/bin ~ftp/bin/ls ~ftp/etc Owner Mode root root root root 555 111 111 555 File/Dir ~ftp/etc/passwd ~ftp/etc/group ~ftp/pub ~ftp/lib Owner root root root root Mode 444 444 755 755
Aunque no lo dice en el libro, hemos tenido que establecer para el fichero incoming con estos permisos y dueños: File /Dir ~ftp/incoming/ Owner root Mode 733
10
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Si lo hubiésemos instalado con apt, se nos habrían algunas preguntas sobre la configuración, como por ejemplo, qué directorio queremos que se “instale” el usuario anonymous. Para que hubiese resultado igual que lo descrito hasta ahora deberíamos haber elegido /home/ftp. También decir que el archivo /etc/inetd.conf hubiese sido modificado automáticamente... Vamos, que es muy fácil. Para rematar la facilidad, si disponemos del gestor de ventanas Kde o, al menos, de las librerías necesarias (las kdelibs) podemos instalar también un programa muy apañado para configurar el Wu-Ftpd. Nosotros no lo vamos a usar, pero para los linuxeros débiles, que necesitan ventanitas, está muy bien. El nombre de esta aplicación tiene el original nombre de kwuftpd, y su aspecto...
11
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
2.3. Pruebas
2.3. 1. Pruebas de acceso
Un usuario anónimo intenta salir de su jaula chroot
Correcto. Siempre está en la jaula. Un usuario anónimo puede tomar algo de pub
12
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Un usuario anónimo no puede dejar nada en pub
Un usuario puede dejar algo en incoming
13
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Un usuario anónimo intenta tomar un fichero de incoming
Un usuario anónimo intenta rescribir un archivo de incoming
14
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Un usuario anónimo intenta dejar algo en un directorio cualquiera distinto de incoming
15
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
Un usuario anónimo intenta tomar algo de un directorio cualquiera distinto de pub
Todas las pruebas han resultado satisfactorias.
16
SANRI. Práctica 1 Servicio FTP BLANCO RIVAS, Héctor CABRERIZO PEREZ, David
2.3. 2. Pruebas de rendimiento
2.3. 2.1
Benchmark dkftpbench
Utilizaremos un benchmark hecho para demonios ftp, el dkftpbench, que podemos descargar de http://www.kegel.com/dkftpbench/ , compilarlo como siempre (con ./configure) y probarlo. Cuando nosotros hicimos la práctica, la versión a descargar era la 0.45, pero al intentar instalarla nos dio problemas, así que tuvimos que downgradearnos a la versión 0.42 que está Nosotros lo hemos descargado a /mnt/, para no variar. Extraeremos el tarball s..."
|
You need to upgrade your Flash Player , or try to enable javascript in order see this document properly.
|
|