Cómo proteger GRUB con una contraseña

Estándar

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 tenés instalado el gestor de arranque GRUB (que es lo más común si utilizás las distribuciones Linux más populares), podés 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 pegá 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 querramos, 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

Buscá 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 {

Guardá los cambios y ejecutá:

sudo update-grub

Abrí 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 {

Reiniciá y listo. 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 editá el fichero /etc/grub.d/10_linux, y buscá la línea que dice:

menuentry "$1" {

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

menuentry "$1" –users user1 {

Si querés que pueda acceder un segundo usuario:

menuentry "$1" –users usuario2 {

También podés 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 ejecutá:

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, ejecutá:

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. Abrí una terminal y escribí:

grub

Luego, introducí la siguiente orden:

md5crypt

Te preguntará la contraseña que querés utilizar. Escribila y perisoná Enter. Obtendrás una contraseña cifrada, que tenés que guardar con mucho cuidado. Ahora, con permisos de administrador, abrí 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, tenés que añadir lo siguiente a cada una de las entradas que querés 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

Guardá el archivo y reiniciá. ¡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, podés 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.