aboutsummaryrefslogtreecommitdiff
path: root/es_ES.ISO8859-1/books/handbook/jails/chapter.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'es_ES.ISO8859-1/books/handbook/jails/chapter.sgml')
-rw-r--r--es_ES.ISO8859-1/books/handbook/jails/chapter.sgml1026
1 files changed, 1018 insertions, 8 deletions
diff --git a/es_ES.ISO8859-1/books/handbook/jails/chapter.sgml b/es_ES.ISO8859-1/books/handbook/jails/chapter.sgml
index 3239bfc6cd..ed8b35ebd9 100644
--- a/es_ES.ISO8859-1/books/handbook/jails/chapter.sgml
+++ b/es_ES.ISO8859-1/books/handbook/jails/chapter.sgml
@@ -1,33 +1,1043 @@
<!--
+ The FreeBSD Documentation Project
$FreeBSD$
-
The FreeBSD Spanish Documentation Project
- Original Revision: r1.11
-
+ Original revision: r1.14
-->
-
<chapter id="jails">
<chapterinfo>
<authorgroup>
<author>
<firstname>Matteo</firstname>
<surname>Riondato</surname>
- <contrib>Escrito por</contrib>
+ <contrib>Escrito por </contrib>
</author>
</authorgroup>
</chapterinfo>
<title>Jaulas</title>
- <indexterm><primary>jaulas</primary></indexterm>
+ <indexterm><primary>jails</primary></indexterm>
<sect1 id="jails-synopsis">
- <title>*</title>
+ <title>Sinopsis</title>
+
+ <para>En este cap&iacute;tulo se explica qu&eacute; son las
+ jaulas en &os; y c&oacute;mo usarlas. Las jaulas, citadas
+ con frecuencia como la nueva generaci&oacute;n de
+ <emphasis>entornos chroot</emphasis>, son una herramienta
+ muy poderosa que se ha puesto al servicio de los administradores
+ de sistemas, aunque su uso m&aacute;s b&aacute;sico puede
+ ser tambi&eacute;n de suma utilidad para usuarios avanzados.</para>
+
+ <para>Tras leer este cap&iacute;tulo sabr&aacute; usted:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Qu&eacute; es una jaula y para qu&eacute; puede usarse
+ en sistemas &os;.</para>
+ </listitem>
+
+ <listitem>
+ <para>C&oacute;mo generar, arrancar y parar una jaula.</para>
+ </listitem>
+
+ <listitem>
+ <para>C&oacute;mo manejarse con los rudimentos de la
+ administraci&oacute;n de las jaulas, tanto desde dentro
+ como desde fuera de la jaula.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Otras fuentes de informaci&oacute;n &uacute;til sobre
+ las jaulas:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>La p&aacute;gina de manual &man.jail.8;. Es la referencia
+ completa de <command>jail</command>, la herramienta administrativa
+ de &os; con la que se arrancan, paran y controlan las jaulas.</para>
+ </listitem>
+
+ <listitem>
+ <para>Las listas de correo y sus respectivos archivos. Los archivos
+ de la &a.questions;, entre otras listas de correo alojadas en
+ el &a.mailman.lists; contienen una enorme cantidad de
+ informaci&oacute;n sobre jaulas. La ayuda que est&aacute;
+ buscando puede obtenerla, por tanto, de una b&uacute;squeda
+ en los archivos de las listas o de enviar una pregunta que
+ nadie haya hecho en la lista de correo &a.questions.name;.</para>
+ </listitem>
+ </itemizedlist>
+
+ </sect1>
+
+ <sect1 id="jails-terms">
+ <title>T&eacute;rminos relacionados con las jaulas</title>
+
+ <para>Para ayudar a comprender las partes de &os; que intervienen
+ en el funcionamiento de las jaulas, su funcionamiento interno y
+ el modo en que interactuan con el resto de &os;, durante el
+ resto del cap&iacute;tulo se utilizar&aacute;n los siguientes
+ t&eacute;rminos:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term>&man.chroot.2; (comando)</term>
+ <listitem>
+ <para>Es una llamada al sistema de &os; que restringe el
+ directorio raiz de un proceso y sus hijos.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>&man.chroot.2; (entorno)</term>
+ <listitem>
+ <para>Es el entorno de procesos que se ejecutan en un
+ <quote>chroot</quote>. Esto incluye recursos como
+ la parte visible del sistema de ficheros, los ID de usuario
+ y grupo disponibles, interfaces de red u otros mecanismos IPC,
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>&man.jail.8; (comando)</term>
+ <listitem>
+ <para>La herramienta de administraci&oacute;n que permite arrancar
+ procesos dentro del entorno de una jaula.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>servidor (sistema, proceso, usuario, etc)</term>
+ <listitem>
+ <para>El sistema que controla una jaula. El servidor tiene
+ acceso a todos los recursos de hardware y puede controlar
+ procesos tanto dentro como fuera de la jaula. Una de las
+ diferencias importantes entre el sistema que aloja la jaula y
+ la jaula propiamente dicha: las limitaciones que afectan a
+ los procesos que se ejecutan con privilegios de superusuario
+ dentro de la jaula no dependen de los procesos del
+ servidor que la aloja.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>enjaulado (sistema, proceso, usuario, etc.)</term>
+ <listitem>
+ <para>Un proceso, usuario u otra entidad, cuyo acceso a los
+ recursos est&aacute; restringido por una jaula de &os;.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect1>
+
+ <sect1 id="jails-intro">
+ <title>Introducci&oacute;n</title>
+
+ <para>Dado lo dificil y desconcertante de la tarea de
+ administrar sistemas se han ido desarrollando poderosas
+ herramientas con el fin de hacer la vida del administrador
+ m&aacute;s sencilla. Dichas herramientas suelen facilitar
+ cierto tipo de mejoras en la instalaci&oacute;n, configuraci&oacute;n
+ o mantenimiento de los sistemas. Una de las tareas que
+ se espera que cumpla un administrador de sistemas es la
+ configuraci&oacute;n adecuada de la seguridad, de modo que
+ pueda dar el servicio para el que se ha destinado sin que
+ pueda verse comprometido.</para>
+
+ <para>Una de las herramientas disponibles para mejorar los niveles
+ de seguridad de un sistema &os; es el uso de
+ <emphasis>jaulas</emphasis>. Las jaulas fueron introducidas en
+ &os;&nbsp;4.X por &a.phk;, pero en &os;&nbsp;5.X sus capacidades fueron
+ aumentadas hasta hacer de ellas un subsistema poderoso y
+ flexible. Su desarrollo sigue avanzando, aumentando as&iacute; su
+ utilidad, rendimiento, fiabilidad y seguridad.</para>
+
+ <sect2 id="jails-what">
+ <title>Qu&eacute; es una jaula</title>
+
+ <para>Los sistemas tipo BSD disponen de &man.chroot.2; desde
+ la &eacute;poca de 4.2BSD. &man.chroot.8; permite restringir
+ el directorio raiz de un conjunto de procesos, creando un
+ entorno seguro y separado del resto del sistema. Los procesos
+ creados dentro de un entorno chroot no pueden acceder a ficheros
+ o recursos ubicados fuera del mismo. Por esta raz&oacute;n,
+ si un atacante logra comprometer un servicio que se ejecuta
+ en un entorno chroot no deber&iacute;a autom&aacute;ticamente
+ poder acceder al resto del sistema. &man.chroot.8; es una
+ buena herramienta para tareas sencillas que no requieran
+ mucha flexibilidad o caracter&iacute;sticas complejas o muy
+ avanzadas. Por desgracia, desde la invenci&oacute;n de chroot
+ se han ido encontrando muchas formas de saltarse las
+ barreras que chroot impone y, aunque est&eacute;n corregidas
+ en las versiones m&aacute;s modernas del kernel de &os;,
+ era evidente que &man.chroot.2; no era la soluci&oacute;n
+ ideal para ejecutar servicios con seguridad. Hab&iacute;a
+ que implementar un nuevo subsistema.</para>
+
+ <para>Este es uno de los principales motivos por los que
+ se crearon las <emphasis>jaulas</emphasis>.</para>
+
+ <para>Las jaulas llevan m&aacute;s all&aacute; en muchos
+ sentidos el concepto tradicional de entorno
+ &man.chroot.2;. En un entorno &man.chroot.2; tradicional los
+ procesos solo ven limitada la parte del sistema de ficheros
+ a la que pueden acceder. El resto de recursos del sistema,
+ es decir, el conjunto de usuarios del sistema, los procesos
+ en ejecuci&oacute;n o el subsistema de red est&aacute;n
+ compartidos entre el sistema alojado y el servidor. Las jaulas
+ extienden este modelo virtualizando no solamente el acceso al
+ sistema de ficheros, sino al conjunto de usuarios, al subsistema
+ de red del kernel de &os; y unas cuantas cosas m&aacute;s. En la <xref
+ linkend="jails-tuning"> se detallan diversas opciones de
+ control exhaustivo para configurar el acceso a recursos de
+ un entorno enjaulado.</para>
+
+ <para>Una jaula se caracteriza por disponer de cuatro elementos:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Un <quote>sub&aacute;rbol</quote> de directorios:
+ el punto desde el que se entra a una jaula. Una vez
+ dentro de la jaula un proceso no puede escapar de dicho
+ <quote>sub&aacute;rbol</quote>. Los t&iacute;picos problemas
+ de seguridad que aparec&iacute;n una y otra vez en el
+ dise&ntilde;o del &man.chroot.2; original no afectan a
+ las jaulas de &os;.</para>
+ </listitem>
+
+ <listitem>
+ <para>Un nombre de m&aacute;quina (<quote>hostname</quote>),
+ que definir&aacute; a la jaula. Las jaulas se usan
+ principalmente para albergar servicios de red, por lo que
+ disponer de un nombre de m&aacute;quina descriptivo ayuda
+ enormemente al administrador de sistemas.</para>
+ </listitem>
+
+ <listitem>
+ <para>Una direcci&oacute;n <acronym>IP</acronym>: debe asignarse
+ a la jaula y no cambiarse durante el ciclo de vida de la
+ jaula. La direcci&oacute;n IP de una jaula suele ser un
+ alias de un interfaz de red, aunque no es imprescindible que
+ as&iacute; sea.</para>
+ </listitem>
- <para>Pendiente de traducci&oacute;n.</para>
+ <listitem>
+ <para>Un comando: La ruta de un ejecutable ubicado dentro de
+ la jaula. La ruta es relativa al directorio raiz de la
+ jaula, por lo que puede ser muy diferentes seg&uacute;n
+ el entorno.</para>
+ </listitem>
+ </itemizedlist>
+ <para>Adem&aacute;s, las jaulas pueden tener sus propios usuarios
+ e incluso su propio <username>root</username>. Es obvio que
+ este usuario <username>root</username> tiene su poder para hacer
+ circunscrito a la jaula y, desde el punto de vista del servidor,
+ el usuario <username>root</username> de la jaula no es
+ omnipotente. El usuario <username>root</username> de la jaula
+ no puede ejecutar tareas cr&iacute;ticas fuera de la jaula
+ (&man.jail.8;) a la que pertenece. M&aacute;s adelante, en
+ la <xref
+ linkend="jails-tuning">, se dar&aacute; m&aacute;s
+ informaci&oacute;n sobre las restricciones del usuario
+ <username>root</username>.</para>
+ </sect2>
</sect1>
+ <sect1 id="jails-build">
+ <title>Creaci&oacute;n y gesti&oacute;n de jaulas</title>
+
+ <para>Algunos administradores dividen las jaulas en dos tipos:
+ jaulas <quote>completas</quote>, que recrean un sistema &os;
+ real, y jaulas <quote>de servicio</quote>, que son aquellas
+ que est&aacute;n dedicadas a una sola aplicaci&oacute;n o
+ servicio, en muchos casos ejecut&aacute;ndose sin privilegios. Se
+ trata de una divisi&oacute;n exclusivamente conceptual, por lo
+ que el proceso de generaci&oacute;n de una jaula no se ve
+ afectado por ella. La p&aacute;gina de manual &man.jail.8;
+ explica claramente el procedimiento a seguir para generar una
+ jaula:</para>
+
+ <screen>&prompt.root; <userinput>setenv D <replaceable>/aqu&iacute;/est&aacute;/la/jaula</replaceable></userinput>
+&prompt.root; <userinput>mkdir -p $D</userinput> <co id="jailpath">
+&prompt.root; <userinput>cd /usr/src</userinput>
+&prompt.root; <userinput>make world DESTDIR=$D</userinput> <co id="jailworld">
+&prompt.root; <userinput>cd etc/</userinput> <footnote><para>Este paso
+no es necesario en &os; 6.0 y versiones posteriores.</para></footnote>
+&prompt.root; <userinput>make distribution DESTDIR=$D</userinput> <co id="jaildistrib">
+&prompt.root; <userinput>mount_devfs devfs $D/dev</userinput> <co id="jaildevfs"></screen>
+
+ <calloutlist>
+ <callout arearefs="jailpath">
+ <para>El mejor punto de partida es la elecci&oacute;n del punto
+ del sistema de ficheros del servidor donde estar&aacute;
+ f&iacute;sicamente ubicada la jaula. <filename
+ role="directory">/usr/jail/<replaceable>nombredelajaula</replaceable></filename>
+ es un buen sitio. <replaceable>nombredelajaula</replaceable>
+ es el nombre de m&aacute;quina que identifica a la jaula. El
+ sistema de ficheros <filename
+ role="directory">/usr/</filename> suele tener espacio
+ suficiente para albergar el sistema de ficheros de la jaula que,
+ cuando se trata de jaulas <quote>completas</quote>, es
+ esencialmente lo necesario para alojar todos y cada uno de
+ los sistemas de ficheros en una instalaci&oacute;n del sistema
+ base por omisi&oacute;n de &os;.</para>
+ </callout>
+
+ <callout arearefs="jailworld">
+ <para>Este comando crear&aacute; el contenido necesario
+ (binarios, bibliotecas, p&aacute;ginas de manual, etc.) y
+ lo copiar&aacute; al <quote>sub&aacute;rbol</quote> elegido
+ como ubicaci&oacute;n f&iacute;sica de la jaula. Todo se
+ hace al t&iacute;pico estilo &os;: se compila todo y luego
+ se instala en la ruta de destino.</para>
+ </callout>
+
+ <callout arearefs="jaildistrib">
+ <para>Al pasar el <quote>target</quote>
+ <maketarget>distribution</maketarget> a
+ <application>make</application> se instalan todos los ficheros
+ de configuraci&oacute;n necesarios. En pocas palabras,
+ instala cada fichero instalable que haya en
+ <filename role="directory">/usr/src/etc/</filename> en el
+ directorio <filename role="directory">/etc</filename> de la
+ jaula, es decir, en
+ <filename role="directory">$D/etc/</filename>.</para>
+ </callout>
+
+ <callout arearefs="jaildevfs">
+ <para>No es imprescindible montar el sistema de ficheros
+ &man.devfs.8; dentro de la jaula aunque por otra parte
+ (casi) todas las aplicaciones necesitan acceso al menos
+ a un dispositivo, dependiendo esto del prop&oacute;sito
+ de la aplicaci&oacute;n. Es muy importante el control del
+ acceso a dispositivos desde la jaula, puesto que una
+ configuraci&oacute;n descuidada puede permitir que un
+ atacante haga de las suyas. El control sobre &man.devfs.8;
+ se gestiona mediante reglas que se detallan en las
+ p&aacute;ginas de manual &man.devfs.8; y &man.devfs.conf.5;.</para>
+ </callout>
+ </calloutlist>
+
+ <para>Una vez instalada la jaula puede arrancarla mediante
+ &man.jail.8;. &man.jail.8; usa los cuatro argumentos que
+ se detallan en la <xref
+ linkend="jails-what">. Puede pasarle otros argumentos
+ adem&aacute;s de estos, por ejemplo para ejecutar procesos
+ enjaulados bajo los permisos de un usuario espec&iacute;fico. El
+ argumento <option><replaceable>comando</replaceable></option>
+ depende del tipo de jaula; si se trata de un
+ <emphasis>virtual system</emphasis> <filename>/etc/rc</filename>
+ es una buena elecci&oacute;n, puesto que ejecutar&aacute; la
+ secuencia de arranque de un sistema &os; real. Si se trata
+ de una jaula <emphasis>de servicio</emphasis> depende del
+ servicio o aplicaci&oacute;n que se quiera ejecutar mediante
+ la jaula.</para>
+
+ <para>Con frecuencia las jaulas se arrancan durante el arranque del
+ servidor que las aloja; el sistema <filename>rc</filename> de
+ &os; permite hacerlo de un modo muy sencillo.</para>
+
+ <procedure>
+ <step>
+ <para>Puede crear una lista de jaulas que quiera arrancar
+ en el inicio del sistema en el fichero
+ &man.rc.conf.5;:</para>
+
+ <programlisting>jail_enable="YES" # Ponga NO si quiere desactivar el arranque de jaulas
+jail_list="<replaceable>www</replaceable>" # Lista de nombres de jaulas separados por espacios</programlisting>
+ </step>
+
+ <step>
+ <para>Tendr&aacute; que a&ntilde;adir par&aacute;metros
+ espec&iacute;ficos para cada jaula al fichero
+ &man.rc.conf.5;:</para>
+
+ <programlisting>jail_<replaceable>www</replaceable>_rootdir="/usr/jail/www" # directorio raiz de la jaula
+jail_<replaceable>www</replaceable>_hostname="<replaceable>www</replaceable>.example.org" # nombre de m&aacute;quina de la jaula
+jail_<replaceable>www</replaceable>_ip="192.168.0.10" # direcci&oacute;n IP de la jaula
+jail_<replaceable>www</replaceable>_devfs_enable="YES" # montar devfs en la jaula
+jail_<replaceable>www</replaceable>_devfs_ruleset="<replaceable>www_ruleset</replaceable>" # reglas a aplicar a devfs dentro de la jaula</programlisting>
+
+ <para>El arranque de jaulas por omisi&oacute;n que se
+ configure en &man.rc.conf.5; ejecutar&aacute; el script
+ <filename>/etc/rc</filename> de la jaula y asumir&aacute;
+ que es un sistema virtual completo. Si se trata de una
+ jaula de servicio el comando de arranque por omisi&oacute;n
+ tendr&aacute; que cambiarse configurando la opci&oacute;n
+ <varname>jail_<replaceable>nombredejaula</replaceable>_exec_start</varname>
+ seg&uacute;n convenga.</para>
+
+ <note>
+ <para>Si quiere consultar la lista completa de opciones
+ consulte la p&aacute;gina de manual
+ &man.rc.conf.5;.</para>
+ </note>
+ </procedure>
+
+ <para>Puede arrancar o parar a mano una jaula mediante el script
+ <filename>/etc/rc.d/jail</filename> siempre y cuando la jaula
+ aparezca en <filename>rc.conf</filename>:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/jail start <replaceable>www</replaceable></userinput>
+&prompt.root; <userinput>/etc/rc.d/jail stop <replaceable>www</replaceable></userinput></screen>
+
+ <para>De momento no hay una forma limpia de apagar una jaula
+ (&man.jail.8;) debido a que los comandos que se usan normalmente
+ para producir un apagado limpio del sistema no pueden usarse
+ dentro de una jaula. La mejor forma de parar una jaula es
+ ejecutar el siguiente comando desde dentro de la propia jaula
+ o bien mediante &man.jexec.8; desde fuera:</para>
+
+ <screen>&prompt.root; <userinput>sh /etc/rc.shutdown</userinput></screen>
+
+ <para>Para m&aacute;s informaci&oacute;n consulte la p&aacute;gina
+ de manual &man.jail.8;.</para>
+ </sect1>
+
+ <sect1 id="jails-tuning">
+ <title>Administraci&oacute;n y personalizaci&oacute;n a fondo</title>
+
+ <para>Hay diversas opciones que pueden usarse en las jaulas y varios
+ tipos de formas de combinar un sistema &os; servidor y las jaulas
+ y poder disponer de aplicaciones de alto nivel. En esta
+ secci&oacute;n se muestra lo siguiente:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Algunas de las opciones disponibles para personalizar
+ el comportamiento y las restricciones de seguridad que
+ pueden aplicarse en una jaula.</para>
+ </listitem>
+
+ <listitem>
+ <para>Algunas de las aplicaciones de alto nivel creadas para
+ la administraci&oacute;n de jaulas. Estas aplicaciones
+ est&aacute;n en la colecci&oacute;n de ports y pueden
+ utilizarse en conjunto para implementar productos
+ basados en jaulas.</para>
+ </itemizedlist>
+
+ <sect2 id="jails-tuning-utilities">
+ <title>Herramientas del sistema para la personalizaci&oacute;n
+ de jaulas en &os;</title>
+
+ <para>La personalizaci&oacute;n a fondo de las jaulas se hace
+ en su mayor parte mediante la configuraci&oacute;n de variables
+ &man.sysctl.8;. Hay una subcategor&iacute;a especial de
+ sysctl para que sea m&aacute;s sencillo organizar las opciones
+ m&aacute;s m&aacute;s importantes: se trata de las opciones
+ de la jerarqu&iacute;a <varname>security.jail.*</varname>
+ del kernel de &os;. A continuaci&oacute;n veremos una lista
+ de las principales sysctl relacionadas con las jaulas y los
+ valores que tienen por omisi&oacute;n. Los nombres deber&iacute;an
+ describir por s&iacute; mismos qu&eacute; funci&oacute;n tienen
+ (N. del T.: En ingl&eacute;s, claro) pero si necesita m&aacute;s
+ informaci&oacute;n sobre ellas consulte las p&aacute;ginas de
+ manual &man.jail.8; y &man.sysctl.8;.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><varname>security.jail.set_hostname_allowed:
+ 1</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname>security.jail.socket_unixiproute_only:
+ 1</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname>security.jail.sysvipc_allowed:
+ 0</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname>security.jail.enforce_statfs:
+ 2</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname>security.jail.allow_raw_sockets:
+ 0</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname>security.jail.chflags_allowed:
+ 0</varname></para>
+ </listitem>
+
+ <listitem>
+ <para><varname>security.jail.jailed: 0</varname></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>El administrador del <emphasis>servidor</emphasis> puede
+ usar estas variables para a&ntilde;adir o quitar limitaciones
+ impuestas por omisi&oacute;n al usuario
+ <username>root</username>. Tenga en cuenta que hay ciertas
+ limitaciones que no pueden quitarse. El usuario
+ <username>root</username> no puede montar o desmontar sistemas
+ de ficheros desde su jaula. El usuario <username>root</username>
+ no puede cargar o descargar reglas de &man.devfs.8;, configurar
+ reglas de cortafuegos ni ejecutar muchas otras tareas
+ administrativas que requieran modificaciones o acceso a datos
+ internos del kernel, como cambiar el nivel de seguridad
+ <varname>securelevel</varname> del kernel.</para>
+
+ <para>El sistema base de &os; contiene un conjunto b&aacute;sico
+ de herramientas que permiten el acceso a informaci&oacute;n
+ sobre jaulas activas en el sistema, as&iacute; como la
+ conexi&oacute;n a una jaula para ejecutar comandos
+ administrativos. &man.jls.8; y &man.jexec.8; forman parte
+ del sistema base de &os; y permiten ejecutar las siguientes
+ tareas:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Mostrar una lista de jaulas activas y sus correspondientes
+ identificadores de jaula (<acronym>JID</acronym>),
+ direcci&oacute;n <acronym>IP</acronym>, nombre de m&aacute;quina
+ y ruta.</para>
+ </listitem>
+
+ <listitem>
+ <para>Conectarse a una jaula en ejecuci&oacute; desde el
+ servidor y ejecutar un comando dentro de la jaula o
+ realizar tareas administrativas dentro de dicha jaula. Esto
+ es muy &uacute;til cuando el usuario
+ <username>root</username> quiere apagar la jaula de forma
+ limpia. La herramienta &man.jexec.8; permite
+ tambi&eacute;n arrancar una shell dentro de la jaula para
+ realizar tareas administrativas. Veamos un ejemplo:</para>
+
+ <screen>&prompt.root; <userinput>jexec <replaceable>1</replaceable> tcsh</userinput></screen>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2 id="jails-tuning-admintools">
+ <title>Herramientas para tareas administrativas de alto nivel
+ en la Colecci&oacute;n de Ports</title>
+
+ <para>Entre las variadas aplicaciones ajenas al Proyecto &os; que
+ han ido apareciendo para administrar jaulas una de las m&aacute;s
+ completas y &uacute;tiles es <filename
+ role="package">sysutils/jailutils</filename>. Es un conjunto de
+ peque&ntilde;as aplicaciones de mucha ayuda en la gesti&oacute;n
+ de una jaula (&man.jail.8;). Por favor, consulte su p&aacute;gina
+ web para m&aacute;s informaci&oacute;n.</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="jails-application">
+ <title>Uso de las jaulas</title>
+
+ <sect2 id="jails-service-jails">
+ <sect2info>
+ <authorgroup>
+ <author>
+ <firstname>Daniel</firstname>
+ <surname>Gerzo</surname>
+ <contrib>Escrito por </contrib>
+ <!-- 15. May 2007 -->
+ </author>
+ </authorgroup>
+ </sect2info>
+
+ <title>Jaulas <quote>de servicio</quote></title>
+
+ <para>Esta secci&oacute;n est&aacute; basada en una idea
+ que &a.simon; present&oacute; por primera vez en <ulink
+ url="http://simon.nitro.dk/service-jails.html"></ulink> y en
+ un art&iacute;culo con contenido adicional escrito por Ken
+ Tom <email>locals@gmail.com</email>. En esta secci&oacute;n
+ se detalla c&oacute;mo configurar un sistema &os; que
+ a&ntilde;ade una capa adicional de seguridad mediante el uso
+ de &man.jail.8;. Para su verdadero aprovechamiento se asume
+ que el sistema en el que se vaya a aplicar ejecuta al menos
+ RELENG_6_0 y que la informaci&oacute;n que contienen las secciones
+ previas de este cap&iacute;tulo se ha comprendido totalmente.</para>
+
+ <sect3 id="jails-service-jails-design">
+ <title>Dise&ntilde;o</title>
+
+ <para>Uno de los mayores problemas de las jaulas es la
+ gesti&oacute;n de su proceso de actualizaci&oacute;n. Este
+ proceso tiene a ser un problema porque cada jaula tiene que
+ recompilarse &iacute;ntegramente desde el c&oacute;digo fuente
+ cada vez que hay que actualizarla. Esto no es un gran problema
+ si tenemos una sola jaula puesto que el proceso de
+ actualizaci&oacute;n es bastante simple, pero si hay muchas
+ jaulas ser&aacute; un trabajo largo y tedioso.</para>
+
+ <warning>
+ <para>:&nbsp;Esta configuraci&oacute;n requiere mucha experiencia
+ con &os; y el uso de sus caracter&iacute;sticas. Si los
+ pasos que se detallan a continuaci&oacute;n le parecen
+ demasiado complicados puede echar un vistazo a sistemas
+ m&aacute;s sencillos como <filename
+ role="package">sysutils/ezjail</filename>, que le
+ permitir&aacute; acceder a un m&eacute;todo de
+ administraci&oacute;n de jaulas en &os; m&aacute;s sencillo
+ y no es tan sofisticado como el que le proponemos a
+ continuaci&oacute;n.</para>
+ </warning>
+
+ <para>El origen de esta idea es resolver los problemas antes
+ descritos compartiendo el m&aacute;ximo posible entre distintas
+ jaulas, de un modo seguro (utilizando montajes
+ using read-only &man.mount.nullfs.8; mounts) para que la
+ actualizaci&oacute;n sea m&aacute;s sencilla y el ubicar
+ servicios aislados en jaulas sea m&aacute;s interesante.
+ Adem&aacute;s, se presenta una forma sencilla de a&ntilde;adir
+ o borrar jaulas as&iacute; como una forma de actualizarlas.</para>
+
+ <note>
+ <para>Los ejemplos de servicios en este contexto son: un
+ servidor <acronym>HTTP</acronym>,un servidor
+ <acronym>DNS</acronym>, un servidor
+ <acronym>SMTP</acronym>, etc.</para>
+ </note>
+
+ <para>Los objetivos de la configuraci&oacute;n descrita en
+ esta secci&oacute;n son:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Crear una estructura de jaulas simple y f&aacute;cil
+ de entender. Esto implica <emphasis>no</emphasis> tener
+ que ejecutar un <quote>installworld</quote> completo en
+ todas y cada una de las jaulas.</para>
+ </listitem>
+ <listitem>
+ <para>Facilitar la creaci&oacute;n de nuevas jaulas o
+ el borrado de jaulas previamente existentes.</para>
+ </listitem>
+ <listitem>
+ <para>Facilitar la actualizaci&oacute;n de jaulas
+ ya existentes.</para>
+ </listitem>
+ <listitem>
+ <para>Hacer posible el uso de una rama de &os;
+ personalizada.</para>
+ </listitem>
+ <listitem>
+ <para>Ser paranoico en cuanto a seguridad, reduciendo
+ todo lo posible la posibilidad de que los sistemas
+ se vean comprometidos.</para>
+ </listitem>
+ <listitem>
+ <para>Ahorrar todo el espacio e inodos que sea
+ posible.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Como ya se ha dicho, este dise&ntilde;o se basa en
+ gran medida en el disponer de una &uacute;nica plantilla
+ en modo de s&oacute;lo lectura (a la que llamaremos
+ <application>nullfs</application>) montada en cada jaula
+ y un dispositivo en modo lectura-escritura por cada jaula. El
+ dispositivo puede ser otro disco f&iacute;sico adicional, una
+ partici&oacute;n o un dispositivo &man.md.4; basado en un
+ vnode. En este ejemplo utilizaremos montajes
+ <application>nullfs</application> en modo
+ lectura-escritura.</para>
+
+ <para>La estructura del sistema de ficheros se detalla en
+ la siguiente lista:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Cada jaula se montar&aacute; bajo <filename
+ role="directory">/home/j</filename>.</para>
+ </listitem>
+ <listitem>
+ <para><filename role="directory">/home/j/mroot</filename>
+ ser&aacute; la plantilla para cada jaula y la
+ partici&oacute;n de s&oacute;lo lectura para todas las
+ jaulas.</para>
+ </listitem>
+ <listitem>
+ <para>Se crear&aacute; un directorio vac&iacute;o para
+ cada jaula bajo el directorio <filename
+ role="directory">/home/j</filename>.</para>
+ </listitem>
+ <listitem>
+ <para>Cada jaula tendr&aacute; un directorio <filename
+ role="directory">/s</filename> que estar&aacute; enlazado
+ con la parte de lectura-escritura del sistema.</para>
+ </listitem>
+ <listitem>
+ <para>Cada jaula tendr&aacute; su propio sistema en modo
+ lectura-escritura basado en <filename
+ role="directory">/home/j/skel</filename>.</para>
+ </listitem>
+ <listitem>
+ <para>Cada parte de lectura-escritura correspondiente a cada
+ jaula se crear&aacute; en <filename
+ role="directory">/home/js</filename>.<para>
+ </listitem>
+ </itemizedlist>
+
+ <note>
+ <para>Se asume que las jaulas se instalar&aacute;n bajo
+ la partici&oacute;n <filename
+ role="directory">/home</filename>. Por supuesto esto no
+ es en absoluto obligatorio, pero hay que tener en cuenta que
+ debe hacerse el mismo cambio en cada uno de los ejemplos que
+ se muestran m&aacute;s adelante.</para>
+ </note>
+ <!-- Insert an image or drawing here to illustrate the example. -->
+ </sect3>
+
+ <sect3 id="jails-service-jails-template">
+ <title>Creaci&oacute;n de la plantilla</title>
+
+ <para>En esta secci&oacute;n se describen los pasos necesarios
+ para crear la plantilla maestra que conformar&aacute; la
+ parte de s&oacute;lo lectura que usar&aacute;n las jaulas.</para>
+
+ <para>Siempre es recomendable actualizar el sistema &os; a la
+ &uacute;ltima rama -RELEASE. Consulte el <ulink
+ url="&url.books.handbook;/makeworld.html">cap&iacute;tulo</ulink>
+ correspondiente de este libro si necesita m&aacute;s
+ informaci&oacute;n. En caso de que la actualizaci&oacute;n no
+ sea posible tendr&aacute; que usar <quote>buidworld</quote> para
+ poder seguir adelante. Tambi&eacute;n necesitar&aacute; el
+ paquete <filename role="package">sysutils/cpdup</filename>. Usaremos
+ &man.portsnap.8; para descargar la Colecci&oacute;n de Ports
+ de &os;. El cap&iacute;tulo sobre <ulink
+ url="&url.books.handbook;/portsnap.html">Portsnap</ulink>
+ es siempre una lectura muy recomendable para quienes no tengan
+ experiencia con su funcionamiento.</para>
+
+ <procedure>
+ <step>
+ <para>Lo primero que haremos ser&aacute; crear una estructura
+ de directorios para el sistema de ficheros de s&oacute;lo
+ lectura que contendr&aacute; los binarios de nuestras jaulas,
+ luego iremos al directorio que contiene el &aacute;rbol de
+ c&oacute;digo de &os; e instalaremos el sistema de ficheros
+ de s&oacute;lo lectura en la plantilla de las jaulas:</para>
+
+ <screen>&prompt.root; <userinput>mkdir /home/j /home/j/mroot</userinput>
+&prompt.root; <userinput>cd /usr/src</userinput>
+&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot</userinput></screen>
+ </step>
+ <step>
+ <para>Una vez hecho esto, prepararemos la Colecci&oacute;n
+ de Ports de &os; para nuestras jaulas as&iacute; como un
+ &aacute;rbol de c&oacute;digo &os;, necesario para usar
+ <application>mergemaster</application>:</para>
+
+ <screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
+&prompt.root; <userinput>mkdir usr/ports</userinput>
+&prompt.root; <userinput>portsnap -p /home/j/mroot/usr/ports fetch extract</userinput>
+&prompt.root; <userinput>cpdup /usr/src /home/j/mroot/usr/src</userinput></screen>
+ </step>
+ <step>
+ <para>Crear la estructura de directorios necesaria para la
+ parte de lectura-escritura del sistema:</para>
+
+ <screen>&prompt.root; <userinput>mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles</userinput>
+&prompt.root; <userinput>mv etc /home/j/skel</userinput>
+&prompt.root; <userinput>mv usr/local /home/j/skel/usr-local</userinput>
+&prompt.root; <userinput>mv tmp /home/j/skel</userinput>
+&prompt.root; <userinput>mv var /home/j/skel</userinput>
+&prompt.root; <userinput>mv root /home/j/skel</userinput></screen>
+ </step>
+ <step>
+ <para>Usamos <application>mergemaster</application> para
+ instalar los ficheros de configuraci&oacute;n que
+ falten. Despu&eacute;s nos libramos de los directorios
+ adicionales que haya creado
+ <application>mergemaster</application>:</para>
+
+ <screen>&prompt.root; <userinput>mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i</userinput>
+&prompt.root; <userinput>cd /home/j/skel</userinput>
+&prompt.root; <userinput>rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev</userinput></screen>
+ </step>
+ <step>
+ <para>Ahora enlazamos simb&oacute;licamente el sistema
+ de ficheros de lectura-escritura con el sistema de
+ ficheros de s&oacute;lo lectura. Por favor,
+ aseg&uacute;rese de que los enlaces simb&oacute;licos
+ se crean en las ubicaciones correctas: <filename
+ role="directory">s/</filename>. Si se usan directorios
+ reales o directorios err&oacute;neos la instalaci&oacute;n
+ no funcionar&aacute;.</para>
+
+ <screen>&prompt.root; <userinput>cd /home/j/mroot</userinput>
+&prompt.root; <userinput>mkdir s</userinput>
+&prompt.root; <userinput>ln -s s/etc etc</userinput>
+&prompt.root; <userinput>ln -s s/home home</userinput>
+&prompt.root; <userinput>ln -s s/root root</userinput>
+&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
+&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
+&prompt.root; <userinput>ln -s ../../s/distfiles usr/ports/distfiles</userinput>
+&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
+&prompt.root; <userinput>ln -s s/var var</userinput></screen>
+ </step>
+ <step>
+ <para>Como &uacute;ltimo paso, cree un
+ <filename>/home/j/skel/etc/make.conf</filename>
+ gen&eacute;rico con el siguiente contenido:</para>
+
+ <programlisting>WRKDIRPREFIX?= /s/portbuild</programlisting>
+
+
+ <para>El tener <literal>WRKDIRPREFIX</literal> configurado
+ de este modo har&aacute; posible compilar ports de &os;
+ dentro de cada jaula. Recuerde que el el directorio
+ de los ports es de s&oacute;lo lectura. La ruta
+ personalizada por <literal>WRKDIRPREFIX</literal>
+ permite ejecutar compilaciones en la parte de
+ s&oacute;lo lectura de cada jaula.</para>
+ </step>
+ </procedure>
+ </sect3>
+
+ <sect3 id="jails-service-jails-creating">
+ <title>Creaci&oacute;n de las jaulas</title>
+
+ <para>Ya tenemos una plantilla de jaulas de &os; completa,
+ as&iacute; que podemos configurar nuestras jaulas en
+ <filename>/etc/rc.conf</filename>. En este ejemplo crearemos
+ 3 jaulas: <quote>NS</quote>,
+ <quote>MAIL</quote> y <quote>WWW</quote>.<para>
+
+ <procedure>
+ <step>
+ <para>Introduzca las siguientes lineas en el fichero
+ <filename>/etc/fstab</filename>; con esto cada jaula
+ tendr&aacute; acceso a la plantilla de s&oacute;lo lectura
+ y al espacio de lectura-escritura:</para>
+
+ <programlisting>/home/j/mroot /home/j/ns nullfs ro 0 0
+/home/j/mroot /home/j/mail nullfs ro 0 0
+/home/j/mroot /home/j/www nullfs ro 0 0
+/home/js/ns /home/j/ns/s nullfs rw 0 0
+/home/js/mail /home/j/mail/s nullfs rw 0 0
+/home/js/www /home/j/www/s nullfs rw 0 0</programlisting>
+
+ <note>
+ <para>Las particiones que tienen un 0 en la columna
+ <quote>pass</quote> no ser&aacute;n revisadas por
+ &man.fsck.8; durante el arranque y las que tienen
+ un 0 en la columna <quote>dump</quote> no ser&aacute;n
+ copiadas por &man.dump.8;. No nos interesa que
+ <application>fsck</application> compruebe la
+ integridad de montajes <application>nullfs</application>
+ ni que <application>dump</application> haga copias de
+ seguridad de montajes nullfs de s&oacute;lo lectura de las
+ jaulas. Por esta raz&oacute;n el ejemplo de
+ <filename>fstab</filename> tiene en las dos &uacute;ltimas
+ columnas <quote>0&nbsp;0</quote>.</para>
+ </note>
+ </step>
+ <step>
+ <para>Configure las jaulas en
+ <filename>/etc/rc.conf</filename>:</para>
+
+ <programlisting>jail_enable="YES"
+jail_set_hostname_allow="NO"
+jail_list="ns mail www"
+jail_ns_hostname="ns.ejemplo.org"
+jail_ns_ip="192.168.3.17"
+jail_ns_rootdir="/usr/home/j/ns"
+jail_ns_devfs_enable="YES"
+jail_mail_hostname="mail.ejemplo.org"
+jail_mail_ip="192.168.3.18"
+jail_mail_rootdir="/usr/home/j/mail"
+jail_mail_devfs_enable="YES"
+jail_www_hostname="www.ejemplo.org"
+jail_www_ip="62.123.43.14"
+jail_www_rootdir="/usr/home/j/www"
+jail_www_devfs_enable="YES"</programlisting>
+
+ <warning>
+ <para>:&nbsp;La raz&oacute;n por la que
+ <varname>jail_<replaceable>nombre</replaceable>_rootdir</varname>
+ contiene <filename
+ role="directory">/usr/home</filename> y no
+ <filename role="directory">/home</filename> es que la ruta
+ f&iacute;sica del directorio<filename
+ role="directory">/home</filename> en una instalaci&oacute;n
+ de &os; por omisi&oacute;n es <filename
+ role="directory">/usr/home</filename>. La variable
+ <varname>jail_<replaceable>nombre</replaceable>_rootdir</varname>
+ <emphasis>no</emphasis> debe apuntar a una ruta que
+ contenga un enlace simb&oacute;lico porque ser&iacute;a
+ imposible arrancar las jaulas. Utilice
+ la herramienta &man.realpath.1; para asegurarse del valor
+ exacto que debe asignar a la variable. Por favor, consulte
+ el aviso de seguridad &os;-SA-07:01.jail para m&aacute;s
+ informaci&oacute;n.</para>
+ </warning>
+ </step>
+ <step>
+ <para>Creamos los puntos de montaje de sistemas de ficheros
+ de s&oacute;lo lectura correspondientes a cada jaula:</para>
+
+ <screen>&prompt.root; <userinput>mkdir /home/j/ns /home/j/mail /home/j/www</userinput></screen>
+ </step>
+ <step>
+ <para>Instalamos la plantilla de lectura-escritura dentro
+ de cada jaula. Observe que utilizamos <filename
+ role="package">sysutils/cpdup</filename> para asegurarnos
+ de que se hace una copia exacta de cada directorio:</para>
+ <!-- keramida: Why is cpdup required here? Doesn't cpio(1)
+ already include adequate functionality for performing this
+ job *and* have the advantage of being part of the base
+ system of FreeBSD? -->
+
+ <screen>&prompt.root; <userinput>mkdir /home/js</userinput>
+&prompt.root; <userinput>cpdup /home/j/skel /home/js/ns</userinput>
+&prompt.root; <userinput>cpdup /home/j/skel /home/js/mail</userinput>
+&prompt.root; <userinput>cpdup /home/j/skel /home/js/www</userinput></screen>
+ </step>
+ <step>
+ <para>Llegados a este punto las jaulas est&aacute;n
+ configuradas y listas para arrancar. Monte los sistemas
+ de ficheros de cada jaula y luego arr&aacute;nquelas
+ con el script <filename>/etc/rc.d/jail</filename>:</para>
+
+ <screen>&prompt.root; <userinput>mount -a</userinput>
+&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
+ </step>
+ </procedure>
+
+ <para>Las jaulas deber&iacute;an haber arrancado. Aseg&uacute;rese
+ de ello con &man.jls.8;. La salida que ver&aacute; debe parecerse
+ a esta:</para>
+
+ <screen>&prompt.root; <userinput>jls</userinput>
+ JID IP Address Hostname Path
+ 3 192.168.3.17 ns.ejemplo.org /home/j/ns
+ 2 192.168.3.18 mail.ejemplo.org /home/j/mail
+ 1 62.123.43.14 www.ejemplo.org /home/j/www</screen>
+
+ <para>En este punto deber&iacute;a ser posible entrar a
+ cada una de las jaulas, a&ntilde;adir nuevos usuarios o
+ configurar d&aelig;mons. La columna <literal>JID</literal>
+ indica el n&uacute;mero de identificaci&oacute;n de cada
+ jaula que est&eacute; funcionando en el sistema. Con el
+ siguiente comando puede ejecutar tareas administrativas
+ en la jaula cuyo <literal>JID</literal> sea 3:</para>
+
+ <screen>&prompt.root; <userinput>jexec 3 tcsh</userinput></screen>
+ </sect3>
+
+ <sect3 id="jails-service-jails-upgrading">
+ <title>Actualizaci&oacute;n</title>
+
+ <para>Llegar&aacute; el momento en el que sea necesario
+ actualizar el sistema, bien por seguridad o porque sea
+ &uacute;til para las jaulas disponer de alguna nueva
+ caracter&iacute;stica del sistema. El dise&ntilde;o de
+ esta configuraci&oacute;n facilita una forma f&aacute;cil
+ de actualizar sus jaulas. Adem&aacute;s, minimiza la
+ p&eacute;rdida de servicio, puesto que las jaulas deben
+ apagarse s&oacute;lamente al final de todo el proceso. Se
+ ofrece tambi&eacute;n la posibilidad de volver a la versi&oacute;n
+ anterior en caso de que algo salga mal.</para>
+
+ <procedure>
+ <step>
+ <para>El primer paso es actualizar el servidor que aloja
+ las jaulas de la forma habitual. Despu&eacute;s creamos
+ una plantilla de s&oacute;lo lectura temporal en <filename
+ role="directory">/home/j/mroot2</filename>.</para>
+
+ <screen>&prompt.root; <userinput>mkdir /home/j/mroot2</userinput>
+&prompt.root; <userinput>cd /usr/src</userinput>
+&prompt.root; <userinput>make installworld DESTDIR=/home/j/mroot2</userinput>
+&prompt.root; <userinput>cd /home/j/mroot2</userinput>
+&prompt.root; <userinput>cpdup /usr/src usr/src</userinput>
+&prompt.root; <userinput>mkdir s</userinput></screen>
+
+ <para>La ejecuci&oacute;n de <maketarget>installworld</maketarget>
+ crea unos cuantos directorios innecesarios que debemos
+ borrar:</para>
+
+ <screen>&prompt.root; <userinput>chflags -R 0 var</userinput>
+&prompt.root; <userinput>rm -R etc var root usr/local tmp</userinput></screen>
+ </step>
+ <step>
+ <para>Creamos de nuevo los enlaces simb&oacute;licos de
+ lectura-escritura del sistema de ficheros principal:</para>
+
+ <screen>&prompt.root; <userinput>ln -s s/etc etc</userinput>
+&prompt.root; <userinput>ln -s s/root root</userinput>
+&prompt.root; <userinput>ln -s s/home home</userinput>
+&prompt.root; <userinput>ln -s ../s/usr-local usr/local</userinput>
+&prompt.root; <userinput>ln -s ../s/usr-X11R6 usr/X11R6</userinput>
+&prompt.root; <userinput>ln -s s/tmp tmp</userinput>
+&prompt.root; <userinput>ln -s s/var var</userinput></screen>
+ </step>
+ <step>
+ <para>Ha llegado el momento de parar las jaulas:</para>
+
+ <screen>&prompt.root; <userinput>/etc/rc.d/jail stop</userinput></screen>
+ </step>
+ <step>
+ <para>Desmontamos los sistemas de ficheros originales:</para>
+ <!-- keramida: Shouldn't we suggest a short script-based
+ loop here, instead of tediously copying the same commands
+ multiple times? -->
+
+ <screen>&prompt.root; <userinput>umount /home/j/ns/s</userinput>
+&prompt.root; <userinput>umount /home/j/ns</userinput>
+&prompt.root; <userinput>umount /home/j/mail/s</userinput>
+&prompt.root; <userinput>umount /home/j/mail</userinput>
+&prompt.root; <userinput>umount /home/j/www/s</userinput>
+&prompt.root; <userinput>umount /home/j/www</userinput></screen>
+
+ <note>
+ <para>Los sistemas de ficheros de lectura-escritura
+ cuelgan del sistema de s&oacute;lo lectura <filename
+ role="directory">/s</filename> y por tanto deben
+ desmontarse antes.</para>
+ </note>
+ </step>
+ <step>
+ <para>Movemos el sistema de ficheros de s&oacute;lo lectura
+ viejo y lo reemplazamos por el nuevo. Nos servir&aacute;
+ de copia de seguridad y como archivo en caso de que haya
+ problemas. Para darle un nombre usamos la fecha en la que
+ se creado una nueva copia del sistema de ficheros de
+ s&oacute;lo lectura. Movemos tambi&eacute;n la
+ Colecci&oacute;n de Ports de &os; al sistema de ficheros
+ nuevo para ahorrar un poco m&aacute;s de espacio e
+ inodos:</para>
+
+ <screen>&prompt.root; <userinput>cd /home/j</userinput>
+&prompt.root; <userinput>mv mroot mroot.20060601</userinput>
+&prompt.root; <userinput>mv mroot2 mroot</userinput>
+&prompt.root; <userinput>mv mroot.20060601/usr/ports mroot/usr</userinput></screen>
+ </step>
+ <step>
+ <para>Una vez llegados a este punto la nueva plantilla de
+ s&oacute;lo lectura est&aacute; lista, de manera que lo
+ &uacute;nico que nos queda por hacer es montar los sistemas
+ de ficheros y arrancar las jaulas:</para>
+
+ <screen>&prompt.root; <userinput>mount -a</userinput>
+&prompt.root; <userinput>/etc/rc.d/jail start</userinput></screen>
+ </step>
+ </procedure>
+
+ <para>Compruebe con &man.jls.8; si las jaulas han arrancado
+ sin contratiempos. No olvide ejecutar mergemaster en cada
+ jaula. Tendr&aacute; que actualizar tanto
+ los ficheros de configuraci&oacute;n como los scripts
+ rc.d.</para>
+ </sect3>
+ </sect2>
+ </sect1>
</chapter>