Está en la página 1de 25

Configuración de Seguridad en servidores Linux

2 SEGURIDAD FÍSICA

2.1 Introducción

En esta lección se aborda el tema de la seguridad física, la cual engloba


diversos aspectos relacionados con el acceso físico a la máquina servidora,
especialmente durante su proceso de arranque.

Como se tratará a continuación, no hay seguridad física sin restringir y controlar


el acceso físico al sistema. Por ello, se ha establecido una serie de aspectos
que se deben tener en cuenta para evitar un acceso no autorizado.

En caso de que alguien haya accedido ya al servidor, cualquier medida tomada


después es inútil. Sin embargo, una adecuada configuración previa del software
relacionado con el arranque, evitará que se vuelva a comprometer el sistema.
Este software incluye a la BIOS, el gestor de arranque y la configuración de
arranque del sistema operativo.

2.2 Objetivos

Los objetivos a los que llegaremos en esta lección son los siguientes:

 Conocer los pasos del proceso de arranque.


 Concienciarse acerca de los peligros derivados del acceso físico al
servidor.
 Aprender a configurar de forma segura una BIOS.
 Comprender el papel del gestor de arranque y cómo evitar su uso
fraudulento.
 Evitar configuraciones inseguras del fichero inittab.

2.3 Acceso físico

La posibilidad de acceder físicamente a un servidor GNU/Linux, como en


general a cualquier otro sistema operativo, hace inútiles casi todas las medidas
de seguridad que se puedan aplicar sobre el mismo.

Mediante un acceso físico a un servidor se pueden realizar acciones como


desmontar la máquina y extraer un disco duro para leer, modificar o destruir su

Seguridad en Linux 34
Configuración de Seguridad en servidores Linux

contenido, sin importar los permisos que se tenga o si las contraseñas se han
elegido siguiendo criterios de robustez, o que el firewall bloquee toda petición
improcedente a través de la red.

Aunque este planteamiento parezca exagerado para un lugar de trabajo o un


laboratorio, sí que es posible de una forma discreta utilizar discos de arranque
o incluso live CD‟s. De esta forma se puede acceder al contenido de la máquina
o utilizar el equipo para ejecutar sniffers u otras amenazas para el resto de la
red.

Por tanto, el acceso físico es un eslabón fundamental en la seguridad de un


sistema que debe ser cuidado, extremando las precauciones al respecto. Esto
último se aplica no sólo al acceso a la sala del servidor, sino también al acceso a
la red más cercana. Por ejemplo, una toma en un lugar poco privado o el uso de
WiFi sin proteger son típicos casos de puertas abiertas.

Las medidas que se han de tomar varían mucho en alcance y sobre todo en
precio. Las más elementales son también las menos caras, como mantener
cerrada con llave la sala de ordenadores al abandonarla y bloquear las tomas de
red no utilizadas. Otro aspecto al que se presta poca atención, es al cableado
que suele ser accesible, anulando las ventajas de tener bajo llave al servidor.

Otras medidas más caras pueden ser la utilización de cámaras de seguridad y


de sistemas de identificación para acceder a los departamentos del edificio:
smartcards, lectores de huellas digitales o de retina.

Un sistema de cámaras en circuito cerrado de seguridad es una medida capaz


tanto de prevenir como de detectar las violaciones de acceso. Sin embargo, uno
de los métodos más efectivos para evitar interferencias es concienciar a los
usuarios legítimos y gente cercana para que avise de la presencia de intrusos.

2.4 Asegurar el proceso de arranque

Un aspecto fundamental de la seguridad de un servidor Linux es el proceso de


arranque que hay que asegurar para dificultar en lo posible la manipulación del
sistema durante esta fase de su uso.

Se denomina proceso de arranque a la serie de pasos y fases que atraviesa la


máquina desde que se conecta hasta que llega al estado de funcionamiento

Seguridad en Linux 35
Configuración de Seguridad en servidores Linux

pleno. El primer paso es la ejecución de la BIOS, que se encarga de tareas


básicas necesarias para el arranque y que cede el control al gestor o cargador
de arranque.

El gestor de arranque es un programa que se aloja en el MBR (Master Boot

Record) de algún disco y que se encarga de cargar el núcleo del sistema


operativo (kernel) y cederle el control. Puede ofrecer varias opciones de
arranque, que permitan cargar distintos núcleos o con distintos parámetros.

Una vez que el sistema operativo ha realizado algunas inicializaciones básicas,


se lanza el primer proceso, llamado init. Este proceso lanza las tareas
necesarias para que el sistema esté en pleno funcionamiento, y lo hace
siguiendo la configuración descrita en el fichero inittab. Estas tareas son
fundamentalmente demonios y procesos de login.

2.4.1 Configuración de la BIOS

La BIOS, Basic Input Output System, es un programa especial ya que es el


primero que se ejecuta al arrancar un ordenador de tipo PC, y se encarga de
realizar comprobaciones al hardware tales como chequeos de memoria,
presencia de periféricos, temperaturas, etc. A esta ronda de comprobaciones se
le denomina POST (Power On Self Test).

Este programa está almacenado en un chip PROM en la placa base, con lo que
siempre está disponible, incluso antes de instalar el sistema operativo. Su
configuración se almacena en el propio chip y se mantiene a pesar de estar

Seguridad en Linux 36
Configuración de Seguridad en servidores Linux

desconectado el ordenador gracias a la pila de la placa base en los modelos


antiguos o gracias a que está guardado de forma persistente en la PROM en
los modelos nuevos.

Tras el POST, la BIOS busca un dispositivo desde el que arrancar, utilizando


una lista de preferencias denominada secuencia de arranque (boot sequence).
El primer gestor de arranque que se encuentre será llevado a memoria y puesto
en ejecución.

Si en la secuencia de arranque se encuentran medios extraíbles como


disqueteras o unidades de CD o DVD antes que el disco duro, dónde está
instalado el sistema operativo, hay un problema de seguridad. Cualquier
persona con acceso al servidor podría utilizar un disquete de arranque o una
live cd para comprometer el sistema.

Para acceder a la configuración de la BIOS es necesario pulsar una tecla o


combinación de teclas durante la fase de POST. Esta combinación es
dependiente del fabricante de la BIOS y se puede consultar en el manual de la
placa base. En la tabla siguiente se muestran las combinaciones de las BIOS
más comunes.

BIOS Combinación de teclado

AMI BIOS Tecla Supr

Award BIOS Teclas Ctrl-Alt-Esc o Supr

DTK BIOS Tecla Esc

IBM PS/2 Ctrl-Alt-Insert y después Ctrl-Alt-Supr


BIOS
Phoenix BIOS Ctrl-Alt-Esc o Ctrl-Alt-S o F1

No obstante, antes de realizar cualquier modificación, se recomienda anotar los


valores previos, puesto que aunque siempre es posible regresar a la pantalla
de configuración de la BIOS, la modificación inadecuada de la misma puede
dejar inutilizable el sistema operativo.

Una vez en la pantalla de configuración, se pueden observar distintas secciones


por las que se puede navegar y que contienen las opciones configurables.

Seguridad en Linux 37
Configuración de Seguridad en servidores Linux

Para moverse entre las opciones se utilizan las flechas de dirección (arriba,
abajo, izquierda o derecha). Cuando se esté sobre un submenú se puede
entrar a él mediante la tecla Entrar y posteriormente regresar con la tecla Esc.

La mayoría de las BIOS suelen mostrar ayuda en línea acerca de las opciones
configurables, y en algunos casos información adicional pulsando F1.

Finalmente, para modificar los valores se utilizan las teclas AvPág y RePág,
que permiten recorrer la lista de posibles valores en ambos sentidos.

Las secciones interesantes en lo que respecta a la seguridad del sistema son:

a) Standard CMOS: En esta sección se pueden modificar la hora y la


configuración de los discos duros, que son los que se utilizarán en la
secuencia de arranque.
b) BIOS features: Tiene dos subsecciones relevantes:

a. Boot Sequence: Aquí se configura la secuencia de arranque. Hay


dos variantes. En la primera, se tienen tres variables: first boot
device, second boot device y third boot device. Cada una de ellas
puede adoptar como valor cualquiera de los discos duros o
unidad de CD/DVD, floppy disk o disabled (sin uso). Según el
modelo concreto de BIOS, los nombres pueden variar y pueden
aparecer nuevas opciones como arrancar desde discos USB o
desde red.
En la segunda variante, se tiene una lista de prioridad y se
ordenan las opciones, siendo las superiores las primeras en
utilizarse al arrancar.
b. Security Option: Aquí se puede establecer la contraseña de
administración y decidir cuándo se pedirá al usuario:
i. Disabled: No se utiliza la contraseña.
ii. Setup: Se exige la contraseña para entrar a la pantalla de
administración.
iii. System: Se exige la contraseña tanto para arrancar el
sistema como para acceder a la pantalla de administración.

Por omisión, la pantalla de configuración no está protegida por contraseña, pero


si se desea que las opciones de seguridad tengan sentido, es necesario exigir

Seguridad en Linux 38
Configuración de Seguridad en servidores Linux

una contraseña para acceder a la pantalla de configuración de la BIOS o a todo


el sistema si se desea.

Independientemente de cuál de las dos variantes de configuración de la


secuencia de arranque se haya empleado, es necesario eliminar todos los
medios extraíbles de la misma (CD, DVD, USB disks) y el arranque por red,
dejando como primera y única opción el disco duro donde esté instalado el
sistema operativo.

2.4.2 Configuración del gestor de arranque

El gestor de arranque (boot loader) es un programa que se pone en ejecución


por la BIOS durante el arranque y cuyo objetivo es cargar la imagen del sistema
operativo desde el disco duro a memoria y cederle el control.

El gestor de arranque reside en el primer bloque de algún disco duro o extraíble,


que es conocido como Master Boot Record (MBR). Debido a la restricción de
tamaño del MBR, es común que el gestor de arranque esté divido en varias
fases (stages), la segunda de las cuales es capaz de leer del disco. Por
ejemplo, la segunda fase del gestor de arranque de los sistemas Windows 2000
y XP es el NTLDR.

Los dos gestores de arranque más utilizados en Linux son LILO (Linux Loader) y
GRUB (GRand Unified Boot loader). Actualmente, GRUB está en desuso y en
su lugar se ha migrado hacia GRUB 2, una completa reescritura del gestor
original, más limpio, robusto, seguro y potente, que lleva funcionando desde
aproximadamente el año 2009.

La seguridad del gestor de arranque se apoya en la correcta configuración de


la BIOS. Si no se evita el arranque desde las unidades extraíbles (CD/DVD,
disquetes), un intruso podría tomar el control de la máquina sin siquiera
ejecutarse el gestor de arranque instalado. Además, es necesario tener
correctamente configurado el gestor para evitar algunas situaciones vulnerables.

Para comprender los ficheros de configuración, se deben conocer previamente


los siguientes conceptos:

 Kernel o núcleo: Es la parte central del sistema operativo que trata


directamente con el hardware y que da soporte a las aplicaciones
ofreciendo servicios. Además, se encarga de muchas otras tareas
Seguridad en Linux 39
Configuración de Seguridad en servidores Linux

críticas para el sistema como controlar los permisos para el acceso a


recursos, mantener estadísticas, etc.
Es la primera parte del sistema operativo que se debe cargar.
 Opciones del kernel: Cuando el gestor de arranque pone en ejecución
al núcleo del sistema operativo puede pasarle opciones (generalmente
pares clave-valor o banderas). De esta forma, se le puede comunicar
dónde está ubicada la raíz del sistema de ficheros, o que no se intente
usar un subsistema como el ACPI.

 Disco RAM (o ramdisk): Generalmente, los núcleos no tienen todo su


código en un único binario, sino repartido en una imagen principal y
una serie de módulos. Estos módulos pueden encargarse de dar
soporte a dispositivos como por ejemplo al disco duro. En ese caso se
puede dar una paradoja, como el gestor de arranque sólo carga la
imagen principal en memoria, y el driver del disco duro está en disco,
el kernel nunca podría cargarlo porque lo necesita para hacerlo. La
forma de romper esta cadena es colocar los módulos o un subconjunto
mínimo de los mismos en un fichero denominado ramdisk que el gestor
de arranque sí puede cargar en memoria para que lo utilice el kernel.

2.4.2.1 Fichero lilo.conf

La configuración de LILO se realiza mediante el fichero /etc/lilo.conf que


contiene todos los datos necesarios para arrancar el sistema. Ya que LILO no
tiene la capacidad de comprender el sistema de ficheros durante el arranque,
toda la información contenida en este fichero es codificada en el sector de
arranque. Esto se realiza mediante el comando /sbin/lilo, que debe ser
ejecutado cada vez que se modifique lilo.conf o se cambie la imagen del
kernel.

Dentro del fichero se especifican las opciones como una serie de asignaciones
de valores a ciertas claves de la forma:

clave = valor

Las opciones más importantes son:

a) Boot: Sirve para indicar qué dispositivo de disco contiene el sector


de arranque. Por ejemplo, el primer disco SCSI:

Seguridad en Linux 40
Configuración de Seguridad en servidores Linux

boot=/dev/sda1

b) Lba/Linear: Estas opciones permiten indicar diversas formas para


interpretar las direcciones físicas de los discos. Dependiendo del tipo
de disco y de BIOS es necesario utilizarlos.
c) Prompt: Permite al usuario escribir interactivamente la opción
deseada para el arranque. Si no se especifica, también la opción
delay, el sistema no arrancará automáticamente.

d) Delay: Permite indicar en décimas de segundo el tiempo que se


esperará alguna entrada del usuario antes de arrancar la opción
por omisión. Por ejemplo, para esperar tres segundos:

delay=30

e) Image: Define una opción de arranque. El valor que se le asigna es


la ruta hasta el archivo del kernel, por ejemplo: image = /zImage-
2.5.99. A continuación, de cada image se pueden establecer una
serie de opciones adicionales que sólo afectan a esa imagen y que
son:
a) Root: Indica cuál es el sistema de ficheros raíz del sistema
operativo.
b) Label: Nombre con el que se podrá invocar la opción.
c) Initrd: Ruta al ramdisk necesario para arrancar Linux. No
siempre es necesario.

image=/boot/vmlinuz-2.6-18

label=Linux26

root=/dev/sda1

initrd=/boot/initrd-2.6-18

f) Default: Determina cuál es la opción que se utilizará por omisión


al expirar el plazo establecido mediante delay.

2.4.2.2 Fichero menu.lst en GRUB ó grub en GRUB2

El fichero de configuración principal del GRUB está alojado generalmente en


/boot/grub/menu.lst en Debian (y otras distribuciones de Linux) y su rol

Seguridad en Linux 41
Configuración de Seguridad en servidores Linux

es diferente al del lilo.conf. Esto es debido a que GRUB es capaz de leer


del sistema de ficheros durante el arranque, por lo que la única información que
es necesaria almacenar en el sector de arranque es la ubicación del fichero de
configuración.

Las opciones se especifican de forma un poco diferente a las del lilo.conf.


También, son pares de clave y valor, pero no están separados por un símbolo
de igualdad (=) sino por espacio en blanco. Por ejemplo:

clave valor

El fichero de configuración tiene dos tipos de opciones, unas que tienen un


efecto global y otras que son particulares para cada modo de arranque. Todas
ellas son asignaciones de valores a claves. Las opciones globales más
importantes son las siguientes:

a) Default: Toma un valor entre 0 y N-1, siendo N el número de modos


de arranque definidos. Esta opción especifica cuál es el modo
seleccionado por omisión al arrancar el sistema. Por ejemplo, para
arrancar el primero de los modos:

default 0

b) Timeout: Contiene el número de segundos que se esperará hasta


arrancar el modo por omisión. Si se establece a 0 se esperará
eternamente.

Las opciones particulares para cada modo de arranque se agrupan en


secciones, cada una de las cuales comienza con la opción title.

a) Title: Establece el nombre del modo que será mostrado en el


menú de arranque.
b) Root: Indica el dispositivo que contiene la imagen del kernel. Su
formato suele ser (hdX:Y), donde X indica el disco a emplear (0
identifica al primer disco) e Y indica la partición (0 identifica la primera
partición).
c) Kernel: Establece la ruta hasta la imagen del kernel. Las opciones
que se deseen pasar al mismo se pueden añadir al final de la línea.
d) Append: Permite añadir entre comillas dobles (“”) opciones

Seguridad en Linux 42
Configuración de Seguridad en servidores Linux

adicionales para el kernel. Se recomienda consultar la


documentación del kernel antes de añadir alguna de estas opciones.
e) Initrd: Indica la ruta hasta el ramdisk del kernel. En algunos
casos es opcional.

Un ejemplo de un modo de arranque completo podría ser:

title Debian GNU/Linux, kernel 2.6.16-2-686-smp


root (hd0,0)
kernel /vmlinuz-2.6.16-2-686-smp root=/dev/sda1 ro vga=0x317
initrd /initrd.img-2.6.16-2-686-smp

En GRUB2, tenemos el archivo /etc/default/grub, el cual se puede editar:

# vim /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""

Aquí GRUB no manda de inmediato el sistema operativo por default, sino que
da un tiempo de 10 segundos durante los cuales uno puede elegir la opción
que se prefiera. Si existe más de un sistema operativo instalado, se procede de
la misma manera que con el antiguo GRUB, editando el archivo menu.lst, para
cambiar la opción GRUB_DEFAULT=0 por el número que se prefiera.

2.4.2.3 Vulnerabilidades en la configuración del gestor de arranque

Modo monousuario
Uno de los problemas que puede surgir es que el gestor de arranque permita
cargar el sistema operativo en modo monousuario. Este modo se suele utilizar
para realizar ciertas tareas de administración o reparación del sistema. Según
como esté configurado el inittab puede suceder que en este modo se abra una
shell de root sin necesidad de introducir ninguna contraseña. En ese momento
bastaría el comando

$ passwd

Seguridad en Linux 43
Configuración de Seguridad en servidores Linux

para tener el control absoluto del sistema (cambiando el password del


administrador).

Para evitar esta incidencia, se debe o bien eliminar las opciones de arranque
en modo monousuario o bien protegerlas con contraseña. Esta segunda opción
se realiza de forma diferente en GRUB y en LILO.

En GRUB se añade la cláusula password al bloque de la opción a proteger.


Esta opción puede ir seguida de la contraseña en texto claro o del texto --md5 y
un hash md5 de la misma. En el primer caso bastaría con:

title Debian GNU/Linux, kernel 2.6.16-2-686-smp


password c0ntr453ny4
root (hd0,0)
kernel /vmlinuz-2.6.16-2-686-smp root=/dev/sda1 ro single
initrd /initrd.img-2.6.16-2-686-smp

Para generar el hash md5 a partir de la contraseña, el gestor GRUB incluye


una utilidad denominada grub-md5-crypt. Este comando solicita dos veces la
contraseña para evitar errores ya que no muestra por pantalla el texto
introducido. La última línea del siguiente cuadro es la salida del programa.

# grub-md5-crypt
Password:

Retype password:
$1$01mZ2$qBsrALN.SGtETg9sE9GtL.

Una vez copiado el hash al fichero de configuración, el resultado final será


el siguiente:

title Debian GNU/Linux, kernel 2.6.16-2-686-smp


password --md5 $1$01mZ2$qBsrALN.SGtETg9sE9GtL.
root (hd0,0)
kernel /vmlinuz-2.6.16-2-686-smp root=/dev/sda1 ro single
initrd /initrd.img-2.6.16-2-686-smp

En LILO sólo existe la posibilidad de añadir la opción password con la


contraseña en texto plano. La opción de arranque modificada se puede ver en
el siguiente cuadro:

Seguridad en Linux 44
Configuración de Seguridad en servidores Linux

image=/boot/vmlinuz-2.6-18
password=c0ntr453ny4
label=Linux26
root=/dev/sda1
append=”single”
initrd=/boot/initrd-2.6-18

Tras modificar el fichero lilo.conf se recuerda que es necesario ejecutar


/sbin/lilo para actualizar el cargador de arranque.

En cualquiera de los dos casos, una vez añadidas las contraseñas al fichero de
configuración, es necesario asegurar que los permisos de acceso al fichero
no permitan que cualquier usuario pueda leerlos. Para ello, se pueden ejecutar
los siguientes comandos:

 LILO:

# chmod 0600 /etc/lilo.conf

 GRUB:

# chmod 0600 /boot/grub/menu.lst

Alteración de las opciones del kernel


Otro problema de seguridad consiste en dejar abierta la posibilidad de modificar
los parámetros de arranque del kernel. Si no se prohíbe en la configuración,
cualquier usuario podría utilizar las opciones “1” o “single” para arrancar en
modo monousuario.

También, se podría utilizar las opciones “init=/bin/bash” o


“init=/bin/sh” para substituir el proceso init por una shell desde la que
vulnerar el sistema. En ese momento se podría modificar la contraseña de
administración salvo por el de que al no haberse completado el arranque, la
raíz del sistema está montada en modo sólo lectura. Para habilitar las
escrituras utilizaremos el comando mount:

# mount –n –o rw,remount /

Para añadir estos parámetros adicionales con un LILO configurado


inseguramente, basta con escribirlos en el prompt tras el nombre de
cualquier kernel. En un GRUB igualmente inseguro se puede utilizar la

Seguridad en Linux 45
Configuración de Seguridad en servidores Linux

tecla „e‟ para editar un elemento del menú y luego la tecla „b‟ para arrancarlo.
Adicionalmente, se puede utilizar la tecla „c‟ para mostrar un prompt en el que
construir desde cero una opción de arranque.

La única solución a este problema si se utiliza LILO es utilizar la opción


password, pero en la sección de opciones globales. De esta forma se pedirá
siempre contraseña al arrancar, lo que no es una solución muy satisfactoria.

Sin embargo, bajo GRUB, aunque la solución es muy similar es mucho


más adecuada. Se debe añadir al fichero menu.lst la siguiente línea en las
opciones globales (antes de las opciones de arranque):

password --md5 $1$01mZ2$qBsrALN.SGtETg9sE9GtL.

A partir de este momento, se deberá pulsar la tecla “p” y después introducir la


contraseña para poder editar las opciones de arranque o acceder al prompt.
Además se cuenta con la flexibilidad de que se puede arrancar por omisión sin
contraseña.

2.5 Configuración del proceso init

Una vez que la BIOS ha cedido el control al gestor de arranque y éste ha


puesto en ejecución al kernel del sistema operativo, Linux realiza operaciones
de inicialización. Es entonces cuando el primer proceso inicia su ejecución y el
sistema pasa a ofrecer sus servicios a los usuarios. Este proceso se denomina
init por esta razón.

Entre las responsabilidades del proceso init está la creación de los terminales, la
puesta en ejecución de los demonios, y la inicialización de la pantalla de
login gráfico si el servidor dispone de una. Además, este proceso se encarga
de mantener el run level o nivel de ejecución y de realizar transiciones entre
niveles.

La razón de ser de los niveles de ejecución, es que los servicios que init lanza
pueden variar según el uso que se le dé a la máquina o según el momento en
el que uno se encuentre. En algunos momentos el sistema está arrancando, en
otros se desea estar en modo multitarea, con o sin red; o se pueden desear
niveles personalizados que ejecuten o no ciertos servicios.

Seguridad en Linux 46
Configuración de Seguridad en servidores Linux

Los niveles de ejecución están numerados de forma distinta en cada


distribución, habiendo dos configuraciones muy extendidas. En las distribuciones
de Linux como Red Hat, Fedora Core y relacionadas, los niveles son:

 Nivel 0: halt, parada del sistema.


 Nivel 1: modo monousuario.
 Nivel 2: no se utiliza por omisión.
 Nivel 3: multiusuario completo.
 Nivel 4: no se utiliza por omisión.
 Nivel 5: multiusuario completo con login gráfico.
 Nivel 6: reinicio del sistema.

En Debian, Ubuntu, y otras derivadas (aunque Ubuntu no usa el fichero inittab),


los niveles están definidos de esta forma:

 Nivel 0: halt, parada del sistema.


 Nivel 1: modo monousuario.
 Nivel 2: multiusuario completo con login gráfico.
 Niveles 3-5: Por omisión igual que el nivel 2.
 Nivel 6: reinicio del sistema.

Los niveles que no se utilizan por omisión se pueden personalizar por parte del
administrador del sistema. Además, se puede utilizar S para referirse de forma
genérica al nivel monousuario.

2.5.1 Fichero inittab

La información necesaria para realizar todas estas tareas de forma adecuada


se almacena en el fichero /etc/inittab. Este fichero tiene una sintaxis simple y
clara que soporta comentarios y un único tipo de formato de opciones. Ubuntu
emplea el directorio /etc/event.d en lugar del fichero /etc/inittab.

Los comentarios comienzan con un carácter “#” y continúan hasta el final de la


línea. Por ejemplo:

# esto es un comentario
# para el inittab

Las opciones siguen el mismo formato de una línea:

Seguridad en Linux 47
Configuración de Seguridad en servidores Linux

identificador:runlevels:acción:comando

La descripción de cada uno de los campos es la siguiente:

 Identificador: Es uno o varios caracteres que se utilizan para nombrar


la regla que se está definiendo.
 Runlevels: Es la lista de niveles de ejecución a los que se aplica la
regla sin dejar espacios entre ellos. Por ejemplo, para que una regla
se aplique en los niveles dos y tres se utilizará “23” y otra regla que se
deba aplicar en el modo monousuario utilizará “S”.
 Acción: Indica el tipo de acción que se define con la regla.
Algunos ejemplos posibles son:
o “Respawn”: Mientras se permanezca en alguno de los niveles
de ejecución del campo runlevels se lanzará el comando. Si el
comando finaliza se volverá a ejecutar de nuevo una y otra vez.
o “Once”: Al contrario que respawn, el comando especificado
sólo se ejecutará una vez en los niveles de ejecución
especificados.
o “Wait”: init espera mientras se ejecuta el comando.
o “Sysinit”: Similar al wait, pero sólo durante el nivel de
ejecución en el que arranca el sistema.
o “ctrlaltdel”: Se ignora el campo runlevels. En su lugar se
ejecutará al pulsar el usuario Ctrl-Alt-Supr en la consola física
del sistema.
o “initdefault”: Se ignora el campo comando. En runlevel sólo
se debe especificar un nivel de ejecución, que será el nivel de
ejecución inicial del sistema.

Como ejemplo global de fichero de configuración, el siguiente código contiene


un inittab típico de un sistema Debian:
# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.


id:2:initdefault:

# Boot-time system configuration/initialization script.


# This is run first except when booting in emergency (-b) mode.

Seguridad en Linux 48
Configuración de Seguridad en servidores Linux

si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.


~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change


# of runlevel.

# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

# What to do when CTRL-ALT-DEL is pressed.


ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Action on special keypress (ALT-UpArrow).


#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let
this work."

# What to do when the power fails/returns.


pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# /sbin/getty invocations for the runlevels.


#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
# <id>:<runlevels>:<action>:<process>
#

Seguridad en Linux 49
Configuración de Seguridad en servidores Linux

# Note that on most Debian systems tty7 is used by the X Window


System,
# so if you want to add more getty's go ahead but skip tty7 if you run
X.
#

1:2345:respawn:/sbin/getty 38400 tty1


2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

# Example how to put a getty on a serial line (for a terminal)


#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

# Example how to put a getty on a modem line.


#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

2.5.2 Problemas de seguridad

El principal problema de seguridad que puede inducir una configuración poco


rigurosa del fichero /etc/inittab, es permitir el acceso como root sin pedir
contraseña en el modo monousuario. Esto se puede forzar si el gestor de
arranque ofrece una opción que lo incluya o si permite editar los parámetros
pasados al sistema operativo.

De cualquier forma, es importante que en el nivel de ejecución S no se ejecute


una simple shell (/bin/bash o /bin/sh), sino que se ejecute el programa
/sbin/sulogin, que exige una contraseña antes de ofrecer acceso al sistema.

Por lo tanto, se debe modificar la regla asociada al nivel S del inittab de la


forma siguiente:

~~:S:wait:/sbin/sulogin

En algunas distribuciones de Linux, ésta es la configuración por omisión.

Otros aspectos relativos a la seguridad que hay que cuidar en este fichero de
configuración son las reglas que utilizan ctrlaltdel y el número y tipo de
terminales que se abren.

Seguridad en Linux 50
Configuración de Seguridad en servidores Linux

En cuanto a las reglas ctrlaltdel, en muchas distribuciones tienen asociada una


regla que reinicia el sistema. Esto puede llegar a considerarse inconveniente en
algunos entornos, porque permitiría a cualquier persona (sin necesidad de ser
usuario) con acceso a la consola del sistema reiniciar el sistema. En ese caso
se debe comentar la regla.

Finalmente, en el inittab se definen qué consolas arranca el sistema. Algunos


sistemas pueden tener consolas en puertos serie o similares que no estén
controlados. Se deben eliminar estas configuraciones o asegurarse de que el
terminal exija autenticación.

2.6 Conclusiones

En esta lección se han trabajado conceptos básicos para la configuración segura


del arranque de un servidor Linux. Se ha analizado cómo esta seguridad
involucra a distintos elementos software y el control del acceso físico al servidor.

Se ha resaltado que sin un estricto control del acceso físico, el resto de medidas
de seguridad son inútiles.

Finalmente se han expuesto las claves para la correcta configuración de todo el


software implicado en el arranque desde la BIOS, hasta el inittab, pasando por
el gestor de arranque. Con que uno sólo de estos elementos esté mal
configurado, el sistema completo será vulnerable.

2.7 Cuestionario

1) ¿Cuál de estas medidas no contribuye al control del acceso físico al


servidor?
a) Uso de smartcards.
b) Uso de redes WiFi.
c) Mantener bajo llave la sala de servidores.
d) Bloquear tomas de red no utilizadas en el edificio de la organización.

2) ¿En qué orden se ejecutan los siguientes componentes de software


durante el arranque del ordenador?
a) BIOS, kernel, gestor de arranque, proceso init
b) BIOS, gestor de arranque, kernel, proceso inittab
c) BIOS, gestor de arranque, kernel, fichero inittab

Seguridad en Linux 51
Configuración de Seguridad en servidores Linux

d) BIOS, gestor de arranque, kernel, proceso init

3) ¿A qué hacen referencia las siglas BIOS?


a) Basic Initial Operations System.
b) Basic Input Output System.
c) Beginning Initialization Off System.
d) BIOS no es un acrónimo.

4) ¿Cómo se configura la BIOS?


a) Mediante un menú accesible durante el arranque del sistema.
b) Editando el fichero inittab.
c) Editando el fichero menu.lst.
d) Mediante un menú accesible durante el apagado del sistema.

5) Los discos extraíbles deben ser ubicados en la secuencia de arranque


de la BIOS…
a) Como primeras opciones.
b) No se pueden ubicar en la secuencia de arranque.
c) En último lugar o que no figuren si es posible.
d) Deben ser las únicas opciones en la secuencia.

6) ¿Cuál de los siguientes no es un gestor de arranque?


a) LILO
b) GRUB
c) NTDLR
d) FILO

7) ¿Cuál es la diferencia entre LILO y GRUB?


a) LILO se almacena en el MBR de un disco y GRUB no.
b) GRUB es capaz de pasarle opciones al kérnel y LILO no.
c) LILO no tiene ninguna diferencia con GRUB.
d) GRUB es capaz de leer archivos del sistema de ficheros.

8) ¿De qué no se encarga el proceso init?


a) De cargar de disco la imagen del kérnel.
b) De lanzar los demonios del sistema.
c) De gestionar el nivel de ejecución.
d) De lanzar los procesos de login.

Seguridad en Linux 52
Configuración de Seguridad en servidores Linux

9) ¿Cuál de estos niveles de ejecución no es el modo monousuario?


a) No existe el nivel de ejecución monousuario.
b) Nivel 0.
c) Nivel 1.
d) Nivel S.

10) ¿Cuál es el principal problema de seguridad que puede causar la


configuración del proceso init?
a) Ninguno, todas las configuraciones son seguras.
b) Podría permitirse el uso de live CD‟s.
c) Podría permitirse el modo monousuario sin pedir contraseña.
d) Podría permitirse la alteración de los parámetros del kernel.

2.8 Ejercicio resuelto

Se propone como ejercicio evaluar y modificar la configuración de un servidor


Linux para asegurar su proceso de arranque. El servidor tiene instalada una
distribución Debian y utiliza GRUB como gestor de arranque.

Solución:

En primer lugar, se arranca el servidor e intenta entrar en la configuración de la


BIOS pulsando la tecla que la propia BIOS indica en pantalla. Si no apareciese
en pantalla, se podría consultar en el manual de la placa base. En este caso se
pulsa la techa F2.

Seguridad en Linux 53
Configuración de Seguridad en servidores Linux

En este caso, se ha podido entrar en la pantalla de configuración sin introducir


ninguna contraseña. Esto es un problema de seguridad.

Para solucionarlo, se debe ir a la opción Security y establecer la contraseña de


administración de la BIOS. Adicionalmente, se puede proteger con contraseña el
arranque de la máquina, pero en este caso no es necesario.

A continuación, se debe comprobar los dispositivos que aparecen en la


secuencia de arranque, que en este caso están en la pestaña Boot. Como se
puede ver en la siguiente imagen hay dispositivos extraíbles como la disquetera
y el CDROM. Esto también es un problema que se debe atajar.

Seguridad en Linux 54
Configuración de Seguridad en servidores Linux

Una vez eliminadas estas opciones, el resultado es el siguiente:

Nótese que el disco duro es la primera opción en la secuencia de arranque. Ahora,


ya se puede guardar y reiniciar la máquina.
Una vez que ya está asegurada la BIOS, se editará el fichero /boot/grub/menu.lst
para comprobar que no permite editar las opciones de arranque ni utilizar el
prompt del GRUB. Las líneas resaltadas han sido añadidas o modificadas:

Seguridad en Linux 55
Configuración de Seguridad en servidores Linux
# menu.lst - See: grub(8), info grub, update-grub(8)
# default option
default 0

# timeout sec
timeout 5

# Pretty colours
color cyan/blue white/blue

# password ['--md5'] passwd


password --md5 $1$0F.a2$qyRf8XGJmeNHowwvb05..0

title Debian GNU/Linux, kernel 2.6.18-4-686


root (hd0,0)
kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/sda1 ro
initrd /boot/initrd.img-2.6.18-4-686
savedefault

title Debian GNU/Linux, kernel 2.6.18-4-686 (single-user mode)


password --md5 $1$0F.a2$qyRf8XGJmeNHowwvb05..0
root (hd0,0)
kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/sda1 ro single
initrd /boot/initrd.img-2.6.18-4-686
savedefault

En primer lugar se ha añadido un timeout de 5 segundos para que el sistema


arranque la opción por omisión.

Además, se han añadido passwords tanto a la opción de arranque en modo


monousuario como al menú global, para evitar la edición de las opciones.

Con esto queda correctamente configurado el gestor de arranque y se puede


pasar a editar el fichero /etc/inittab para comprobar que el proceso init esté bien
configurado.

El fichero es el siguiente:

Seguridad en Linux 56
Configuración de Seguridad en servidores Linux

# /etc/inittab: init(8) configuration.


# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.


id:2:initdefault:

# Boot-time system configuration/initialization script.


si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.


~~:S:wait:/sbin/sulogin

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

# What to do when CTRL-ALT-DEL is pressed.


ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Action on special keypress (ALT-UpArrow).


#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let
this work."

# What to do when the power fails/returns.


pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

1:2345:respawn:/sbin/getty 38400 tty1


2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

Seguridad en Linux 57
Configuración de Seguridad en servidores Linux

Afortunadamente, la configuración por omisión de Debian incluye la línea que


está resaltada en amarillo en el listado anterior, por lo que en ningún caso el
acceso al modo monousuario será un problema de seguridad.

Otro aspecto menor, es que cualquier persona con acceso al terminal podría
utilizar la configuración de la línea resaltada en verde en el listado para reiniciar
el equipo pulsando Ctrl+Alt+Supr. Si no se desea este comportamiento habría
que comentarla.

Seguridad en Linux 58

También podría gustarte