Protegiendo GRUB2

 
 

Índice General

  1. Introducción
  2. Impedir el acceso al menú de edición y a la la línea de comandos de GRUB
  3. Proteger todas las entradas a los distintos kernels con password
  4. Proteger solo la entrada «recovery mode»

Fuentes consultadas
 

  1. Introducción (Volver al índice General)
    Cuando instalamos varios sistemas operativos en nuestro equipo, o tenemos compiladas varias versiones del kernel del mismo sistema operativo, para seleccionar con qué sistema operativo o kernel arrancaremos, se emplea un gestor de arranque o cargador de arranque.

    En este artículo, configuraremos nuestro gestor de arranque GRUB2 para añadir seguridad a nuestro sistema. En concreto, evitaremos las siguientes situaciones:

    • El acceso al menú de edición.
    • El acceso a la línea de comandos de GRUB2.
    • proteger todas las entradas a los distintos kernels solicitando una password.
    • Proteger solo la entrada recovery mode.
    Pantalla de inicio de GRUB2
    Pantalla de inicio de GRUB2

    ¡ATENCIÓN!: No olvidar hacer copia de seguridad de todos los archivos que se vayan a modificar.

  2.  

  3. Impedir el acceso al menú de edición y a la la línea de comandos de GRUB (Volver al índice General)
    En este apartado se indica como impedir el acceso desde el menú de la pantalla de acceso de GRUB2 a la de edición de ordenes pulsando la tecla «e» y acceder a la línea de comandos de GRUB2 pulsando tecla «c».

    Si permitimos la opción de edición de las entradas del menú, pulsaldo la tecla «e», y en la línea kernel (linux) modificamos la misma, sustituyendo el texto desde «ro» incluido hasta el final, por init=/bin/bash. Cuando arranquemos después de la edición, desde esta opción modificada, se ejecutará en el arranque una shell con permisos de root, adquiriendo el control total sobre el sistema.

    Menú de edición de entradas de GRUB2
    Menú de edición de entradas de GRUB2
    Línea de comandos de GRUB2
    Línea de comandos de GRUB2
    1. Generar la password encriptada (Volver al índice General)
      Aunque podemos hacerlo sin encriptar la password, es decir, dejarla en texto plano, creo que ya que vamos a añadir seguridad al sistema, ¿por qué no hacerlo del todo bien?

      Para generar la password encriptada, ejecutaremos el comando grub-mkpasswd-pbkdf2 que pertenece al paquete grub-common. Por lo general, este paquete se instala de forma automática cuando instalamos nuestra distribución.

      Al ejecutarlo nos pedirá que introduzcamos dos veces la password y a continuación nos mostrará la password encriptada. Es importante guardar el resultado en un archivo o mantener el terminal abierto hasta finalizar todo el proceso, por aquello de poder copiar la password encriptada cuando sea necesario.

      $ sudo grub-mkpasswd-pbkdf2
      Enter password:
      Reenter password:
      Your PBKDF2 is grub.pbkdf2.sha512.10000.7F62289E24FCEA327CEDCF99E1C12F04B17E28A1D632306E99DFD836F13E2C89C57B64F0F9826724548C6B0D547FFB9EBF469171B4185FDA72CBBCCE3C34D704.AE5F4C38C7DF0E75B85C16AFE704D4468A8F6B23B91C280C9F81357CE8079F8BB3C66D146F310D877762059B91A0B9BA425D35F862528CA4D030A6B48789BEEE

      Siiii, todo ese chorizo largo es la password encriptada: grub.pbkdf2.sha512.10000.7F62289E24FCEA327CED…….A6B48789BEEE

    2.  

    3. Editar el fichero /etc/grub.d/00_header (Volver al índice General)
      Para editar dicho archivo, he decidido utilizar nano, pero podéis utilizar el editor de texto plano que más os guste.

      $ sudo nano /etc/grub.d/00_header

      Al final de dicho fichero colocamos el nombre de usuario que queremos asociar a la password y la password encriptada generada en el paso anterior. La password debe quedar en una sola línea. Abajo tenéis un ejemplo de como quedaría, donde NombreUsuario será el nombre de usuario que vosotros elijáis.

      ...
      ...
      cat <<EOF
      set superusers="NombreUsuario"
      password_pbkdf2 NombreUsuario grub.pbkdf2.sha512.10000.7F62289E24FCEA327CED.......A6B48789BEEE
      EOF
    4.  

    5. Actualizar GRUB2 (Volver al índice General)
      Para que surtan efecto los cambios tendremos que actualizar GRUB Eeecutando el siguiente comando:

      $ sudo update-grub2

      y a continuación, reiniciamos el sistema:

      $ sudo shutdown -r now
  4.  

  5. Proteger todas las entradas a los distintos kernels con password (Volver al índice General)
    Añadiremos la opción –users a cada menuentry protegiendo así, con un nombre de usuario y su password encriptada, todas las entradas a los diferentes kernels que se hayan configurado en el menú de arranque.

    1. Editar el fichero /etc/grub.d/10_linux (Volver al índice General)
      Para editar dicho archivo, volvemos utilizar nano.

      $ sudo nano /etc/grub.d/10_linux

      Buscamos la función linux-entry (). En dicha función un poco mas abajo encontramos la orden:

      printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

      A dicha línea vamos a añadir la opción –user seguida del nombre de usuario que asignamos en el parámetro set superusers del apartado anterior. La línea quedaría como sigue:

      printf "menuentry '${title}' ${CLASS} --users NombreUsuario {\n" "${os}" "${version}"
    2. Actualizar GRUB2 (Volver al índice General)
      Deberemos actualizar GRUB para que surtan efecto los cambios:

      $ sudo update-grub2

      Y reiniciamos para probarlo:

      $ sudo shutdown -r now
  6.  

  7. Proteger solo la entrada «recovery mode» (Volver al índice General)
    La opción recovery mode tiene un propósito de recuperación en caso de fallo del sistema, pero puede ser utilizada entre otras acciones para recuperar y modificar contraseñas de administrador (root) o incluso acceder a información del disco duro.

    Dentro del menú de recuperación es posible acceder a una consola con privilegios de root.

    1. Editar el fichero /etc/grub.d/10_linux (Volver al índice General)
      Para editar dicho archivo, volvemos utilizar nano.

      $ sudo nano /etc/grub.d/10_linux

      Buscamos la función linux-entry (). En dicha función, un poco mas abajo, encontraremos el código siguiente:

      if ${recovery} ; then
         title="$(gettext_quoted "%s, with Linux %s (recovery mode)")"
      else
         title="$(gettext_quoted "%s, with Linux %s")"
      fi
      printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"

      Lo modificaremos como sigue:

      if ${recovery} ; then
         title="$(gettext_quoted "%s, with Linux %s (recovery mode)")"
         printf "menuentry '${title}' ${CLASS} --users NombreUsuario {\n" "${os}" "${version}"
      else
         title="$(gettext_quoted "%s, with Linux %s")"
         printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
      fi

      El printf final desaparece y se crea un printf para cada opción: recovery o normal.

    2. Actualizar GRUB2 (Volver al índice General)
      Deberemos actualizar GRUB para que surtan efecto los cambios:

      $ sudo update-grub2

      Y reiniciamos para probarlo:

      $ sudo shutdown -r now

 
Enlaces externos (Volver al índice General)

 

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
  Configuración de privacidad y de cookies.
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.