jueves, 3 de mayo de 2018

08 - El cargador de Linux: GRUB2

El cargador de arranque o bootloader es la parte del SO que carga el Kernel de Linux, el cual a su vez carga el resto del sistema. Ubuntu y la mayoría de distribuciones Linux usan el gestor de arranque GRUB2, que suele estar oculto por defecto a no ser que se tengan varios SO. Sin embargo este proporciona algunas opciones que pueden ser necesarias.



GRUB2 dispone de un menú propio al que se accede dejando pulsada la tecla Shift al principio del arranque (Con VMware también funciona la tecla Esc).

El kernel o núcleo del SO es un elemento crítico que se puede actualizar a través del gestor de paquetes con la idea de solucionar determinados problemas y corregir errores. Estás actualizaciones hacen que se use de forma automática el nuevo kernel después de reiniciar, sin embargo en algunos casos podría haber problemas y por ello las distribuciones de Linux suelen guardar el último kernel de Linux. Desde las opciones avanzadas de GRUB2 se puede seleccionar con cual de los dos kernel realizar el arranque. El kernel más reciente aparece más arriba de la lista con un número de versión mayor.




Ubuntu también dispone  de la opción Recovery Mode que permite reparar y recuperar el Sistema a través de diferentes utilidades.




GRUB2 tiene posibilidad de arrancar haciendo otras modificaciones avanzadas:
  • Se puede presionar la tecla c invocando la línea de comandos donde se pueden teclear varios comandos específicos de GRUB2
  • Se puede presionar la tecla e y editar manualmente las entradas del menú de arranque por ejemplo para arrancar en modo administrativo o en modo texto.
Ejemplo: Arranque en modo texto
Editamos la línea referente al kernel (la que empieza con linux) y reemplazamos quiet splash por la palabra text. Presionamos Ctrl+X o F10 y habremos arrancado en modo texto (sin entorno gráfico).

Importante: Las modificaciones realizadas desde el menú del GRUB son temporales y no se guardan.


Ubuntu 16.04 lts sin interfaz grafica parte-ii

Editar GRUB2

GRUB2 usa el fichero de configuración /boot/grub/grub.cfg pero no es conveniente editarlo a mano. El procedimiento para ello consiste en editar el fichero /etc/default/grub, hacer las modificaciones que consideremos y ejecutar sudo update-grub que se encargará de generar un nuevo /boot/grub/grub.cfg combinando los cambios introducidos por el usuario con una serie de scripts que se encuentran en /etc/grub.d

Se pueden realizar modificaciones varias en el fichero /etc/default/grub entre otras:
  • Tiempo que está visible el menú del GRUB
  • Arranque en modo texto
  • Sistema Operativo por defecto
  • Imagen de fondo para el GRUB
Estas modificaciones son permanentes, veamos por ejemplo como arrancar siempre en modo texto en lugar de la interfaz gráfica.

El procedimiento como se indica más arriba pasa por editar la línea del fichero /etc/default/grub y sustituir "quiet splash" por "text" en la variable que corresponde GRUB_CMDLINE_LINUX_DEFAULT 



Reparar GRUB2

Si el cargador de arranque se daña al igual que ocurre con otros SO, Linux no será capaz de arrancar. Existen formas sencillas, como arrancar desde Cd o Usb la distro de Linux que esta instalada y ejecutar herramientas que hagan la reparación de forma automática por nosotros por ejemplo Boot Repair. También hay ya utilidades preparadas para arrancar y hacer este tipo de reparaciones.

Sin embargo vamos a centrarnos en el método de reparación a través del terminal:

  • Lo primero será iniciar desde un live Cd o Usb con la distro de Linux que esté instalada.
  • Abrimos un terminal y localizamos la partición de Linux dónde esta instalado Ubuntu. El comando fdisk -l nos ayudará a ello 

Nota: ojo con esto porque puede haber otros SO instalados y muchas configuraciones distintas, asegurarse bien de cual es la partición donde esta instalado Ubuntu
  • Lo siguiente es montar la particion de Ubuntu en /mnt con el comando sudo mount /dev/sdX# /mnt, donde X y # serían el disco y partición respectivamente que tengamos.
  • Para finalizar reinstalamos el GRUB con el comando sudo grub-install --boot-directory=/mnt/boot /dev/sdX, donde X es el disco que corresponda.


Proteger GRUB2

Parece evidente el hecho de que poder editar las entradas del GRUB2 es algo muy interesante en ciertas ocasiones pero supone de paso dejar al sistema desprotegido frente a usuarios malintencionados.

Por ello en ciertos entornos donde el equipo es usado por varias personas como puedan ser sitios públicos o lugares de trabajo el superusuario debería implementar un método para impedir accesos indeseados que podrían dañar el sistema o acceder a información relevante.

Procedimiento:

  1. Hacer copia de seguridad de los ficheros implicados antes de hacer cualquier modificación es una norma básica en SO Linux.
  2. Añadir al fichero /etc/grub.d/00_header la lista de usuarios y contraseñas que queremos que puedan modificar el GRUB. (Las contraseñas no tienen que coincidir con las del usuario en el sistema). En este paso es muy conveniente cifrar la contraseña para que no sea visible ya que sino cualquier usuario podría leer el fichero y ver la clave.
  3. A partir de la version 2.0 del GRUB el paso anterior impide el acceso al modo comando (c) y al modo edicion de entradas (e) pero también impide la ejecución de cualquier entrada del menú por lo tanto un usuario que no estuviese en 00_header no podría arrancar el sistema. Para solucionar este "inconveniente" lo que se hace es permitir que ciertas entradas del GRUB las pueda usar cualquier usuario añadiendo el modificador --unrestricted a las líneas que queramos desproteger en el fichero 10_linux
  4. Por último es necesario aplicar los cambios con el comando para actualizar el GRUB sudo update-grub
Hay una estupenda explicación en la entrada:
http://geekland.eu/proteger-el-grub-con-contrasena/