Añadir contraseña al menu de Grub2

La contraseña de seguridad disponible con GRUB 2 proporciona una protección básica para evitar que un usuario no autorizado tenga acceso al sistema operativo a través del menú de GRUB 2. Recalcar que las personas con acceso físico a la computadora seguirán teniendo acceso a los archivos a través de otros métodos que GRUB 2 no puede prevenir, como por ejemplo, mediante un Live CD.

Estas instrucciones son básicamente para la versión 1.99-x del grub2 (Ubuntu 12.04). Para saber qué versión del grub2 tenemos, ejecutar el comando:

grub-install -v

Como trabaja la protección por contraseña del Grub2

Una vez que el usuario administrador, con el que instalamos Ubuntu y la contraseña se identifican, la función de contraseña está activada y el menú del GRUB 2 aparecerá como lo hace normalmente. Cuando un elemento de menú que requiere una contraseña se selecciona, el usuario deberá introducir el nombre de usuario y la contraseña correcta. Si se introduce correctamente, el menuentry (entrada del menú) seleccionado continuará con su arranque. Si es incorrecta, el usuario será devuelto al menú de GRUB 2.

grub2Si GRUB 2 está configurado para arrancar directamente con un menuentry (entrada del menú), protegido por contraseña sin que se visualice el menú de Grub2, aparecerá el menú de usuario / contraseña y el arranque no se producirá hasta que se hayan introducido correctamente ambos. En este caso, el usuario puede salir de la solicitud de contraseña para seleccionar otro menuentry, manteniendo pulsada la tecla SHIFT, pero no se mostrará el menú del Grub para arrancar desde otro menuentry. Por lo que es recomendable habilitar la aparición del menú del grub y darle un tiempo mínimo de espera. Para ello:
Editar el siguiente archivo del grub:

sudo gedit /etc/default/grub

comentar (escribir # al principio) las siguientes líneas:

#GRUB_HIDDEN_TIMEOUT=0
#GRUB_HIDDEN_TIMEOUT_QUIET=true

Hacer copia de seguridad de todos los archivos que modifiquemos por si algo sale mal, ya que vamos a tocar los archivos con los que arranca el sistema. También hacer copia de seguridad del archivo /boot/grub/grub.cfg, que se genera automáticamente al actualizar el Grub con sudo update-grub).
Pero mucho ojo, guardarlos en vuestra carpeta personal u otra distinta de las carpetas de configutación del grub (/boot/grub/ y /etc/grub.d), ya que al actualizar el grub, todos los archivos que se contengan en esas carpetas serán tomados en cuenta para crear el grub.cfg.
Para realizar copia de seguridad de grub.cfg y guardarla en el escritorio de root, por ejemplo:

sudo cp /boot/grub/grub.cfg /root/Desktop/grub.cfg

Configuración de la protección por contraseña del Grub2

Pasos a seguir:

Identificación de los usuarios y su contraseña

Para habilitar la protección con contraseña, GRUB 2 requiere como mínimo la identificación de:

  • Un superusuario (administrador del sistema con el que instalamos Ubuntu)
  • La contraseña para el superusuario

Nota: Con sólo esta información, Grub2 impedirá el acceso al menú de edición (pulsando la tecla “e”) y a la la línea de comandos “grub>” (pulsando la tecla “c”).

El archivo a editar, no es una regla fija, ya que al actualizar el grub serán tomados en cuenta todos los archivos y algunos prefieren tener un archivo personalizado “/etc/grub.d/40_custom“, donde añadir la identificación de los usuarios, sus contraseñas y los menuentry a bloquear.

También he visto que algunos lo hacen directamente en el archivo “/boot/grub/grub.cfg“, pero no lo recomiendo, ya que cada vez que se actualice el Grub se eliminará el acceso por contraseña y vuelta a empezar.

Yo prefiero añadir los usuarios y contraseñas en el archivo “/etc/grub.d/00_header“, que es el archivo de configuración que maneja esta información.

Antes de realizar estos cambios, se recomienda guardar una copia del archivo “/etc/grub.d/00_header” a otro lugar para servir como una copia de seguridad. No dejar la copia en el directorio /etc/grub.d/, para asegurarse de que no se ejecuta durante las actualizaciones.
Para realizar copia de seguridad y guardarla en el escritorio de root, por ejemplo:

sudo cp /etc/grub.d/00_header /root/Desktop/00_header

Una vez que tenemos la copia de seguridad a buen recaudo, comenzamos:

Abrimos el archivo como superusuario con el siguiente comando:

sudo gedit /etc/grub.d/00_header

Y al final del archivo es obligatorio identificar al menos al superusuario (usuario con el que instalamos Ubuntu), añadiendo las siguientes líneas:

cat << EOF
set superusers=”usuario1″
password usuario1 contraseña1
EOF

Para el ejemplo de que nuestro superusuario se llamara “juan” y con la contraseña “1234”, sería:

cat << EOF
set superusers=”juan”
password juan 1234
EOF

Añadir más usuarios.

Añadir al final del archivo las siguientes líneas, en lugar de las del ejemplo anterior, que deberán de ser borradas:

cat << EOF
set superusers=”usuario1″
password usuario1 contraseña1
password usuario2 contraseña2
EOF

Para el ejemplo de que nuestro superusuario se llamara “juan” (con la contraseña “1234”) y el otro usuario “pedro” (con la contraseña “5678”), sería:

cat << EOF
set superusers=”juan”
password juan 1234
password pedro 5678
EOF

Cifrado de contraseñas

Uno de los inconvenientes de la configuración de la contraseña que hemos hecho, es que las contraseñas se introducen como texto sin formato en los archivos de GRUB 2. El grado de seguridad puede mejorarse enormemente mediante el uso de “grub-mkpasswd-pbkdf2“. Este comando convierte la contraseña deseada en un código alfanumérico muy largo, que se coloca en los archivos de GRUB 2. De esta forma la contraseña ya no es visible en las secuencias de comandos de Grub 2. Mientras que con el acceso físico a un equipo se puede pasar por alto el menú de GRUB 2, el cifrado hace que sea mucho más difícil, para los hackers casuales, determinar las contraseñas del menú.

Para generar una contraseña cifrada:

1. Abrir un terminal y ejecutar:

grub-mkpasswd-pbkdf2

kaos1204@kaos:~$ grub-mkpasswd-pbkdf2
Enter password: 1234
Reenter password: 1234

2. Introducir la contraseña deseada (Enter password) y no preocuparse si no se ve, es por seguridad.
Volver a escribirla cuando la solicite de nuevo (Reenter password).
Nota: Al arrancar el grub la contraseña que nos pedirá es la que acabamos de escribir, no la codificada.
La terminal nos responderá algo parecido a:

Your PBKDF2 is grub.pbkdf2.sha512.10000.FC58373BCA15A797C

Nota: El número será muy largo y lo abrevio para comprender mejor el código

3. Selecciona el código resultante (detrás de “Your PBKDF2 is”):
grub.pbkdf2.sha512.10000.FC58373BCA15A797C

Lo guardamos en la memoria con clic derecho sobre el texto seleccionado > copiar. También se puede copiar en la terminal con CTRL+SHIFT+C.

4. Mucha atención con esto. Tenemos que cambiar la palabra “password” por “password_pbkdf2” (para especificar la codificación), en todos las líneas de las contraseñas, añadidas al archivo y pegar el código después del nombre de usuario (usuario1), en lugar de la contraseña numérica (1234) en el archivo antes mencionado. (se puede pegar con Ctrl+V).

El formato de una entrada de contraseña cifrada en /etc/grub.d/00_header, tendría un aspecto similar a lo siguiente (he reducido el nº de caracteres de la codificaión):

password_pbkdf2 usuario1 grub.pbkdf2.sha512.10000.FC58373BCA15A797C

Para el ejemplo de que nuestro superusuario se llamara “juan” y con la contraseña codificada, sería:

cat << EOF
set superusers=”juan”
password_pbkdf2 juan grub.pbkdf2.sha512.10000.FC58373BCA15A797C
EOF

Al pegar el código tan largo, gedit se desplazará hasta su final y no veréis nada arriba ni abajo. No os preocupéis, moved el scrollbar inferior hacia la izquierda y ya aparecerá todo el código

Para terminar, Guardar el archivo, cerrarlo y actualizar el grub con:

sudo update-grub

Resumiendo: Con lo hecho hasta ahora, se impedirá el acceso al menú de edición (pulsando la tecla “e”) y a la la línea de comandos “grub>” (pulsando la tecla “c”).

Opcionalmente, los usuarios y contraseñas adicionales se pueden añadir para limitar el acceso a entradas específicas (menuentry) o a todo el menú del Grub2:

La protección de los Menuentry (entradas del menú)

Es obligatorio identificar antes a los usuarios, como hemos explicado antes:

El menú de GRUB 2 puede contener entradas protegidas y no protegidas. El formato para la protección de una entrada del menú consiste en añadir la información de acceso del usuario (--users) a la línea del menuentry.

Dependiendo de los Sistemas Operativos que tengamos instalados, deberemos de editar unos o/y otros archivos, todos dentro de la carpeta /etc/grub.d

Proteger los kernels de la partición principal:

Antes de realizar estos cambios, se recomienda guardar una copia del archivo “/etc/grub.d/10_linux” a otro lugar para servir como una copia de seguridad. No dejar la copia en el directorio /etc/grub.d/, para asegurarse de que no se ejecuta durante las actualizaciones.
Para realizar copia de seguridad y guardarla en el escritorio de root, por ejemplo:

sudo cp /etc/grub.d/10_linux /root/Desktop/10_linux

Editar el archivo “/etc/grub.d/10_linux” con el comando:

sudo gedit /etc/grub.d/10_linux

Buscar la línea siguiente (alrededor de la 90):

printf “menuentry ‘${title}’ ${CLASS} {\n” “${os}” “${version}”

Y añadir los usuarios (--users usuario1):

printf “menuentry ‘${title}’ ${CLASS} –users usuario1 {\n” “${os}” “${version}”

Por ejemplo:

– Para el superusuario “juan” quedaría así:

printf “menuentry ‘${title}’ ${CLASS} –users juan {\n” “${os}” “${version}”

– Para el superusuario “juan” y para “pedro” quedaría así:

printf “menuentry ‘${title}’ ${CLASS} –users juan,pedro {\n” “${os}” “${version}”

Guardar el archivo y actualizar con:

sudo update-grub

La etiqueta “--users” se añadirá automáticamente a cada menuentry situado en el apartado “10_linux” del grub.cfg

Proteger las entradas de otros Sistemas Operativos instalados

Antes de hacer cualquier cambio, se recomienda guardar una copia del archivo “/etc/grub.d/30_os-prober” en otro lugar. No dejar la copia en el directorio /etc/grub.d/, para asegurarse de que no se ejecuta durante las actualizaciones.
Para realizar copia de seguridad y guardarla en el escritorio de root, por ejemplo:

sudo cp /etc/grub.d/30_os-prober /root/Desktop/30_os-prober

El menú de Grub2 incluye una selección de sistemas operativos distintos del sistema operativo por defecto (Ubuntu, en este caso), a través de la secuencia de comandos del archivo 30_os-prober. Las siguientes instrucciones añaden automáticamente la protección de contraseña en todos los menuentry de la sección 30_os-prober del menú de Grub2. Esto incluye Ubuntu y otras instalaciones de GNU/Linux, Windows, OSX, etc

El script del archivo 30_os-prober busca tipos específicos de sistemas operativos. El usuario puede realizar los cambios para todos los sistemas operativos a través de un comando único, o de manera individual:

– Para añadir protección a todas las entradas generadas por /etc/grub.d/30_os-prober ejecutaremos el siguiente comando, que agregará los usuarios (--users) a cada menuentry encontrados automáticamente sin necesidad de editar el archivo:

sudo sed 's/--class os /--class os --users /' -i /etc/grub.d/30_os-prober

– Para activar la protección sólo en un tipo específico de entrada del sistema operativo, añadimos los usuarios (--users) inmediatamente después de “--class os” en el título del menuentry que deseemos. Ejemplos varios con el superusuario “juan”:

Para OSX:

menuentry “${LONGNAME} (${2}-bit) (on ${DEVICE})” –class osx –class darwin –class os –users juan {

Para Windows:

menuentry “${LONGNAME} (on ${DEVICE})” –class windows –class os –users juan {

Para Linux / Ubuntu:

menuentry “${LLABEL} (on ${DEVICE})” –class gnu-linux –class gnu –class os –users juan {

Para Hurd:

menuentry “${LONGNAME} (on ${DEVICE})” –class hurd –class gnu –class os –users juan {

Guardar el archivo y actualizar el grub con:

sudo update-grub

Proteger la partición de recuperación de Windows

Es posible proporcionar protección de contraseña sólo a una partición específica. Un ejemplo obvio sería la partición de recuperación de Windows. Aunque el concepto podría aplicarse a otras secciones OS del archivo 30_os-prober o incluso del script del archivo 10_linux, sólo vamos a verlo para la partición de recuperación de Windows, pero cualquier partición de Windows pueden ser protegida de la misma manera mediante la designación de la partición.

Nota: Esta técnica sólo funciona si el menú de GRUB 2 identifica múltiples particiones de Windows y una de ellas es la partición de recuperación. Si sólo hay una partición de Windows se identifica en el GRUB como Windows, donde, sólo Windows en su totalidad podría ser protegido.

Si el usuario quiere sólo la protección de contraseña en una partición de recuperación de Windows, seguir las indicaciones anteriores y, a continuación:

Determinar la partición de recuperación de Windows (sda1, sda2, etc.) Cambiar en el comando sdXY por los vuestros y los usuarios.

Editar el archivo /etc/grub.d/30_os-prober:

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

Cambiar el siguiente código:

cat << EOF menuentry “${LONGNAME} (on ${DEVICE})” –class windows –class os { EOF

Por este otro:

if [ ${DEVICE} = “/dev/sdXY” ]; then
cat << EOF menuentry “${LONGNAME} (on ${DEVICE})” –users juan {
EOF
else
cat << EOF menuentry “${LONGNAME} (on ${DEVICE})” { EOF fi

Guardar el archivo y actualizar con:

sudo update-grub

Errorres y su solución

Los errores en la creación de una contraseña protegida del menú de Grub2 puede dar lugar a un sistema que no arranca. Para restaurar un sistema con contraseñas rotos, acceder y editar los archivos de configuración de GRUB 2 usando el LiveCD u otro sistema operativo.

Si hemos hecho las copias de seguridad de los archivos como he comentado, arrancaremos el Live-CD en modo prueba y seguirremos los siguientes pasos:
Abrir Nautilus y montar la partición donde tengamos Ubuntu instalado (a la izquierda)
Abrir Nautilus como root:

gksudo nautilus

Seleccionar a la izquierda la partición de Ubuntu que hemos montado
Abrir carpeta /media/
Abrir la carpeta de la partición montada
Abrir la carpeta /root/
Abrir la carpeta /Desktop/
Copiar el archivo “grub.cfg” y
Pegarlo en su respectiva ruta (siempre dentro de la partición montada, no la ruta del live-cd): /boot/grub/
Con esto es suficiente para poder volver a arrancar.

Una vez arrancado Ubuntu debemos sustituir los archivos modificados en /etc/grub.d/ por las copias que hemos guardado en /root/Desktop/

Actualizamos el grub con:

sudo update-grub

Y todo estará como al principio.

Visto en: http://www.ubuntu-guia.com

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s