2 de junio de 2009

Fortalecimiento básico de Linux: LILO (1/8)

Desde hace ya algún tiempo está demoda aquello de que hay que fortalecer los sistemas a fin de hacerlos inmunes a ataques que pudieran comprometer la seguridad del sistema. En la mayoría de las veces los aministradores de sistemas de preocupan por poner firewalls, honeypots, jaulas, IDSs y cuanta cosa encontramos, olvidando que un número muy alto de los ataques provienen del interior de los sistemas. Es decir, de los usuarios, ya sea que simplemente estén probando cosas, pasando por los que tiene una idea más clara de lo que hacen, hasta aquella cuenta que ha sido robada y es usada por un profesional.

Es por ello que se me ocurrió escribir una pequeña receta para aquellos administradores de Linux que que tienen usuarios que accesen al shell.

1. Que no te reinicien la máquina.

En muchos casos, se sigue utlizando LILO como gestor de arranque de los sistemas Linux, es por ello que es importante mantenerlo seguro. De lo contrario, alguien se puede introducir a la sala de servidores y hacer travesuras con el SO.

El archivo /etc/lilo.conf es el archivo de configuración del LInux Loader (Cargador de Linux), de ahí su nombre (LILO).

Página manual: man 5 lilo.conf

Para asegurar que se teclee un password cuando se quiera arrancar un kernel, es necesario usar el keyword:

password=


Si se agrega esta opción es necesario hacer que el archivo sea de lectura sólo por el root.

Esto se logra con un:

> chmod 600 /etc/lilo.conf

Por otro lado, la opción

restricted

indica que se requerirá de un password durante el proceso de inicio del sistema si es que se especifica algún parámetro del kernel en la línea de comandos, como single.

Para que los cambios tengan efecto es necesario re compilar el archivo de inicio con el comando

> lilo -v

Supongamos que /etc/lilo.conf contiene las siguientes entradas:

1: prompt
2: timeout = 50
3: image = /boot/vmlinuz1
4: root=/dev/hda1
5: label=L1
6: image=/boot/vmlinuz2
7: root=/dev/hda2
8: label=L2

Significa en pocas palabras que al arranque el sistema operativo presentará el prompt para seleccionar la imagen del kernel con la que queremos arrancar, o bien, para pasarle opciones a la imagen por defecto, el cual permanecerá visible por 5 segundos (según líneas 1 y 2), luego, tenemos dos imagenes de kernel instaladas: L1 y L2 (líneas 3 a 8).

Podemos insertar una línea nueva con la directiva password, justo después de la línea 2, e tal forma que el contenido se modifica así:

1: prompt
2: timeout = 50
3: password=S3cr3T0
4: image = /boot/vmlinuz1
5: root=/dev/hda1
6: label=L1
7: image=/boot/vmlinuz2
8: root=/dev/hda2
9: label=L2

Salvamos los cambios y ejecutamos lilo -v, de no haber errores reiniciamos la máquina y listo! En lugar de aparecer el prompt normal, aparece uno solicitando el password.

Esta opción por sí misma no es muy útil pues, si en algún momento el servidor se apagara, al regresar, forzosamente tendría que escribirse la contraseña. Si el administrador no está a la mano, pasaríamos al menos una media hora con el sisema abajo.

Por ello usamos restricted y password a la ves. De tal manera que ahora el lilo.conf quedara así:


1: prompt
2: timeout = 50
3: image = /boot/vmlinuz1
4: restricted
5: password=S3cr3t01
4: root=/dev/hda1
6: label=L1
7: image=/boot/vmlinuz2
8: restricted
9: password=S3cr3t02
10: root=/dev/hda2
11: label=L2

Con esta modificación el sistema operativo se levantará normalmente y mientras nadie intente pasarle opciones especiales a ninguna de las imagenes del kernel, entónces no aparecerá ningúna petición de password. En cambio, si durante la ventana de 5 segundos, se le indica al sistema que va a arrancar con la imagen L1 en runlevel 1 (L1 single), el usuario será interroado por el password específico para esa imagen (S3cr3t01).

De esta manera conseuimos que al menos, nadie que se siente en la consola pueda iniciar el sistema de manera diferente a la default.

1 comentario:

Leo dijo...

Excelente entradas. Gracias por la ayuda