El cargador de arranque

Como ya hemos comentado en puntos anteriores, para arrancar un sistema Solaris o Linux se pueden emplear diversos medios: instalar un cargador de arranque en el disco duro o en un disco flexible, arrancar desde otro sistema operativo, etc.

En el caso que nos ocupa hablaremos sólo de los sistemas de arranque que se instalan en disco duro, comentando brevemente sus diferencias y sus características de seguridad.

Sólo hablaremos de los sistemas de arranque empleados en los PC y de estos sólo entraremos en detalles en los que se emplean con sistemas Linux, el que esté interesado en conocer como funciona el sistema de arranque incluido en la versión de Solaris para Intel tiene un buen documento de referencia en: http://developers.sun.com/solaris/developer/support/driver/wps/realmode_env/

LILO

LILO (LInux LOader) es el sistema de arranque más extendido en el mundo Linux, aunque es un poco arcáico. Se instala en un sector de arranque - de una partición o de un disco flexible - o en el Master Boot Record (MBR) del disco duro y permite arrancar Linux y otros sistemas operativos instalados en el PC.

La configuración se encuentra generalmente en el archivo /etc/lilo.conf, aunque en realidad se almacena en el sector de arranque o en el MBR, por lo que cada vez que queramos aplicar los cambios hechos en el fichero será necesario ejecutar la orden /sbin/lilo para que reinstale el programa.

El formato del fichero de configuración es sencillo, tiene una parte global y secciones para cada sistema operativo que queramos arrancar:

    # /etc/lilo.conf
    # Global options:
    boot=/dev/hda
    map=/boot/map
    lba32
    compact
    vga=normal
    read-only
    delay=20
    # bootable kernel images:
    image=/boot/vmlinuz-2.4.21-2-686
      label=linux
      root=/dev/hda2
      initrd=/boot/initrd-2.4.21-2.img
    image=/boot/vmlinuz-2.4.20-3-686
      label=linux.old
      root=/dev/hda2
      initrd=/boot/initrd-2.4.20-3.img
    # other operating systems:
    other=/dev/hda1
      label=windows
      table=/dev/hda

Al arrancar el PC, LILO permite elegir la imagen que queremos arrancar y pasar parámetros al núcleo; aunque esto sea necesario para inicializar el sistema en ciertas ocasiones - principalmente cuando hay errores graves en un arranque normal - el hecho es que los parámetros pasados a un kernel antes de ser arrancado pueden facilitar a un atacante un control total sobre la máquina, ya que algunos de ellos llegan incluso a ejecutar un shell con privilegios de root sin necesidad de ninguna contraseña.

Para proteger el arranque podemos habilitar el uso de contraseñas en LILO, de modo que se solicite antes de que se cargue cualquier sistema operativo instalado en el ordenador o cuando se intenten pasar parámetros a una imágen.

Para poner la contraseña usaremos la palabra reservada password; si la ponemos en la sección general se aplicará a todas las imágenes definidas y si queremos que se aplique a imágenes concretas la la pondremos dentro de la sección específica.

Una vez tenemos definida una contraseña, el comportamiento del LILO vendrá determinado por la aparición de las palabras mandatory, restricted y bypass:

  1. La primera implica que para arrancar la imagen o imágenes seleccionadadas debemos introducir la clave, esta es la opción que se aplica por defecto.

  2. La segunda implica que la contraseña sólo se solicitará si se desean pasar parámetros adicionales al núcleo.

  3. La tercera deshabilita el uso de la contraseña (se puede usar para quitar el uso de una contraseña global al arrancar sistemas que no son linux).

GRUB

GRUB (GRand Unified Bootloader) es un sistema de arranque más potente que el anterior. Una vez instalado en un sector de arranque (de una partición o un disco flexible) o en el Master Boot Record (MBR) del disco duro, ejecuta un interprete de comandos cada vez que iniciamos el sistema que nos permite arrancar prácticamente cualquier sistema operativo actual.

Este interprete se puede usar de modo interactivo o puede leer un fichero de configuración almacenado en el disco (que por defecto estará en /boot/grub/menu.lst). Una característica importante de GRUB es que es capaz de reconocer gran cantidad de sistemas de ficheros, de modo que no es necesario reinstalarlo cuando cambiamos ese fichero de configuración, que es simplemente un fichero de texto.

Un ejemplo de /boot/grub/menu.lst similar al ejemplo anterior del LILO sería el siguiente:

  # Sample boot menu configuration file
  # -----------------------------------
  # Boot automatically after 10 secs.
  timeout 10
  # By default, boot the first entry.
  default 0
  # Fallback to the second entry.
  fallback 1
  # Kernel 2.4.21-2-686
  title  Linux 2.4.21-2-686 (hda2)
  kernel (hd0,1)/boot/vmlinuz-2.4.21-2-686 root=/dev/hda2 hdb=ide-scsi hdc=ide-scsi
  initrd (hd0,1)/boot/initrd.img-2.4.21-2-686
  # Kernel 2.4.20-3-686
  title  Linux 2.4.20-3-686 (hda2)
  kernel (hd0,1)/boot/vmlinuz-2.4.20-3-686 root=/dev/hda2 hdb=ide-scsi hdc=ide-scsi
  initrd (hd0,1)/boot/initrd.img-2.4.20-3-686
  # For booting Windows
  title Windows
  rootnoverify (hd0,0)
  makeactive
  chainloader  +1

El problema con el interprete de comandos es que nos da control total sobre el arranque; por suerte GRUB nos permite proteger el acceso al mismo empleando una contraseña en el fichero de configuración, de modo que sea necesario introducirlo para acceder al menú o cuando queramos modificar parámetros de una sección.

Esta contraseña se pone en el fichero empleando la instrucción password:

  password [`--md5'] clave [nuevo-fichero-de-config]

Donde clave es la contraseña en claro o cifrada con md5 si ponemos --md5 delante. El nombre de fichero que aparece detrás de la clave es un fichero de configuración con el mismo formato que el menu.lst que se cargará si se introduce la clave adecuada.

Si la clave aparece en la sección global del fichero de configuración sólo se empleara si el usario quiere editar el menu de arranque, si además queremos bloquear el arranque de alguna sección podemos emplear el comando lock, que detiene la ejecución del GRUB hasta que se introduce una clave válida. Para que sea efectivo lo tendremos que poner detrás del título de la sección que queramos proteger.