Cómo proteger GRUB con contraseña (Linux)

Normalmente utilizamos una buena parte de nuestro tiempo en evitar el acceso no autorizado a nuestros equipos: configuramos firewalls, permisos de los usuarios, ACL, creamos contraseñas seguras, etc.; pero pocas veces recordamos proteger el arranque de nuestros equipos.

Si una persona tiene acceso físico al equipo, puede reiniciarlo y cambiar los parámetros de GRUB para conseguir acceso como administrador al equipo. Basta con añadir un ’1′ o una ‘s’ al final de la línea ‘kernel’ de GRUB para conseguir esa clase de acceso.

Para evitar esto, se puede proteger GRUB mediante la utilización de una contraseña, de forma que si no se conoce, no sea posible modificar sus parámetros.

Si tienes instalado el gestor de arranque GRUB (que es lo más común si utilizas las distribuciones Linux más populares), puedes proteger cada entrada del menú de GRUB con una contraseña. De este modo, cada vez que elijas un sistema operativo para arrancar, te preguntará la contraseña que hayas especificado para poder arrancar el sistema. Y como beneficio adicional, si te roban el equipo, los intrusos no podrán acceder a tus archivos. Se oye bien, ¿no?
 

GRUB 2
Para cada entrada del Grub se puede establecer un usuario con privilegios para modificar los parámetros de las entradas que aparecen GRUB al iniciar el sistema, aparte del superusuario (aquel que tiene acceso para modificar el Grub oprimiendo la tecla “e” ). Esto lo haremos en el fichero /etc/grub.d/00_header. Abrimos el fichero con nuestro editor favorito:

sudo nano /etc/grub.d/00_header 

Al final pega lo siguiente:

cat << EOF set superusers=”user1″ password user1 password1 EOF 
Donde user1 es el superusuario, ejemplo:

cat << EOF set superusers=”superusuario” password superusuario 123456 EOF 
Para crear más usuarios, agregalos debajo:

password superusuario 123456 

Quedaría más o menos de la siguiente forma:

cat << EOF set superusers="superusuario" password superusuario 123456 password usuario2 7890 EOF 

Una vez que hallamos establecido los usuarios que queramos, guardamos los cambios.

Proteger Windows 
Para proteger Windows hay que editar el fichero /etc/grub.d/30_os-prober. 

sudo nano /etc/grub.d/30_os-prober 

Busca una línea de código que dice:

menuentry "${LONGNAME} (on ${DEVICE})" { 

Debe quedar así (siendo superusuario el nombre del superusuario):

menuentry "${LONGNAME} (on ${DEVICE})" –users superusuario { 

Guarda los cambios y ejecuta:

sudo update-grub 

Abre el fichero /boot/grub/grub.cfg:

sudo nano /boot/grub/grub.cfg 

Y donde está la entrada de Windows ( algo parecido a esto ):

menuentry "Windows XP Profesional" { 

cambialo por esto (siendo usuario2 el nombre del usuario que tenga privilegios para acceder):

menuentry "Windows XP Profesional" –users usuario2 { 

Reinicia. Ahora, cuando intentes entrar a Windows te pedirá la contraseña. Si oprimís la tecla “e” también te pedirá la contraseña.

Proteger Linux
Para proteger las entradas del kernel de Linux edita el fichero /etc/grub.d/10_linux, y busca la línea que dice:

menuentry "$1" { 

Si sólo quieres que pueda acceder el superusuario debería quedar así:

menuentry "$1" –users user1 { 

Si quieres que pueda acceder un segundo usuario:

menuentry "$1" –users usuario2 { 

También puedes proteger la entrada de la comprobación de memoria, editando el fichero /etc/grub.d/20_memtest:

menuentry "Memory test (memtest86+)" –users superusuario { 

Proteger todas las entradas
Para proteger todas las entradas ejecuta:

sudo sed -i -e ‘/^menuentry /s/ {/ –users superusuario {/’ /etc/grub.d/10_linux /etc/grub.d/20_memtest86+ /etc/grub.d/30_os-prober /etc/grub.d/40_custom 

Para deshacer este paso, ejecuta:

sudo sed -i -e ‘/^menuentry /s/ –users superusuario[/B] {/ {/’ /etc/grub.d/10_linux /etc/grub.d/20_memtest86+ /etc/grub.d/30_os-prober /etc/grub.d/40_custom 

GRUB
Comencemos abriendo el entorno de GRUB. Abre una terminal y escribe:

grub 

Luego, introduce la siguiente orden:

md5crypt 

Te preguntará la contraseña que quieres utilizar. Escríbela y pulsa Enter. Obtendrás una contraseña cifrada, que tienes que guardar con mucho cuidado. Ahora, con permisos de administrador, abre el archivo /boot/grub/menu.lst con tu editor de textos favorito:

sudo gedit /boot/grub/menu.lst 

Para poner la contraseña a las entradas del menú de GRUB que prefieras, tienes que añadir lo siguiente a cada una de las entradas que quieres proteger:

password --md5 mi_contraseña 

Donde mi_contraseña sería la contraseña (encriptada) devuelta por md5crypt: Antes:

title Ubuntu, kernel 2.6.8.1-2-386 (recovery mode) root (hd1,2) kernel /boot/vmlinuz-2.6.8.1-2-386 root=/dev/hdb3 ro single initrd /boot/initrd.img-2.6.8.1-2-386 

Después:

title Ubuntu, kernel 2.6.8.1-2-386 (recovery mode) root (hd1,2) kernel /boot/vmlinuz-2.6.8.1-2-386 root=/dev/hdb3 ro single initrd /boot/initrd.img-2.6.8.1-2-386 password –md5 $1$w7Epf0$vX6rxpozznLAVxZGkcFcs 

Guarda el archivo y renicia. ¡Así de fácil! Para evitar, no sólo que algún malintencionado pueda cambiar los parámetros de configuración de la entrada protegida, sino que tampoco pueda siquiera iniciar ese sistema, puedes agregar una línea en la entrada "protegida", luego del parámetro title. Siguiendo nuestro ejemplo, quedaría algo así:

title Ubuntu, kernel 2.6.8.1-2-386 (recovery mode) lock root (hd1,2) kernel /boot/vmlinuz-2.6.8.1-2-386 root=/dev/hdb3 ro single initrd /boot/initrd.img-2.6.8.1-2-386 password –md5 $1$w7Epf0$vX6rxpozznLAVxZGkcFcs 

La próxima vez que alguien quiera iniciar ese sistema, tendrá que ingresar la contraseña.