Segurizar cargador de arranque GRUB en GNU Linux
Para quien no lo conozca estoy hablando de GRUB, el principal cargador de arranque en los sistemas GNU Linux, con permiso de LILO, que todavía está vigente en algunos sistemas como Slackware o Gentoo. Por norma general, la mayoría de blogs, tratan la manera de poder resetear cualquier contraseña de usuario, utilizando una pequeña shell que el cargador tiene instalada. Está claro que se trata de un problema grave de seguridad, si no se configura. Por lo que ésta entrada tiene la intención de lo contrario. Que ningún usuario o delincuente informático, no confundir con hacker, pueda acceder a nuestro sistema, por lo menos por aquí.
Sobre los cargadores de arranque en GNU Linux
En los sistemas que funcionan sobre procesadores x86 y x86-64, existe un proceso, que sigue una serie de pasos, desde el primer momento que encendemos el equipo, cuando se carga la BIOS, hasta que al final cargamos el sistema. Entre esos dos pasos, existen otros, de los cuales el principal, en GNU Linux, es el cargador de arranque. En nuestros sistemas del Ñu y el Pingüino, predominan dos, LILO, que tiene a estar en desuso y GRUB. Ambos son muy flexibles. Ya que soportan la instalación sobre el Master Boot Record o MBR o en el sector de arranque de una partición de arranque. Sé que esto es algo técnico, pero entiendo que si alguien ha llegado hasta éste artículo, es que, a priori, tiene ciertos conocimientos técnicos. Otra cosa muy interesante, es que GRUB se puede cargar también desde un dispositivo extraíble como un USB.
Sobre GRUB
Ya hemos dicho que es el cargador arranque de la mayoría de las distribuciones. De hecho uno de los motivos, quizás el principal, frente a otros como LILO, es que posee muchas más características que éste. Uno de ellos es que no se tiene que reeinstalar tras una modificación o que permite añadir un nuevo kernel de forma explicita.
Respecto a su ubicación, por normal general, se encuentra en /boot/grub/menu.lst, pero esto puede variar. También puede llamarse, en sistemas de paquetería RPM, grub.conf. Dicho fichero, aunque se pueda llamar de diversas maneras, funciona igual. Se divide en varias secciones globales y de imagen. A su vez cada parte contiene sus propias opciones.
En la imagen podemos ver el aspecto del menú de un sistema basado en Debian como CrunchBang++
Opciones globales
Se refiere a la configuración de cada una de las imágenes:
- SO por defecto. Se escoge con la opción «default =«, éste le indica a GRUB que sistema arrancar. Indexa los sistemas a partir de 0, esto es, por ejemplo, si tenemos dos, Debian sería 0, Fedora 1…, depende de cuantos tengamos instalados.
- Tiempo límite. Se define con la opción «timeout=«. Define el tiempo, en segundos, de espera.
- Gráfico de fondo. El parámetro es «splashimage=«, escoge un fichero de imágen gráfica, que se puede mostrar como fondo. Se utiliza para decorar.
Opciones esenciales
Se pueden identificar fácilmente ya que presentan sangrías a partir de la primera línea, aunque no es un requisito.
- Título. Se identifica como «title«, éste inicia cada imagen y especifica la etiqueta que se mostrará cuando se cargue el cargador. Admite espacios.
- Raíz. La opción «root» especifica la ubicación de la partición, que es la partición /root o bien /, si no existe la primera. Igualmente también podría residir en un USB o en un partición FAT. O incluso en una ubicación de otro sistema operativo del equipo.
- Detalles del kernel. El parámetros «kernel» ubica la dirección del kernel y todas sus opciones.
Existen más opciones. Que se pueden consultar aquí.
Trabajar con GRUB
Una vez ha cargado el menú, tenemos unos segundos para apretar cualquier tecla, y así parar el contador de segundos que carga el sistema operativo seleccionado. Con la teclas del cursor de teclado, podemos movernos arriba y abajo, para selecciona un sistema operativo u otras opciones. Podemos modificar cualquier entrada apretando la tecla «E» , a continuación podemos volver a utilizar para editar cualquier detalle. También podemos acceder a una pequeña consola, con una serie de comandos limitados, utilizando la tecla «C«
Tal y como hemos comentado al inicio muchos blog explican la manera de recuperar una contraseña o bien usurparla. Ya que podemos modificar los parámetros de arranque o acceder a una consola con permisos de root. De hecho incluso utilizando dicha shell podemos volcar datos desde cualquiera de los discos. Una de las tećnicas habituales para cambiar la contraseña de root o de cualquier otra usuario, es utilizar la tecla «E«. Una vez en los parámetros, escogemos la versión del kernel a ejecutar y lo arrancamos en modo escritura, mono-usuario y utilizar la terminal sh, esto es «rw single init=/bin/sh«, de esa manera al arrancar la consola de GRUB sólo debemos escribir «passwd» y el usuario y modificar la contraseña a nuestro gusto.
Asegurar GRUB
Existen dos versiones del sistema arranque, la primera que lleva el mismo nombre, y la segunda llamada GRUB2. Para la primera podemos definir una contraseña maestra, y cada vez que queremos editar el menú, la deberemos escribir. Dicha clave irá en el menú de configuración, ya sea menu.lst o grub.conf, en texto plano, para evitarlo podemos utilizar un sistema de cifrado como MD5. Su funcionamiento sería, utilizar la palabra «password» y a continuación la contraseña.
Podemos obtener el resultado del cifrado, con los siguientes comandos y parámetros:
/bin/echo "{md5}"`/bin/echo -n "contraseña" | openssl dgst -binary -md5 | openssl enc -base64`
El código resultante lo añadimos a continuación de «password» en el fichero de configuración. También podemos utilizar la herramienta grub-md5-crypt. Si queremos aumentar la seguridad de manera adicional podemos utilizar el comando lock, que nos permitirá bloquear cada una de las entradas de arranque, si no se ha puesto la contraseña. Recordemos que toda la explicación hasta ahora es para la primera versión de GRUB.
Asegurar GRUB2
Se trata de una versión más moderna y flexible que la anterior. Trabaja con scripts para automatizar configuraciones y tiene nuevas directivas de configuración. Una de sus ventajas es que podemos crear una serie usuarios que tengan la opción de modificar los parámetros. El usuario con más «poderes» es superusers. Otra diferencia importante, si no se opta por el texto plano para la contraseña, es el cambio de cifrado a pbkdf2. Podemos generar la contraseña utilizando el programa grub-mkpasswd-pbkdf2
En Fedora sería de la siguiente manera. Primero editamos el fichero para los usuarios, llamado /etc/grub.d/01_users, y añadimos justo al final.
cat >> EOF
set superusers="admin"
password admin secreto
EOF
Quedaría de la siguiente manera:
En la imagen anterior se observa un código cifrado para la contraseña, que he obtenido utilizando la herramienta mencionada en los párrafos anteriores grub2-mkpasswd-pbkdf2
Después de modificar el fichero nos queda un paso muy importante, que es actualizar el fichero /boot/grub2/grub.cfg Mi laptop es relativamente nuevo, y utiliza UEFI, en la mayoría de los manuales que aparecen en los blogs no tienen en cuenta ese detalle (es lo que tiene el copy and paste) Para actualizar el GRUB2 con ese sistema, se haría:
sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
Hemos utilizado el programa grub2-mkconfig, indicando la ruta del fichero a actualizar. Sólo nos queda reiniciar el sistema y probar que efectivamente existe un usuario y contraseña para modificar el menú o acceder a la consola. Podemos ver el resultado en mi laptop HP Envy.
Al querer editar o acceder a la consola:
Nos pide primero el usuario, y después la contraseña:
Y voilà ya podemos editar o acceder a la pequeña shell de GRUB2 En caso de terner un portátil o PC algo más antiguo que utilice BIOS, seguramente necesitaremos actualizar el sistema de arranque de la siguiente manera.
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Y con esto lo dejamos aquí. Si te ha parecido interesante no dudes en comentar más abajo y compartir en las redes sociales.