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.