domingo, 29 de abril de 2012

GRUB 2 con contraseña

Cómo proteger GRUB con una 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 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.





==========================================================================

Entrada copiada integramente del siguiente enlace:


 ==========================================================================







Grub 2: Personaliza el menú de arranque

Grub 2: Personaliza el menú de arranque de tu equipo con Molinux

Tabla de contenidos

[ocultar]

¿Qué es GRUB 2?

GRUB 2 es el cargador de arranque por defecto en Ubuntu desde la versión 9.10 (karmic Koala). Cuando el ordenador arranca, nos muestra un menú dando a elegir al usuario que sistema operativo quiere arrancar de los instalados en la máquina. GRUB 2 ha sido totalmente reescrito desde su anterior versión y es software libre.
En esta guía esta realizada con la versión 1.98. Para poder averiguar que versión tenemos instalada podemos poner el siguiente comando en la consola.
user@comp-user:~$ grub-install -v

Estructura de Archivos

GRUB 2 incorpora un directorio totalmente revisado y una jerarquía de archivos. El fichero menu.lst ya no existe.
Los cambios de configuración mas comunes se hacen sobre le fichero “/etc/default/grub” y los ficheros localizados en “/etc/grub.d” que son scripts que acaban formando el fichero “/boot/grub/grub.cfg”, el cual no debería ser editado por el usuario. A continuación vamos a ver los principales directorios y archivos usados por GRUB 2.
i. /boot/grub/grub.cfg
Este fichero es el mas parecido a menu.lst de la versión anterior. Contiene información del menú, pero a diferencia de la versión antigua este archivo no esta destinado a ser editado manualmente ya que se forma a partir de una serie de scripts como dijimos anteriormente.
Cada sección empieza con “##BEGIN” y referencia a los diferentes scripts situados en “/etc/grub.d”.
Este fichero es actualizado cada vez que ejecutamos la orden “update-grub”, también con la instalación o desinstalación de Kernels es nuevamente generado.
En las primeras versiones este fichero era de solo lectura.
ii. /etc/default/grub
Este archivo de configuración contiene información que veremos en las siguientes secciones.
Puede ser editado por el usuario con permisos de administrador, los cambios producidos serán añadidos al fichero “grub.cfg” cuando se actualice.
iii. /etc/grub.d (directory)
Los archivos (scripts) de este directorio son leídos durante la ejecución de “update-grub” o actualizaciones del kernel y el resultado de sus instrucciones son incorporadas a “grub.cfg”. Cada archivo tiene su sección dentro de “grub.cfg”
La colocación de los elementos en “grub.cfg” es determinada por el orden en el cual se ejecutan los ficheros en este directorio. Los archivos que empiezan con un número se ejecutan primero, empezando por el más bajo y después, si los archivos con nombres alfabéticos existen se ejecutan. Las entradas personalizadas del menú pueden ser añadidas en el fichero “40_custom”, o en uno creado nuevamente por el usuario.
Los ficheros existentes por defecto en este directorio son:
- 00_header → Podemos configurar acciones como el timeout, la selección por defecto. Estas configuraciones son importadas del fichero /etc/default/grub, con lo cual deberemos de ir a este ultimo fichero y no deberíamos de tocar 00_header para estos fines.

Como vamos a ver en el siguiente apartado, esta opción no es necesario modificarla aquí, sino en el fichero /etc/default/grub.

Imagen:Grub1.png

- 05_debian_theme → En este archivo podemos configurar la imagen de fondo de nuestro GRUB 2, colores del texto, la línea de selección y los temas.
- 10_linux → Identifica los Kernels usados por el sistema operativo y crea las entradas para el menú.
- 30_os-prober → Este script es usado para la búsqueda e introducción de sistemas operativos en el menú.
El archivo esta dividido en cuatro secciones, representando los diferentes tipos de sistemas operativos, Windows, Linux, OSX y Hurd.
Las variables de este archivo determina el formato del nombre en “/boot/grub/grub.cfg” y en el menú GRUB 2.
- 40_custom → Una plantilla para añadir entradas de menú personalizadas, las cuales serán añadidas con la actualización del fichero “grub.cfg”.

Configurando GRUB 2

Los cambios en la configuración son normalmente hechos en “/etc/default/grub” y en los archivos de configuración personalizados localizados dentro de /etc/grub.d. Cualquier cambio hecho directamente en “/boot/grub/grub.cfg” será sobrescrito cuando ejecutemos la orden “update-grub” y perderemos los cambios realizados, este es uno de los motivos por el que no debemos editar este archivo.
Después de haber editado /etc/default/grub o los scripts contenidos en /etc/grub.d, debemos de ejecutar “update-grub” para incorporar los cambios a “grub.cfg”.
Algunos de los cambios mas comunes, como el SO que debería de arrancar por defecto, o el timeout, pueden ser editados con una aplicación con interfaz gráfica, estos programas son Grub Customizer o StartUp-Manager. /etc/default/grub (file)
Archivo de configuración principal para cambiar las configuraciones por defecto. Las siguientes lineas están disponibles para que el usuario, las modifique.
- GRUB_DEFAULT. Indica la entrada seleccionada por defecto, es decir si arrancamos y no tocamos nada, tras pasar uno segundos GRUB 2 arrancará este SO.
    GRUB_DEFAULT=0. Con el número nos referimos a las entradas según son mostradas en el menú del grub al arrancar. La primera entrada se corresponde con el número 0, el número 1 con la segunda entrada y así sucesivamente.
- GRUB_SAVEDEFAULT= true/false. Si es true guardará el ultimo SO arrancado, para que en la siguiente vez que arranquemos nos mantenga este por defecto.
- GRUB_HIDDEN_TIMEOUT = x. Su valor determina cuanto tiempo se mostrará una pantalla sin el GRUB 2, mientras la pantalla este en blanco el usuario podrá pulsar cualquier tecla para mostrarlo.
El comportamiento por defecto es ocultar el grub si solo hay un SO instalado y arrancarlo directamente. Si los usuario con un sistema operativo desean ver el menu del grub solo deben comentar esta linea. Para comentar una linea debemos poner delante de la misma el símbolo #.
    GRUB_HIDDEN_TIMEOUT = 0. Por defecto en ordenadores con un solo Sistema Operativo. El menú no es mostrado, el SO es arrancado inmediatamente. En este caso durante el arranque pulsando la tecla SHIFT podemos ver el menú.
    GRUB_HIDDENTIMEOUT = x. El proceso de arranque es detenido durante x segundos. Tras pasar estos segundos si no pulsamos cualquier tecla no aparecerá el menú del GRUB arrancando el SO por defecto. En cambio si pulsamos cualquier tecla veremos nuestro menú del grub.
    GRUB_HIDDEN_TIMEOUT = x. Si no tenemos ningún valor, el menú del grub será mostrado por un número de segundos igual al indicado en GRUB_TIMEOUT.
- GRUB_HIDDEN_TIMEOUT_QUIET = true/false. Con el valor false, si tenemos activada la opción anterior, cuando se muestra la pantalla blanca veremos un contador con los segundos restantes. En cambio con true no veríamos ningún contador con los segundos restantes.
- GRUB_TIMEOUT= x. Una vez que el menú es mostrado este debe mantenerse x segundos antes de arrancar el SO por defecto. En cuanto tocamos una tecla desaparece el contador y debemos seleccionar que SO arrancar. Si no queremos tener ninguna restricción de tiempo debemos introducir un -1 en este campo.

Imagen:Grub2.png

- GRUB_CMDLINE_LINUX_DEFAULT = “quiet splash”. Para ver una pantalla negra con los procesos de arranque debemos quitar “quiet splash”.
- GRUB_DISABLE_OS_PROBER= true/false. Habilita/Deshabilita la comprobación ejecución del script os_prober para la detección de otros Sistemas Operativos en otras particiones.
- GRUB_GFXMODE=640x480. Podemos descomentar esta linea para hacerla activa y así poder elegir la resolución del grub. Un ejemplo es 1280x1024x32, donde el ultimo numero hace referencia a los bits de colores.
Las resoluciones disponibles en el GRUB 2 pueden mostrarse ejecutando el comando “vbeinfo” en la linea de comandos del GRUB 2, para acceder a ella debemos pulsar la tecla “c” cuando la pantalla principal del grub es mostrada. Si la resolución no esta disponible o la linea esta comentada GRUB 2 usará la resolución por defecto.
Si usamos una imagen de fondo la resolución elegida y la de la imagen deben ser la misma para unos mejores resultados.
- GRUB_DISABLE_LINUX_RECOVERY = true/false. Esta linea viene comentada si deseamos eliminar las entradas de recuperación de los menús debemos quitar la #, es decir descomentarla.
- GRUB_BACKGROUND. Nos permite poner una imagen de fondo debemos indicarle la ruta completa.

3.1 Cambiar el nombre de las entradas de nuestro menú
Para cambiar de nombre nuestras entradas de los menús tenemos que distinguir dos casos. El primero el de nuestra instalación Linux y segundo el resto de sistemas operativos instalados en el resto de particiones.

3.2 Cambiar el nombre de Molinux
Modificamos el archivo /etc/grub.d/10_linux:
user@comp-user:~$ sudo gedit /etc/grub.d/10_linux
Podemos, por ejemplo, hacer que el nombre de Ubuntu sea del tipo "Ubuntu, Karmic 2.6.31-15-generic", añadimos la línea:
codename="`lsb_release -cs`"
al final de:
linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
De esta forma añadimos una nueva variable con el nombre de la distro al archivo, que podremos usar después en la siguiente Linea:
linux_entry “${OS}, Linux ${version}”
La línea anterior la podemos modificar a nuestro antojo, ahora mostramos algunos ejemplos:
linux_entry "${OS}, ${codename} ${version}" → de esta forma mostrará "Ubuntu, Karmic 2.6.31-15-generic"
linux_entry "${OS} ${codename}" → de esta forma mostrará "Ubuntu Karmic"
linux_entry "${OS} Texto que quieras" → de esta forma mostrará "Ubuntu Texto que quieras"
3.3 Cambiar el nombre de otros Sistemas Operativos
Para cambiar el nombre de otros sistemas operativos debemos de dirigirnos al fichero “/etc/grub.d/30_os-prober”, que mencionamos anteriormente. Este script detecta otros sistemas operativos en otras particiones y los configura.
Vamos a ver un ejemplo con una partición Windows. Buscamos la sección del archivo que corresponda.
for OS in ${OSPROBED} ; do
 DEVICE="`echo ${OS} | cut -d ':' -f 1`"
 LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
 LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
 BOOT="`echo ${OS} | cut -d ':' -f 4`"
Y cambiamos:
 if [ -z "${LONGNAME}" ] ; then
   LONGNAME="${LABEL}"
 fi
Por: if [ "${LONGNAME}" = "Titulo literal que aparece en el menu grub" ] ; then
  LONGNAME="Nuevo título que quieres"
elif [ -z "${LONGNAME}" ] ; then
  LONGNAME="${LABEL}"
fi
Por ejemplo, si en el menú grub aparece "Windows 7 (loader) (on /dev/sda1)" y queremos que diga "Seven (on /dev/sda1)", entonces escribiremos:
if [ "${LONGNAME}" = "Windows 7 (loader)" ] ; then
  LONGNAME="Seven"
elif [ -z "${LONGNAME}" ] ; then
  LONGNAME="${LABEL}"
fi
Ver que "Título literal que aparece en el menu grub" no debe incluir el texto que indica en que partición está instalado el sistema operativo en referencia, en este caso (on/dev/sda1), esto se edita como se indica más adelante.
Guardamos el archivo y ejecutamos:
user@comp-user:~$ sudo update-grub2


Entradas de Menú Personalizadas

GRUB 2 permite a los usuarios crear selecciones de menú personalizadas que automáticamente serán añadidas al menú de grub con la ejecución de “sudo update-grub”. El archivo “/etc/grub.d/40_custom”, nos sirve de ejemplo de como crear otros menús.
El nombre del archivo determina el orden en que serán añadidas dentro de “grub.cfg” y por tanto el orden en el cual serán mostradas. Los archivos que comienzan con números son ejecutados primero siguiendo el orden de los mismos. Entonces las entradas que añadamos en este fichero aparecerán la ultimas en el menú. Si queremos que las nuevas entradas aparezcan arriba debemos crear un fichero “06_xxx” (en xxx podemos poner el nombre que queramos) e introducir aquí las nuevas entradas estas quedarán en la parte superior del menú, en este último caso debemos darle permisos de ejecución a nuestro nuevo fichero:
user@comp-user:~$ sudo chmod +x /etc/grub.d/06_xxx
Los contenidos de este archivo son añadidos a grub.cfg con la ejecuciones de update-grub.
4.1 Reglas para la construcción de una entrada
Esta es la solución si el grub no detecta la partición o si la detecta pero no la arranca correctamente. Es el equivalente a insertar una entrada manualmente en el antiguo menu.lst. En este ejemplo insertamos una partición de MacOS.
Abrimos el archivo /etc/grub.d/40_custom:
user@comp-user:~$ sudo gedit /etc/grub.d/40_custom
En la última línea del archivo pegamos las siguientes líneas (importante cambiar hd0,1 por la partición que corresponda):
menuentry "MacOS X (en hd0,1)" {
         insmod hfsplus
         set root=(hd0,1)
         multiboot /boot}
Escribimos el comando:
user@comp-user:~$ sudo update-grub2
Si en el menú del grub aparecen 2 entradas para mac (la que creamos nosotros y otra que aparece automáticamente) debemos abrir el archivo 30_os-prober, ir a la sección mac y comentar las lineas dedicadas a este sistema operativo (si no se ha modificado este archivo las lineas son desde la 158 hasta la 207. ambas incluidas):
  1. macosx)
  2. OSXUUID="`grub-probe --target=fs_uuid --device ${DEVICE} 2> /dev/null`"
  3. cat << EOF
. . .
  1. xnu_splash /Extra/splash.tga
  2. fi
  3. fi
  4. }
  5. EOF


Eliminar kernels

Para eliminar un Kernel, podemos mover los archivos de ese kernel de la carpeta /boot a una carpeta creada por nosotros. Primero creamos la carpeta:
user@comp-user:~$ sudo mkdir /boot/kernels
A continuación movemos la imagen del Kernel (xx-xx hace referencia a la versión del kernel que tengamos instalada):
user@comp-user:~$ sudo mv /boot/vmlinuz-2.6.xx-xx-generic-pae /boot/kernels
También podemos mover la imagen que se utiliza para entrar en el modo recuperación:
user@comp-user:~$ sudo mv /boot/initrd.img-2.6.xx-xx-generic-pae /boot/kernels
Y el paso final como siempre que cambiamos algo relacionado con el grub es actualizarlo, para ello:
user@comp-user:~$ sudo update-grub2


Cambiar fondo

Cambiar la imagen de fondo del grub es bastante sencillo. Una vez que tenemos la imagen que queremos, debemos seguir los siguientes pasos.
1. Si cambiamos la resolución en /etc/default/grub con la opción que vimos en el apartado “configurando grub 2”, debemos abrir gimp y darle la misma resolución.
2. Copiarla en /usr/share/images/grub
3. Este paso consiste en abrir el fichero /etc/grub.d/05_debian_theme. Para ello teclear en la consola:
user@comp-user:~$ sudo gedit /etc/grub.d/05_debian_theme
4. Ahora buscamos la linea que dice: WALLPAPER=”....” e introducir la nueva ruta de la imagen que elegimos que estará en el directorio /usr/share/images/grub.
5. Por ultimo actualizar el grub:
user@comp-user:~$ sudo update-grub2



 ========================================================================

Entrada copiada integramente del siguiente enlace:
.
http://comunidad.molinux.info/index.php/Grub_2:_Personaliza_el_men%C3%BA_de_arranque_de_tu_equipo_con_Molinux


========================================================================