Administración de sistemas UNIX/Linux Ejercicio práctico optativo (IX)

Anuncio
NOMBRE:
FECHA:
Administración de sistemas UNIX/Linux
Ejercicio práctico optativo (IX)
2012/2013
Introducción
En este ejercicio vamos a configurar una de las máquinas para que albergue el sistema
raı́z de la otra y provea los servicios necesarios para que la segunda sea capaz de arrancar
el sistema completo por red.
El proceso de configuración que vamos a ver puede aplicarse a la configuración de
clusters de máquinas. Una de las ventajas de este despliegue es que sólo necesitamos
mantener una imagen y configuración de sistema operativo, lo que facilita el mantenimiento de instalaciones grandes. Por contra, sólo deberı́a aplicarse cuando la red de
interconexión entre las máquinas puede considerarse libre de intrusos. En redes abiertas o poco fiables este procedimiento está plagado de problemas de seguridad ya que no
considera aspectos de autenticación, verificación de integridad y confidencialidad (siendo
más crı́ticos los dos primeros).
A grandes rasgos la configuración del arranque por red consiste en configurar un
servidor de DHCP, el arranque por PXE y preparar un sistema raı́z para exportarlo
y cargarlo en arranque por NFS. El servidor de DHCP sirve a las máquinas clientes
una dirección de red, la dirección de un servidor de TFTP (Trivial TFP) y el nombre
del fichero que debe descargarse desde el servidor y que contiene el código del cargador
de arranque. El cargador de arranque que utilizaremos se denomina PXELinux y su
configuración también estará almacenada en el servidor TFTP. El cargador se encarga
de buscar la imagen de núcleo en el mismo servidor, ası́ como de cargarlo en memoria y
de cederle el control. Una vez comienza a ejecutar el núcleo, este debe volver a configurar
la red ya que la configuración no se transmite de PXELinux al kernel. En el caso de
Ubuntu, será necesario modificar initrd para llevar a cabo esta configuración y permitir
al kernel montar el sistema de ficheros raı́z que estará exportando el servidor a través
de NFS.
Antes de comenzar, hay que asegurarse de que la máquina A o servidora tiene correctamente configuradas las interfaces de red (una interna, la otra por NAT). El servidor
de NFS debe estar también configurado correctamente. No es necesario haber completado el ejercicio de configuración del LDAP, pero al menos el sistema de la máquina B
o cliente debe estar funcionando y tener configurada una interfaz de red interna en la
misma red virtual que la primera interfaz de la máquina A.
2012/2013
Adminsitración UNIX/Linux - Ejercicios VI
p.1
NOMBRE:
FECHA:
1 Configuración de arranque de un sistema Ubuntu por PXE
1.1 Configuración básica del servidor de DHCP
El servidor de DHCP es el encargado tanto de asignar IPs a la máquina cliente que
va a arrancar por red como de indicarle qué imagen de cargador debe cargar y dónde
se encuentra el servidor TFTP que sirve la imagen. Para este ejercicio usaremos la
implementación de referencia proporcionada por el ISC1 , ya que se encuentra disponible
para un gran número de sistemas.
En el caso de Ubuntu 12.04, el paquete que proporciona el servidor se llama isc-dhcp-server.
Cuando el instalador pregunte en qué interfaces debe estar escuchando el servidor, responder que sólo la interfaz de la red interna. A continuación editar /etc/dhcp/dhcp.conf
para que se sirva un rango de 10 IPs en la subred interna y relanzar el trabajo iscdhcp-server (se trata de un trabajo de Upstart). El fichero de configuración incluye
documentación y contiene numerosos ejemplos.
Indicar cómo se ha modificado /etc/dhcp/dhcp.conf:
En este punto se puede verificar que la configuración del DHCP arrancando la
máquina B, y usando dhclient sobre su interfaz de red para ver si la máquina A le
otorga una dirección IP.
1.2 Configuración del servidor de TFTP
El servidor TFTP es uno de los pocos demonios de red que aún confı́a en la versión
mejorada de el superdemonio de red xinetd para su funcionamiento. Tras instalar los
paquetes tftpd y xinetd (también se puede instalar el cliente tftp por si se quieren
hacer pruebas), hay que crear el fichero /etc/xinetd.d/tftp
service tftp
{
protocol
port
1
= udp
= 69
Internet Software Consortium
2012/2013
Adminsitración UNIX/Linux - Ejercicios VI
p.2
NOMBRE:
FECHA:
socket_type
wait
user
server
server_args
disable
}
=
=
=
=
=
=
dgram
yes
nobody
/usr/sbin/in.tftpd
/var/tftp
no
El directorio /var/tftp es el directorio que será accesible a través del servidor. Dicho
directorio tiene que ser creado a mano (y de hecho el nombre escogido es arbitrario),
pero tanto el directorio como el contenido que añadamos a continuación deben tener
acceso de lectura para todo el mundo.
Para que la configuración tenga efecto hay que reiniciar el superservidor xinetd (en
este caso se trata de un demonio estilo System V).
1.3 Sistema de ficheros raı́z de la máquina cliente
Parar todas las máquinas virtuales y modificar la configuración de los dispositivos de
almacenamiento de la máquina servidora para añadirle el disco de la máquina B. Si al
rearrancar el servidor, el disco de B es usado como disco de arranque (se puede saber por
el hostname si este era distinto en cada disco antes de empezar), cambiar los números
de dispositivo SATA asignados por VirtualBox a cada disco2
Editar la configuración del servidor para que el disco recién añadido se monte en
/media/nfsroot al arranque y sea exportado por NFS a todas las máquinas de la subred
interna (man exports contiene ejemplos de la sintaxis a emplear). Algunas opciones que
deben añadirse son la de lectura escritura y la que permite que el root de la máquina
cliente sea interpretado como root en la máquina local. No olvidar reiniciar el servidor
NFS o ejecutar exportfs -r para aplicar los cambios en los directorios exportados.
En este punto es recomendable comprobar si el directorio exportado puede montarse
en la propia máquina servidora como sistema de ficheros NFS (dependiendo de qué
sintaxis se haya escogido en la configuración puede ser necesario añadir localhost como
cliente permitido).
Por alguna extraña razón (podrı́a ser un bug de la versión del de servidor de NFS
empleada), el directorio raı́z de B no parece exportarse bien tal cual está. Si se monta en
el propio servidor en algún directorio temporal y se hace ls, se produce un error bastante
crı́ptico acerca de demasiados enlaces simbólicos. Un solución temporal consiste un crear
un directorio nuevo dentro del raı́z de B y mover todo el contenido a dicho directorio. Del
mismo modo, hay que modificar la configuración del servidor de NFS para que exporte
desde el subdirectorio creado en vez del punto de montaje original (/media/nfsroot)
Indicar qué cambios se han hecho en la configuración del servidor:
2
De todas formas esto no parece garantizar de modo alguno que el disco de arranque vaya a ser uno
determinado, parece que VirtualBox lo escoge al azar. A falta de verificarlo, es posible que la única
manera fiable sea desactivar la marca de arrancable de las particiones del disco que no queremos que sea
arrancado.
2012/2013
Adminsitración UNIX/Linux - Ejercicios VI
p.3
NOMBRE:
FECHA:
1.4 Preparar los ficheros para el arranque remoto
Ahora poblaremos el directorio que sirve el demonio de TFTP con la mayorı́a de los
ficheros que la máquina cliente debe cargar durante el arranque.
El código del cargador de arranque PXELinux se puede descargar desde http://
laurel.datsi.fi.upm.es/~jhernando/pxelinux.0 y copiar al directorio del servidor
TFTP.
Copiar también la imagen del kernel3 a /var/tfpt/ y crear un enlace al mismo con
el nombre vmlinuz (este nombre en realidad es arbitrario). No olvidar verificar que la
imagen copiada tiene acceso de lectura para todo el mundo.
Crear el directorio /var/tfpt/pxelinux.cfg y añadir un fichero de configuración de
nombre default con el contenido indicado abajo. El valor asignado a nfsroot deberá
ser completado por el alumno, dicho valor es el nombre NFS del directorio raı́z del cliente.
DEFAULT linux
LABEL linux
KERNEL vmlinuz
APPEND initrd=initrd.img root=/dev/nfs nfsroot=??? ip=dhcp rw
Indicar qué valor se ha asignado a nfsroot:
El dispositivo /dev/nfs pasado al kernel como sistema de ficheros raı́z no es un
dispositivo real, sino que es creado por initrd como punto de acceso al sistema de
ficheros indicado por nfsroot.
En una configuración de varios nodos se puede usar la dirección MAC de cada cliente
como nombre del fichero de configuración en vez de default. La imagen de initrd ahı́
referida será creada más adelante.
3
Podemos usar el núcleo de la máquina servidora porque ahora mismo es idéntico a la cliente
2012/2013
Adminsitración UNIX/Linux - Ejercicios VI
p.4
NOMBRE:
FECHA:
Habilitar PXE en el servidor de DHCP añadiendo:
filename "pxelinux.0";
next-server 192.168.100.1;
a la reglas de configuración del fichero dhcpd.conf que proporciona la IP a la máquina
cliente.
1.5 Configuración del arranque del sistema cliente
Para que la máquina cliente sea capaz de montar su sistema raı́z por NFS es necesario
modificar el initrd que cargaba el kernel originalmente por uno con las utilidades
necesarias.
Para ello, editar el fichero /etc/initramfs-tools/initramfs del raı́z de B y cambiar BOOT=local por BOOT=nfs (Ojo: no hacerlo en la máquina servidora)
Crear la imagen de initrd con mkinitramfs usando la opción -d para indicar la ruta
completa al directorio de configuración initramfs-tools del cliente y -o para indicar el
fichero de salida (initrd.img en nuestro caso). Copiar el fichero de salida a /var/tftp.
De no haber necesitado modificar el contenido del disco de B para que todo esté
un subdirectorio por debajo, los cambios a /etc/initramfs/tools podrı́an deshacerse y se
podrı́a seguir utilizando el disco para uso local sin riesgo.
En el fstab del disco B comentar las lı́neas de montaje del raı́z y el swap y añadir
la lı́nea
/dev/nfs/ / nfs defaults 1 1
Dado que durante el arranque el kernel ya habrá configurado eth0 por DHCP antes
de que los scripts de configuración ejecuten, queremos evitar que la red vuelva a ser
reconfigurada. Para ello editar el fichero /etc/network/interfaces de B para que la
configuración sea manual en vez de dhcp.
Crear una máquina nueva sin disco, modificar la configuración de la máquina virtual
para que el arranque sea por red (sistema, placa base) y la interfaz de red interna
(importante: no usar ninguna emulación de tarjeta Intel, el arranque por PXE no
funciona en ese caso).
La primera vez que se ejecute la máquina aparecerá un diálogo de configuración para
la instalación de un sistema operativo. Cancelando la operación se da paso al arranque
por red. Si todo ha ido bien deberı́a verse algo parecido a lo que se muestra en la imagen
1
Si se producen errores de NFS, revisar que el valor de nfsroot asignado en la configuracion de PXE se corresponde con el nombre del directorio exportado (se puede probar
a montar a través de NFS el directorio en el propio servidor para mayor certexza).
En una instalación real, lo más probable es que esta configuración fuese a ser reutilizada por muchas máquinas. En la configuración ejecutada en este ejercicio todas
las máquinas compartirı́an el mismo raı́z en modo lectura escritura. Mientras que en
general eso no supone un riesgo para los usuarios, ya que no se diferencia del caso de un
2012/2013
Adminsitración UNIX/Linux - Ejercicios VI
p.5
NOMBRE:
FECHA:
Figure 1: Comienzo de la secuencia de arranque por red
home exportado por NFS, existen directorios y ficheros de sistema tales como /var/run,
/var/lock/, /var/log, /tmp, algunos ficheros de /etc como las reglas de udev, etc. que
no pueden ser compartidos ya que se usan para crear ficheros temporales como cerrojos,
información de estado de demonios, reglas de configuración... Describe a grandes rasgos
qué solución crees que se podrı́a implantar para evitar que todos esos directorios fuesen
compartidos.
2012/2013
Adminsitración UNIX/Linux - Ejercicios VI
p.6
Descargar