martes, 6 de mayo de 2014

Bloque III - Configuración do sistema, kernel e dispositivos hardware

Ejercicio 1

a) Hacer una libreria estatica con makefile.Debes escribir dos funciones simples
en C que formarán parte de la libreria.
b) Modificar el archivo Makefile para compilar un objeto compartido.

Ejercicio 2

En este ejercicio queremos investigar el árbol de código fuente de Linux. Descarga la última versión
del núcleo desde kernel.org. Descomprimir el archivo del kernel en /usr/src y siga los pasos
siguientes:
1. Usar el codigo que bajaste para identificar los estructuras grandes. Confirmar el esquema de
Lec1B, pagina 8
2. Escribe un script utilizando find para encontrar el número total de archivos de tipo “.c”, “.h”
y “.S”. ¿Cuál fracción de archivos son de tipo “.S” ?
3. Escribe un script utilizando find y xargs que se imprimirá el número total de líneas de
código para toda la distribución (incluyendo o no incluyendo comentarios) utilizando
solamente. c,. h, y los archivos. S.


Otros Ejercicios

1. Comandos para encontrar hardware y drivers.
a) Para encontrar el hardware de tu sistema, investiga com funciona las siguientes
comandos: “dmesg” y “lshw”.
b) Como puedes encontrar información sobre el chipset de tu tarjeta de ethernet?
c) Puedes encontrar el modulo del kernel que controla este tarjeta?
d) El comando “lsmod” nos dar información sobre modulos instaldas. Puedes
encontrar el modulo del kernel para este tarjeta de ethernet? Donde es el modulo
del kernel?

SOLUCION


a) dmesg | grep eth0
b) find / -name ‘*.ko’    
      cd /lib/modules/
      ls
     uname -a   ||||  uname -r
     L=$(uname -r)
     cd /lib/modules/$(uname -r)
c)  dmesg | grep eth0
          lsmod  ///Encontramos r8169
          lsmod | grep 8169
          apropos hardware ///Parecido a lshw
          lshw  //Muestra todas las caracteristicas
          find ./ -name ‘*r8169*’
          lsmod
          lsmod | sed -e ‘1d’ | awk ‘{print $1}’  ///Eliminamos a primeira linea
          lsmod | awk '!/^MODULE/{print $1}'
          L=$( lsmod | awk '!/^MODULE/{print $1}')
          for i in $L; do find /lib/modules/$(uname -r) -name $i; done



2. Determinación de Devices
Cual es fichero /dev para el raton? Como puedes saber?
Intenta ver la salida del raton con el comando “cat”. Que pasa? Porque?

SOLUCION

a) psaux
b) find ./ -name '*mouse.ko' ---- ./3.8.0-29-generic/kernel/drivers/input/mouse/psmouse.ko
        find /lib/modules/$(uname -r) -name '*mouse.ko'    

 c) cat /dev/psaux
3. Crear un device (major/minor numbers)
Como en el ejemplo de clase (1B. P98), utiliza el comando “mknod” para crear tu
propio “null device”, /dev/null (pero en tu directorio home). Utiliza el fichero
“devices.txt” en la documentación del kernel (buscandolo en Internet), para saber la
correspondencia de major/minor numeros con un dispositivo de hardware particular.
4. [Using the Loopback Filesystem] En problema 2, hemos montado un sistema de
ficheros utilizando un dispositivo "loopback". Ahora vamos a crear ficheros y directorios
dentro de este dispositivo como si fuera un disco "normal".
• Primero, cambia los permisos en el dispositivo para que podemos hacer
read/write sin permisos especiales. Por ello, puedes utilizar este comando:
chown ­R administrador.administrador /media/fs
• Ahora "cd" a este punto de montaje y crear directorios y ficheros.
cd /media/fs mkdir one two three
ls ­l
• Explica que pasa.
• Ahora puedes "umount" como se fuera un partición cualquiera del sistema. La
manera de hacerlo es como siempre:
umount /media/fs • Puedes "mount" otra vez utilizando los comandos del problema anterior.
Comprueba que puedes montar el fichero otra vez y que se puede ver los
ficheros y directorios que has creado.
• Para dishabilitar completamente el dispositivo "loopback" puedes utilizar el
comando "losetup" utilizando la opción "-d", como siguiente:
losetup ­d /dev/loop0
• El sistema de ficheros de linux es completamente flexible y la abstracción de la
capa de VFS es completo. En este apartado, comprueba que puedes crear aun
otra loopback dentro del loopback de la sección anterior:
dd if=/dev/zero of=/media/fs/file2.img bs=1k count=1000
losetup /dev/loop1 /media/fs/file2.img
mke2fs ­c /dev/loop1 1000
mkdir /media/fs/media/fs2
mount ­t ext2 /dev/loop1 /media/fs/media/fs2
ls /media/fs/media/fs2
ls /media/fs
• Este demuestra un aspecto impresionante del sistema de ficheros de
Unix/Linux.
• ¿Como puedes utilizar este tecnica de loopback para crear sistemas de
ficheros completamente encriptada?
5. Comparar sistemas de ficheros: Utilice la técnica de loopback para montar un
disco como en problema 2. Seguir las siguientes pasos:
• Después de montar un dispositivo loopback como fichero, formatear el fichero
con un sistema de ficheros diferente: por ejemplo reiser, xfs y ext3
• Queremos comparar el tiempo que tarda en escribir ficheros y borrar ficheros
de cada uno de los sistemas de ficheros. Escribe un script de bash que
escribe/borra ficheros a cada sistema de fichero. Medir el tiempo utilizando la
función “time”. ¿Cual sistema de ficheros es mejor para esta operación?

6. Creando usuarios
a) Utiliza “adduser” para crear un usuario, “tux” con ID 600 y ID de grupo 550
b) Utiliza “usermod” para cambiar el directorio home de este usuario.
c) Tienes que crear este directorio primero? (Pista: leer sobre opción “-m” )
d) Que pasa con el contenido de “/etc/skel” ?
e) Utiliza “usermod” para añadir “tux” al grupo “wheel”. Que es el grupo “wheel”?
7. Modificando una cuenta
a) Cambiar la fecha de caducidad para la cuenta de “tux” usando “usermod”.
b) Bloquear la cuenta de “tux” usando herramientas o editando “/etc/shadow”
c) Evitar que el usuario puede ejecutar login, cambiando el shell por defecto a
“/bin/false”
d) Cambiar el parametro PASS_MAX_DAYS del usuario “tux” a 1 en /etc/shadow
8. Ficheros de configuración
a) Añadir un usuario al sistema manualmente modificando los ficheros “/etc/passwd”
y “/etc/group”
b) Crear un grupo denominado “share” y añadir un usuario “tux” a este grupo
modificando manualmente “/etc/group”



Otros ejercicios

1. [ Intro a IP y ifconfig ] En este ejercicio, vas a configurar una red utlizando el comando
/sbin/ifconfig  y los comandos para configurar un “default gateway”   Un ejemplo de dos
redes con tres equipos (pc0, pc1, pc2)  esta dado en el ejemplo abajo  (debes crear
redes privadas en los dos casos utilizanod redes como 10.0.0.1 y 11.0.0.1 por
ejempo).
1. Establecer los IPs para cada equipo en este red.
2. Habilitar el equipo pc1 como el “default gateway”.    Tambien configurar “ip
forwarding” en este equipo para que paquetes puede pasar entre los dos redes.
3. Hacer pruebas con un programa de monitorizacón de red explicado en clase.
Dishabilitar ping a uno de los equipos y demostrar que bloquea los paquetes
icmp.

SOLUCION


Pc
1. ifconfig eth0 10.10.0.2 netmask 255.255.0.0
    route add default gw 10.10.0.1 eth0
    ifconfig eth0 up
 3.echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all


(Getaway)
2.ifconfig eth0 10.10.0.1 netmask 255.255.0.0
   ifconfig eth0:1 10.11.0.1 netmask 255.255.0.0
   ifconfig eth0 up
   ifconfig eth0:1 up
   echo "1" > /proc/sys/net/ipv4/ip_forward

Pc
1. ifconfig eth0 10.11.0.2 netmask 255.255.0.0
    route add default gw 10.11.0.1 eth0
    ifconfig eth0 up
2.ssh admistrador@10.10.0.2

3.
 
2 [ traceroute y tcpdump ]  En este ejercicio, vamos a estudiar dos comandos potentes
relacionado con interfaces de redes:   traceroute y tcpdump.  Seguir las siguientes
pasos:
• traceroute:  es un comando para ver el encaminamiento de paquetes de un red
a otra.   Si quieres saber los tramos de un paquete, de tu máquina hasta otra
puedes ejecutar   traceroute < nombre_de_host>.   Ejecutar las siguientes
traceroute www.cesga.es
• Utilizar traceroute para empezar construir una mapa de paquetes saliendo de
tu máquina al Internet.  Comparar este comando con los resultados en la web
de http://www.yougetsignal.com/tools/visual­tracert/
• tcpdump: que analiza todo el trafico que pasa por un interfaz.   Ejecutar la

siguiente comando y explica lo que hace:
Comprobar las siguientes comandos con tcpdump:
• Imprimir todos las paquetes lleganda o salidiendo de tu equipo pc0:
tcpdump host  pc0
• Imprimir trafico entre tu equipo (pc0) y  (pc1 o pc2 ):
tcpdump host pc0and \( pc1 or pc2 \)
• imprimir todos las paquetes IP entre pc1 y cualquier host excepto pc2:
tcpdump ip host ace and not helios
• Imprimir todo el trafico entre el host local y host remoto:
tcpdump net ucb­ether
• Imprimir todo el trafico de ftp que  pasa a traves de un gateway pcgw :
tcpdump 'gateway pcgw and (port ftp or ftp­data)'
• To print all ICMP packets that are not echo  requests/replies (i.e., not ping
packets):
tcpdump 'icmp[icmptype] != icmp­echo and icmp[icmptype] != icmp­echoreply'

SOLUCION


a) sudo tcpdump host 192.168.1.152
b) sudo tcpdump host 192.168.1.152 and 192.168.1.141
c) sudo tcpdump ip host 192.168.1.152 and not 192.168.1.141
d)
e)

f) sudo tcpdump 'icmp[icmptype]!=icmp-echo and icmp[icmptype]!=icmp-echoreply'

3. [ Redes, cron y scripts ] Imagina que eres administrador/a de un dominio de Internet y 
de repente se nota una notable lentitud con la respuesta de su servidor. Conociendo 
algo de seguridad, sabes que este puede ser por culpa de muchas paquetes mal 
intencionada bombardeando su servidor web (que se llama DoS o “denial of service”). 
Quieres analizar todos los paquetes que llega a tu servidor, y en particular el servidor 
web. Vas a escribir un script que se puede ejecutar con cron periódicamente. Sigue las 
siguientes instrucciones para construir el script y configurar cron:
• Utilizando el comando “tcpdump”, escribe un comando para determinar si 
existe un ataque de DoS (denial of Service).
• Utilizar “awk” para que se clasificar los paquetes que llega de cada sitio. Con 
este información utilizar una “heurística” para fijar un criterio particular que 
corresponde a un DoS. Si un DoS existe, se debe recoger información del 
origen de los paquetes, formar un comando de “iptables” que es capaz de 
bloquear cualquier paquete de este dirección, y enviar este comando al “root” 
por “mail”.
• Configurar “cron” para que se ejecuta su script cada domingo del mes a las 
23:30 por la noche.

4. Practica con IPtables
Comprobar las siguientes comandos para listar las reglas de Iptables: 
$ sudo iptables ­n ­L                              //Filter rules, IP numbers (no DNS lookup) 
$ sudo iptables ­v ­L                               //Verbose output (with packet/byte counts) 
$ sudo iptables ­L ­­line­numbers           //Show line number in chain for each rule 
$ sudo iptables ­nvL –line­numbers    
La manera para eliminar (flush) reglas de iptables:  
$ sudo iptables ­F Flush all iptables rules 
Comprobar los siguientes ejemplos utilizando iptables command para cambiar reglas 
en el firewal actual:  
• Este ejemplo va a crear una regla para permitir solicitudes hacia dentro en el 
puerto 25  (puede ser util para la configuración de un mail server con sendmail, 
postfix, o otro servicio  SMTP ).
$ sudo iptables ­A INPUT ­p TCP   \            // Add filter input rule for TCP packets 
                         ­i eth0 \                                // on the first Ethernet interface 
­­destination­port 25 \                                   //  destined for mail service port (25) 
­j ACCEPT                                                   // to accept those packets when encountered 
• Este ejemplo crea una tabla para permitir Source Network Address Translation 
(SNAT),   permitiendo una dirección IP privada detras de un cortafuego  que 
puede comunicar con el Internet.  
$ sudo iptables ­t nat \                                     //Add nat rule  
­A POSTROUTING   \                                     //POSTROUTING chain 
­o eth1    \                                                        // for packets received on eth1 interface 
­j SNAT \                                                         // jump to network address translation 
­­to­source 11.22.33.1                                    //using outgoing address 11.22.33.1 
• Este ejemplo utiliza “port forwarding”  para pasar los solicitudes a un servicio a 
un servidor detras y a traves de un firewall: 
$ iptables ­t nat ­A PREROUTING \             // Add nat PREROUTING rule 
­p tcp ­d 11.22.33.1 \                                    //accepts tcp requests on 11.22.33.1 
­­dport 80 \                                                    //for port 80 (Web service) 
­j DNAT \                                                      // jump to the DNAT target 
­­to­destination 10.0.0.2                               // forward those packets to 10.0.0.2