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