Securizando GRUB
En un artículo previo, hemos visto que si tenemos acceso físico a un equipo podemos conseguir acceso a él como superusuario, mediante GRUB.
En este artículo vamos a explicar como securizar GRUB, para evitar que ningún usuario pueda modificarlo.
Protección del Boot de GRUB
Una de las primeras tareas necesarias es fijar 'roles' que puedan gestionar GRUB.
Se pueden crear diferentes roles y grupos de usuarios con diferentes permisos para ello.
Para no extender el artículo, unicamente vamos a usar uno de los roles existentes 'superusers' para definir un usuario que pueda gestionar GRUB.
Todas las tareas para editar, proteger y configurar GRUB las realizaremos mediante el usuario 'root', que es el único con permisos para ello.
Las versiones actuales de GRUB (Grub versión 2.x) usan claves con cifrado pbkdf2 y ya no soportan las de cifrado md5 que se usaba en las versiones 1.x
Para poder generar una clave con este cifrado, abriremos un terminal y con el usuario 'root' escribimos el siguiente comando:
grub-mkpasswd-pbkdf2
Nos pide una contraseña y que la repitamos, generando un hash PBKDF2:
Debemos copiar ese hash (portapapeles), pues lo vamos a usar posteriormente.
Ahora debemos de editar el fichero /etc/grub.d/40_custom e incluir al final del mismo las siguientes líneas:
El fichero /etc/grub.d/40_custom debe quedar tal y como te muestro en la siguiente captura de pantalla:
Indicamos que 'adminboot' pertenece al grupo de 'superusers' y en la siguiente linea indicamos que su clave es de tipo pbkdf2, junto el hash que hemos copiado previamente.
Para que eso sea efectivo hay que regenerar el fichero de configuración de GRUB, para ello usaremos el siguiente comando:
Ahora si reiniciamos, vemos que es necesario para que continúe la carga de GRUB introducir el usuario (adminboot) y la contraseña que hayamos definido para continuar el arranque:
Esta configuración protege tanto la edición de cualquier parámetro de GRUB, como el arranque.
Si lo pensamos detenidamente puede ser un problema, pues si se trata de un servidor y este se reinicia por cualquier causa, hay que estar físicamente presente delante de él para introducir tanto el usuario como la contraseña para que se pueda iniciar.
Vamos a mejorar esto, para que el equipo pueda iniciar con el GRUB protegido.
No se podrá editar, ni incluir ninguna opción desde el menú de GRUB, pero si permitiremos que se pueda iniciar automaticamente sin necesidad de introducir el superusuario/clave tras un reinicio.
Bloquear la edición de GRUB
Para proteger la edición de las opciones de GRUB en el inicio, pero permitir que pueda iniciar de modo normal, vamos a realizar lo que se denomina 'liberación del boot', para ello editaremos el fichero /etc/grub.d/10_linux.
El fichero /etc/grub.d/10_linux es un fichero grande con más de 400 líneas, nos desplazaremos por él con calma hasta localizar las líneas indicadas.
Debemos de buscar en el fichero las 2 líneas que tienen las cadenas:
echo "menuentry '$(echo "$title" ...
echo "menuentry '$(echo "$os" ...
Nos situaremos detrás del parámetro ${CLASS} de ambas líneas e incluimos el parámetro:
El fichero tras la edición debería de quedar así:
Grabamos el fichero y regeneramos de nuevo el fichero GRUB y reiniciamos:
Esperamos al reinicio y a la pantalla de GRUB.
Podemos comprobar que GRUB arranca normal sin necesidad de usuario/clave.
Pero si intentamos entrar al menu edición, al menú de comandos o incluso a las opciones avanzadas (otros Kernels y modos de rescate) es necesario indicar un usuario/contraseña en GRUB para acceder.
Hemos dejado correctamente protegido la edición de Grub, pero permitiendo un boot del sistema normal.