Añadir password a entradas del GRUB2

La posibilidad de añadir password es algo bastante interesante cuando los equipos pueden manipularlos personas inexpertas, sobretodo si una de estas entradas se utiliza para tareas de mantenimiento de equipos. Bueno, aquí os dejo como añadir password a una o varias entradas del GRUB2.

Para crear un password encriptado nos abrimos un terminal y ejecutamos el siguiente comando.

$ sudo grub-mkpasswd-pbkdf2

Tras introducir la contraseña de nuestro administrador nos pedirá el password que queremos encriptar, lo introducimos por dos veces y copiamos lo que aparece a continuación de Your PBKDF2 is…

Enter password:
Reenter password:
Your PBKDF2 is grub.pbkdf2.sha512.10000.0FB55C28CB1B930BDB81162F5CE2D9EAC355E7D25B9966817D63019A94C39822E08399CC05552BD94A2C64673EDF8576C75D222BF0B534B6C35B5476FFC218EA.DA3EC0DE29F709CFE48AFBCC31F97B97F4AE5F6CEAD0F41A55A98414BCC1359787665A3B016880DCE9EC0D729129318E83D971559ECC958209FFF588C75BB363

Una vez que ya tenemos el password encriptado editamos el fichero /etc/grub.d/00_header con nuestro editor favorito y siempre con permisos de root.

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

Al final del fichero añadimos las siguientes líneas para indicar que usuario será el administrador del GRUB2 y su password.

cat <<EOF
set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000.4F325005AB79FE86EC1F0FC1111F37D811ABCD488F98D7A4794B9B02493FEBD769507783C0EDAD06AB936751186CC8F1332D5E00D475763323EAFEDCC29FA358.81F54B1738321DCE667E2F0F459518918AE020E9FB929575BAC452E0BB3DCBE6BCE388D2018A8B2CFE3AE9424D41509BBDC40C449686D62464128F57020A6418
EOF

Cada línea password_pbkdf2 admin password representaría una usuario, por tanto, se pueden añadir tantos usuarios como queramos para nuestro GRUB2.

Hecho esto guardamos y vamos con el siguiente, editamos /etc/grub.d/40_custom y establecemos el usuario que puede acceder a las entradas que queremos proteger. En mi caso protejo una entrada a un submenú, pero se puede hacer con entradas individuales, sólo tenemos que añadir las líneas --users usuario en las entradas que queramos.

submenu "Mantenimiento" --users admin{
  menuentry "SystemRescueCd x86" {
    set root=(hd0,2)
    set isofile="/boot/systemrescuecd-x86-3.0.0.iso"
    loopback loop (hd0,2)$isofile
    linux (loop)/isolinux/rescue32 setkmap=es isoloop=$isofile
    initrd (loop)/isolinux/initram.igz
  }
  menuentry "UDP Cast" {
    set root=(hd0,2)
    set isofile="/boot/udpcd.iso"
    loopback loop (hd0,2)$isofile
    linux (loop)/linux isoloop=$isofile
    initrd (loop)/initrd
  }
}

Llegados a este punto ya sólo nos queda actualizar el GRUB2 y reiniciar para comprobar. Esta contraseña también se aplicará para las opciones del GRUB2 al pulsar la tecla «e».

$ sudo update-grub2

Espero que os haya servido de utilidad.

Au!!

Añadido el 24/06/2013

Debemos tener en cuenta la versión 2.00 de GRUB2, al añadir estos pasos, el usuario y contraseña se añaden a todas las entradas del GRUB, en este caso, deberemos añadir la opción --unrestricted en aquellas entradas en las que no queremos usuario y contraseña.

Para quitar la protección en la entrada principal del sistema, editaremos el fichero /etc/grub.d/10_linux.

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

Y buscamos la siguiente línea, la 121 en el momento en cuestión.

echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

Y deberemos añadir la opción mencionda, dejándola así.

echo "menuentry '$(echo "$os" | grub_quote)' --unrestricted ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

De esta forma nos aseguramos que cada vez que actualicemos el GRUB seguirá funcionando, si añadimos esta opción en /boot/grub/grub.cfg, cada vez que se actualice el GRUB perderemos la opción.