viernes, 21 de septiembre de 2012

Configurar GRUB para gestionar varios Sistemas Operativos

Hace algo más de un año, en el trabajo se nos plantearon las siguientes necesidades:
  • Instalar en una máquina varios sistemas operativos.
  • Cada sistema operativo debía quedar oculto a los demás, es decir, una vez arrancado un sistema operativo no se debía poder "ver" a los otros sistemas operativos (ni datos, ni particiones, ni nada).
  • Además el acceso a cada sistema operativo debía estar protegido por usuario/contraseña.
Tras investigar durante unas cuantas noches conseguí encontrar la solución a nuestros problemas: usar Grub como gestor de arranque.

Vamos a suponer que tenemos instalados 3 sistemas operativos Microsft Windows 7: examen, diurno y tarde. Y como última partición hemos instalado Debian. Usando así las 4 particiones primarias permitidas. Obviamente otro tipo de configuración a nivel de particiones sería posible.

El archivo a editar es /boot/grub/grub.cfg
........
..........
# INICIO CREACIÓN DE USUARIOS
# Aquí añadimos los usuarios necesarios para el gestor de arranque.
# No son usuarios del SO Debian.
# La primera línea define quién será el superusuario y se le puede llamar como quiera.
set superusers="root"
password root contra1
password examen contra2
password diurno contra3
password tarde contra4
# FIN CREACIÓN DE USUARIOS

........
..........
# Entrada de arranque a Debian. Solo accesible por el superusuario
# Al final la línea (antes de la llave) añadimos --users ""
menuentry 'Debian GNU/Linux ...' ...  --users ""  {

........
..........
# Entrada de arranque a Debian (recovery mode). Solo accesible por el superusuario
# Al final la línea (antes de la llave) añadimos --users ""
menuentry 'Debian GNU/Linux (recovery mode)' ...  --users ""  {

........
..........
# Entrada de arranque a partición EXAMEN (Windows 7). Solo accesible por el usuario examen.
# Dicho sistema operativo está en el primer disco duro (hd0) y en la primera partición (1)
# Al final la línea (antes de la llave) añadimos --users "examen"
menuentry 'Windows 7 [EXAMEN]' ...  --users "examen"  {
parttool (hd0,1) hidden-
parttool (hd0,2) hidden+
parttool (hd0,3) hidden+
set root=(hd0,1)
chainloader +1
parttool ${root} boot+
boot
}

Habría que hacer lo mismo con el resto de sistemas operativos. Teniendo en cuenta que habría que modificar las particiones que ocultamos (parttool (hd0,2) hidden+) y el parámetro de arranque (set root=(hd0,1))

No puedo añadir ningún enlace a las web donde estuve investigando porque no las recuerdo, ya hace más de un año. Y llevo un tiempo queriendo escribir esta entrada antes de que se me olvidará.