diff --git a/es_ES.ISO8859-1/articles/Makefile b/es_ES.ISO8859-1/articles/Makefile
index 1331b87171..4a5343f24a 100644
--- a/es_ES.ISO8859-1/articles/Makefile
+++ b/es_ES.ISO8859-1/articles/Makefile
@@ -13,6 +13,7 @@ SUBDIR+= fdp-es
 SUBDIR+= laptop
 SUBDIR+= linux-comparison
 SUBDIR+= mailing-list-faq
+SUBDIR+= nanobsd
 SUBDIR+= p4-primer
 SUBDIR+= problem-reports
 SUBDIR+= releng
diff --git a/es_ES.ISO8859-1/articles/nanobsd/Makefile b/es_ES.ISO8859-1/articles/nanobsd/Makefile
new file mode 100644
index 0000000000..4b9cf79584
--- /dev/null
+++ b/es_ES.ISO8859-1/articles/nanobsd/Makefile
@@ -0,0 +1,25 @@
+# 
+# $FreeBSD$
+#
+# Article: Introduction to NanoBSD
+
+DOC?= article
+
+FORMATS?= html
+WITH_ARTICLE_TOC?= YES
+
+INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+# Images from the cross-document image library
+IMAGES_LIB=  callouts/1.png
+IMAGES_LIB+= callouts/2.png
+IMAGES_LIB+= callouts/3.png
+IMAGES_LIB+= callouts/4.png
+
+SRCS=	article.sgml
+
+URL_RELPREFIX?=	../../../..
+DOC_PREFIX?=	${.CURDIR}/../../..
+
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"
diff --git a/es_ES.ISO8859-1/articles/nanobsd/article.sgml b/es_ES.ISO8859-1/articles/nanobsd/article.sgml
new file mode 100644
index 0000000000..3fc6bcd2bb
--- /dev/null
+++ b/es_ES.ISO8859-1/articles/nanobsd/article.sgml
@@ -0,0 +1,566 @@
+<!--
+     The FreeBSD Documentation Project
+-->
+
+
+<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook V4.1-Based
+Extension//EN" [ <!ENTITY % articles.ent PUBLIC "-//FreeBSD//ENTITIES
+DocBook FreeBSD Articles Entity Set//ES"> %articles.ent; ]>
+
+<!-- The FreeBSD Spanish Documentation Project
+     Original Revision: r1.3                   -->
+
+
+<article lang=es>
+
+  <articleinfo>
+    <title>Introducci&oacute;n a NanoBSD</title>
+
+    <authorgroup>
+      <author>
+	    <firstname>Daniel</firstname>
+	    <surname>Gerzo</surname>
+      </author>
+    </authorgroup>
+
+    <pubdate>$FreeBSD$</pubdate>
+
+    <copyright>
+      <year>2006</year>
+      <holder>The FreeBSD Documentation Project</holder>
+    </copyright>
+
+    <legalnotice id="trademarks" role="trademarks">
+      &tm-attrib.freebsd; &tm-attrib.general;
+    </legalnotice>
+
+    <abstract>
+      <para>Este documento trata sobre <application>NanoBSD</application>.  
+	<application>NanoBSD</application> es una herramienta que permite
+        crear im&aacute;genes del sistema &os; para su uso en
+        aplicaciones empotradas y listas para cargarse en una
+        tarjeta Compact Flash (u otro medio de almacenamiento
+        masivo).</para>
+	&trans.es.german;
+    </abstract>
+  </articleinfo>
+
+  <sect1 id="intro">
+    <title>Introducci&oacute;n a NanoBSD</title>
+
+    <indexterm><primary>NanoBSD</primary></indexterm>
+
+    <para><application>NanoBSD</application> es una herramienta
+      actualmente desarrollada por &a.phk;.  Crea una imagen del
+      sistema &os; para aplicaciones empotradas lista para su uso en
+      una tarjeta Compact Flash (u otro medio de almacenamiento
+      masivo).</para>
+
+    <para>Puede utilizarse para generar im&aacute;genes
+      instalables especiales; est&aacute; dise&ntilde;ado pensando en una
+      instalaci&oacute;n y mantenimiento f&aacute;ciles en sistemas
+      conocidos como <quote>sistemas empotrados</quote>.  Los
+      sistemas empotrados tienen hardware y software
+      integrado en el producto, lo que significa que todas las
+      aplicaciones est&aacute;n preinstaladas.  Estos dispositivos
+      pueden conectarse a una red dada y comenzar a trabajar
+      (casi) inmediatamente.</para>
+
+    <para>Las caracter&iacute;sticas
+      de <application>NanoBSD</application> incluyen:</para>
+
+    <itemizedlist>
+      <listitem>
+	    <para>Los ports y paquetes funcionan como en &os;:
+	      Cualquier aplicaci&oacute;n puede instalarse y usarse en
+	      una imagen de <application>NanoBSD</application> de la
+	      misma forma que en &os;.</para>
+      </listitem>
+
+      <listitem>
+	    <para>No se pierde funcionalidad: Si es posible hacer
+          algo en &os; es posible hacer lo mismo
+          en <application>NanoBSD</application>, a menos que se haya
+          eliminado expl&iacute;citamente esa caracter&iacute;stica o
+          caracter&iacute;sticas especiales al crear la imagen
+          de <application>NanoBSD</application>.</para>
+      </listitem>
+
+      <listitem>
+	    <para>Todo est&aacute; en modo de s&oacute;lo lectura
+	      durante el funcionamiento del sistema: Un apagado
+	      brusco es totalmente seguro.  No es necesario ejecutar
+	      &man.fsck.8; despu&eacute;s de que el sistema sufra
+	      un apag&oacute;n.</para>
+      </listitem>
+
+      <listitem>
+	    <para>F&aacute;cil de generar y personalizar: Usando
+	      un solo script de shell y un fichero de configuraci&oacute;n
+	      pueden generarse im&aacute;genes reducidas y personalizadas
+	      que satisfagan cualquier necesidad.</para>
+      </listitem>
+    </itemizedlist>
+  </sect1>
+
+  <sect1 id="howto">
+    <title>NanoBSD <quote>Howto</quote></title>
+
+    <sect2 id="design">
+      <title>El dise&ntilde;o de NanoBSD</title>
+
+      <para>Una vez que la imagen est&aacute; en el medio puede
+	    arrancar <application>NanoBSD</application>.  El medio
+	    de almacenamiento se divide por omisi&oacute;n en tres
+	    partes:</para>
+
+      <itemizedlist>
+	    <listitem>
+	      <para>Dos particiones de la imagen: <literal>code#1</literal>
+	        y <literal>code#2</literal>.</para>
+	    </listitem>
+        
+	    <listitem>
+	      <para>La partici&oacute;n que contiene los ficheros de
+	        configuraci&oacute;n, que puede montarse bajo
+	        <filename role="directory">/cfg</filename> durante el
+	        funcionamiento del sistema.</para>
+	    </listitem>
+      </itemizedlist>
+      
+      <para>Estas particiones se montan normalmente en modo de
+        s&oacute;lo lectura.</para>
+
+      <para>Los directorios <filename role="directory">/etc</filename>
+        y <filename role="directory">/var</filename> son discos
+        &man.md.4; (malloc).</para>
+
+      <para>La partici&oacute;n de los ficheros de configuraci&oacute;n
+        permanece bajo el
+        directorio <filename role="directory">/cfg</filename>.  Este
+        directorio contiene ficheros que usa el
+        directorio <filename role="directory">/etc</filename> y se
+        monta en modo de s&oacute;lo lectura inmediatamente
+        despu&eacute;s del arranque; por lo tanto, es necesario que
+        los ficheros que se modifiquen
+        en <filename role="directory">/etc</filename> se copien
+        en <filename role="directory">/cfg</filename> si se desea que
+        los cambios perduren despu&eacute;s del reinicio del
+        sistema.</para>
+
+      <example>
+	    <title>C&oacute;mo hacer cambios persistentes
+	      en <filename>/etc/resolv.conf</filename></title>
+        
+	    <screen>&prompt.root; <userinput>vi /etc/resolv.conf</userinput>
+[...]
+&prompt.root; <userinput>mount /cfg</userinput>
+&prompt.root; <userinput>cp /etc/resolv.conf /cfg</userinput>
+&prompt.root; <userinput>umount /cfg</userinput></screen>
+      </example>
+
+      <note>
+	    <para>La partici&oacute;n que contiene el
+	      directorio <filename role="directory">/cfg</filename>
+	      deber&iacute;a montarse &uacute;nicamente en el arranque y
+	      mientras se sobreescriben los ficheros de
+	      configuraci&oacute;n.</para>
+
+	    <para>No es buena idea montar siempre el
+          directorio <filename role="directory">/cfg</filename>,
+          especialmente si el
+          sistema <application>NanoBSD</application> se ejecuta en un
+          dispositivo de almacenamiento masivo que pueda verse
+          afectado negativamente por un n&uacute;mero elevado de
+          escrituras en la partici&oacute;n (i.e. cuando el sistema de
+          ficheros sincroniza los datos con el sistema de
+          discos).</para>
+      </note>
+    </sect2>
+
+    <sect2>
+      <title>C&oacute;mo generar una imagen de NanoBSD</title>
+
+      <para>Una imagen de <application>NanoBSD</application> se genera
+	    usando el sencillo script de
+	    shell <filename>nanobsd.sh</filename>, ubicado en el
+	    directorio <filename role="directory"><replaceable>/usr</replaceable>/src/tools/tools/nanobsd</filename>.  
+	    El script crea una imagen que se deber&aacute; copiar al medio
+	    de almacenamiento mediante la utilidad &man.dd.1;.</para>
+
+      <para>Los comandos necesarios para generar una imagen
+      de <application>NanoBSD</application> son:</para>
+
+      <screen>&prompt.root; <userinput>cd /usr/src/tools/tools/nanobsd</userinput> <co id="nbsd-cd">
+&prompt.root; <userinput>sh nanobsd.sh</userinput> <co id="nbsd-sh">
+&prompt.root; <userinput>cd /usr/obj/nanobsd.full</userinput> <co id="nbsd-cd2">
+&prompt.root; <userinput>dd if=_.disk.full of=/dev/da0 bs=64k</userinput> <co id="nbsd-dd"></screen>
+
+      <calloutlist>
+	<callout arearefs="nbsd-cd">
+	  <para>Cambia el directorio actual por el directorio base del
+	  script de generaci&oacute;n
+	  de <application>NanoBSD</application>.</para>
+	</callout>
+
+	<callout arearefs="nbsd-sh">
+	  <para>Comienza el proceso de generaci&oacute;n.</para>
+	</callout>
+
+	<callout arearefs="nbsd-cd2">
+	  <para>Cambia el directorio actual por el directorio donde se
+        encuentra la imagen generada.</para>
+	</callout>
+
+	<callout arearefs="nbsd-dd">
+	  <para>Instala <application>NanoBSD</application> dentro del
+	    medio de almacenamiento.</para>
+	</callout>
+      </calloutlist>
+    </sect2>
+
+    <sect2>
+      <title>Personalizaci&oacute;n de una imagen de NanoBSD</title>
+
+      <para>Esta es probablemente la caracter&iacute;stica m&aacute;s
+        importante y m&aacute;s interesante
+        de <application>NanoBSD</application>. Tambi&eacute; es donde
+        usted pasar&aacute; la mayor parte del tiempo cuando est&eacute;
+        desarrollando con <application>NanoBSD</application>.</para>
+
+      <para>La invocaci&oacute;n del siguiente comando forzar&aacute;
+        al script <filename>nanobsd.sh</filename> a leer su
+        configuraci&oacute;n desde el
+        fichero <filename>mi-configuracion.nano</filename> ubicado en el
+        directorio actual:</para>
+
+      <screen>&prompt.root; <userinput>sh nanobsd.sh -c mi-configuracion.nano</userinput></screen>
+
+      <para>La personalizaci&oacute;n se hace de dos maneras:</para>
+
+      <itemizedlist>
+	<listitem>
+	  <para>Opciones de configuraci&oacute;n</para>
+	</listitem>
+
+	<listitem>
+	  <para>Funciones personalizadas</para>
+	</listitem>
+      </itemizedlist>
+
+      <sect3>
+	<title>Opciones de configuraci&oacute;n</title>
+
+    <para>Por medio de ajustes de configuraci&oacute;n es posible
+      configurar las opciones que se pasan a las
+      fases <literal>buildworld</literal>
+      e <literal>installworld</literal> del proceso de
+      generaci&oacute;n de <application>NanoBSD</application>.  
+      Mediante estas opciones puede reducirse el tama&ntilde;o del
+      sistema de manera que pueda incluso encajar en algo tan
+      peque&ntilde;o como un dispositivo de 64MB.  Es posible recortar &os;
+      incluso m&aacute;s, hasta que consista &uacute;nicamente
+      en el kernel y dos o tres ficheros de
+      <quote>userland</quote>.</para>
+    
+	<para>El fichero de configuraci&oacute;n est&aacute; compuesto por
+	  opciones de configuraci&oacute;n que sobreescriben los valores
+	  por omisi&oacute;n.  Las directivas m&aacute;s importantes
+	  son:</para> 
+    
+	<itemizedlist>
+	  <listitem>
+	    <para><literal>NANO_NAME</literal> : Nombre de la
+          generaci&oacute;n que estamos ejecutando (se usa
+	      para dar nombres a los directorios donde encontraremos el
+          resultado del proceso).</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>NANO_SRC</literal> : Ruta al c&oacute;digo
+	      fuente que se usar&aacute; para generar la imagen.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>NANO_KERNEL</literal> : Nombre del fichero de
+	      configuraci&oacute;n del kernel que se usar&aacute; para
+	      generar el kernel.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>CONF_BUILD</literal> : Opciones que se pasan a
+	      la fase <literal>buildworld</literal>.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>CONF_INSTALL</literal> : Opciones que se pasan a
+	      la fase <literal>installworld</literal>.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>CONF_WORLD</literal> : Opciones que se pasan
+	      tanto a <literal>buildworld</literal> como a
+	      <literal>installworld</literal>.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>FlashDevice</literal> : Define el tipo de medio
+	      de almacenamiento que se usar&aacute;.  Para m&aacute;s
+	      informaci&oacute;n consulte el
+	      fichero <filename>FlashDevice.sub</filename>.</para>
+	  </listitem>
+	</itemizedlist>
+      </sect3>
+      
+      <sect3>
+	<title>Funciones personalizadas</title>
+
+	<para>Puede ajustar <application>NanoBSD</application>
+	  de forma muy precisa mediante el uso de funciones de
+	  shell en el fichero de configuraci&oacute;n.  En el siguiente
+	  ejemplo vemos un modelo b&aacute;sico de funci&oacute;n
+	  personalizada.</para>
+
+	<programlisting>cust_foo () (
+	echo "bar=topless" &gt; \
+	  &dollar;{NANO_WORLDDIR}/etc/foo
+)
+customize_cmd cust_foo</programlisting>
+
+    <para>A continuaci&oacute;n vemos un ejemplo m&aacute;s &uacute;til
+      de funci&oacute;n personalizada, que cambia el tama&ntilde;o por
+      omisi&oacute;n del directorio
+      <filename role="directory">/etc</filename> de 5MB a 30MB:</para>
+
+	<programlisting>cust_etc_size () (
+	cd &dollar;{NANO_WORLDDIR}/conf
+	echo 30000 &gt; default/etc/md_size
+)
+customize_cmd cust_etc_size</programlisting>
+
+	<para>Hay unas pocas funciones de personalizaci&oacute;n
+      predefinidas listas para su uso:</para>
+
+	<itemizedlist>
+	  <listitem>
+	    <para><literal>cust_comconsole</literal> : Deshabilita
+	      &man.getty.8; en los dispositivos VGA (los nodos de
+	      dispositivo <filename>/dev/tty*</filename>) y habilita el
+	      uso del puerto serie COM1 para que sea la consola del
+	      sistema.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>cust_allow_ssh_root</literal> : Permite a
+	      <username>root</username> acceder a trav&eacute;s de
+	      &man.sshd.8;.</para>
+
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>cust_install_files</literal> : Instala ficheros
+	      de configuraci&oacute;n desde el
+	      directorio <filename role="directory">nanobsd/files</filename>,
+          que contiene scripts &uacute;tiles para la
+	      administraci&oacute;n del sistema.</para>
+	  </listitem>
+	</itemizedlist>
+      </sect3>
+
+      <sect3>
+	<title>C&oacute;mo a&ntilde;adir paquetes</title>
+
+	<para>Se pueden a&ntilde;adir paquetes a la imagen de
+          <application>NanoBSD</application> usando una funci&oacute;n
+          personalizada.  La siguiente funci&oacute;n instalar&aacute;
+	  todos los paquetes que se encuentren en
+          <filename>/usr/src/tools/tools/nanobsd/packages</filename>:
+        </para>
+
+	<programlisting>install_packages () (
+    mkdir -p ${NANO_WORLDDIR}/packages
+    cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
+    chroot ${NANO_WORLDDIR} sh -c 'cd packages; pkg_add -v *;cd ..;'
+    rm -rf ${NANO_WORLDDIR}/packages
+)
+customize_cmd install_packages</programlisting>
+      </sect3>
+
+      <sect3>
+	<title>Ejemplo de fichero de configuraci&oacute;n</title>
+
+	<para>El siguiente es un ejemplo completo de fichero de
+	  configuraci&oacute;n para generar una imagen personalizada
+	  de <application>NanoBSD</application>:</para>
+
+	<programlisting>NANO_NAME=custom
+NANO_SRC=/usr/src
+NANO_KERNEL=MYKERNEL
+NANO_IMAGES=2
+
+CONF_BUILD='
+NO_KLDLOAD=YES
+NO_NETGRAPH=YES
+NO_PAM=YES
+'
+
+CONF_INSTALL='
+NO_ACPI=YES
+NO_BLUETOOTH=YES
+NO_CVS=YES
+NO_FORTRAN=YES
+NO_HTML=YES
+NO_LPR=YES
+NO_MAN=YES
+NO_SENDMAIL=YES
+NO_SHAREDOCS=YES
+NO_EXAMPLES=YES
+NO_INSTALLLIB=YES
+NO_CALENDAR=YES
+NO_MISC=YES
+NO_SHARE=YES
+'
+
+CONF_WORLD='
+NO_BIND=YES
+NO_MODULES=YES
+NO_KERBEROS=YES
+NO_GAMES=YES
+NO_RESCUE=YES
+NO_LOCALES=YES
+NO_SYSCONS=YES
+NO_INFO=YES
+'
+
+FlashDevice SanDisk 1G
+
+cust_nobeastie() (
+	touch &dollar;{NANO_WORLDDIR}/boot/loader.conf
+	echo "beastie_disable=\"YES\"" &gt;&gt; &dollar;{NANO_WORLDDIR}/boot/loader.conf
+)
+
+customize_cmd cust_comconsole
+customize_cmd cust_install_files
+customize_cmd cust_allow_ssh_root
+customize_cmd cust_nobeastie</programlisting>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>C&oacute;mo actualizar NanoBSD</title>
+      
+      <para>El proceso de actualizaci&oacute;n
+        de <application>NanoBSD</application> es relativamente
+        simple:</para>
+
+      <procedure>
+	    <step>
+	      <para>Generar una nueva imagen
+	        de <application>NanoBSD</application> de la forma
+	        habitual.</para>
+	    </step>
+
+	    <step>
+	      <para>Copiar la nueva imagen sobre la partici&oacute;n no
+            	utilizada del sistema empotrado que est&aacute;
+            	usando <application>NanoBSD</application>.</para>
+
+	      <para>La diferencia m&aacute;s importante entre este paso y
+                la instalaci&oacute;n inicial
+            	de <application>NanoBSD</application> es que ahora en
+            	lugar de usar el fichero <filename>_.disk.full</filename>
+            	(que contiene una imagen de todo el disco) se instala
+            	la imagen <filename>_.disk.image</filename> (que contiene
+            	una imagen de una sola partici&oacute;n).</para>
+	    </step>
+
+	    <step>
+	      <para>Reiniciar y arrancar el sistema desde la
+            	partici&oacute;n que se acaba de instalar.</para>
+	    </step>
+
+	    <step>
+	      <para>Si todo va bien la actualizaci&oacute;n ha
+	        terminado.</para>
+	    </step>
+        
+	    <step>
+	      <para>Si algo va mal reinicie desde la partici&oacute;n
+            	anterior (que contiene la imagen vieja, pero que
+            	funciona) para recuperar el funcionamiento del
+            	sistema lo antes posible.  Arregle los problemas
+            	de la nueva generaci&oacute;n y repita el proceso.</para>
+	    </step>
+      </procedure>
+
+      <para>Para facilitar la instalaci&oacute;n de una imagen
+	nueva en su sistema <application>NanoBSD</application> en
+	funcionamiento dispone de los scripts <filename>updatep1</filename>
+        y <filename>updatep2</filename>, ubicados en el directorio
+        <filename role="directory">/root</filename>.  La
+        elecci&oacute;n de uno u otro script depende de qu&eacute;
+        partici&oacute;n est&eacute; ejecutando el sistema,
+        la primera o la segunda.</para>
+      
+      <para>Dependiendo de los servicios disponibles en
+        la m&aacute;quina que va a servir la nueva imagen
+        de <application>NanoBSD</application> y del tipo de
+        transferencia de datos que prefiera uno de estos tres
+        m&eacute;todos le resultar&aacute; m&aacute;s o menos
+	    interesante:</para>
+
+      <sect3>
+	    <title>Uso de &man.ftp.1;</title>
+
+	    <para>Si la prioridad es la velocidad de la transferencia
+              use usted este ejemplo:</para>
+
+	    <screen>&prompt.root; <userinput>ftp mi-maquina
+get _.disk.image "| sh updatep1"</userinput></screen>
+      </sect3>
+
+      <sect3>
+	<title>Uso de &man.ssh.1;</title>
+
+	<para>Si la prioridad es la seguridad de la transferencia
+          seguramente ejecutar&aacute; algo muy parecido a lo
+	  siguiente:</para>
+
+	<screen>&prompt.root; <userinput>ssh mi-maquina cat _.disk.image.gz | zcat | sh updatep1</userinput></screen>
+      </sect3>
+
+      <sect3>
+	<title>Uso de &man.nc.1;</title>
+
+	<para>Si la m&aacute;quina remota no dispone de servicios de
+	  &man.ftp.1; ni de &man.sshd.8; puede recurrir al siguiente
+	  ejemplo:</para>
+
+	<procedure>
+	  <step>
+	    <para>Primero abra un puerto TCP de escucha en la
+	      m&aacute;quina que sirve la imagen y env&iacute;ela
+	      al cliente:</para>
+
+	    <screen>mi-maquina&prompt.root; <userinput>nc -l <replaceable>2222</replaceable> &lt; _.disk.image</userinput></screen>
+
+	    <note>
+	      <para>Aseg&uacute;rese de que el puerto elegido no tenga
+                bloqueadas las conexiones entrantes desde la
+                m&aacute;quina <application>NanoBSD</application> por
+	        ning&uacute;n cortafuegos.</para>
+ 	    </note>
+	  </step>
+
+	  <step>
+	    <para>Con&eacute;ctese a la m&aacute;quina que va servir la
+	      nueva imagen y ejecute el script
+          <filename>updatep1</filename>:</para>
+
+	    <screen>&prompt.root; <userinput>nc mi-maquina <replaceable>2222</replaceable> | sh updatep1</userinput></screen>
+	  </step>
+	</procedure>
+      </sect3>
+    </sect2>
+  </sect1>
+</article>
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>Pendiente de traducci&oacute;n.</para>
+    <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>
+
+	<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>
diff --git a/es_ES.ISO8859-1/share/sgml/translators.ent b/es_ES.ISO8859-1/share/sgml/translators.ent
index f3b4e96961..a266d2ab01 100644
--- a/es_ES.ISO8859-1/share/sgml/translators.ent
+++ b/es_ES.ISO8859-1/share/sgml/translators.ent
@@ -15,6 +15,8 @@
   "Luis L&oacute;pez <email>cronopiolopez@terra.es</email>">
 <!ENTITY a.es.gabor
   "G&aacute;bor K&ouml;vesd&aacute;n <email>gabor@FreeBSD.org</email>">
+<!ENTITY a.es.german
+  "Germ&aacute;n Marcos <email>gri.msg@gmail.com</email>">
 <!ENTITY a.es.jcamou
   "Jesus R. Camou <email>jcamou@FreeBSD.org</email>">
 <!ENTITY a.es.jesusr
@@ -32,6 +34,8 @@
   "<para><emphasis>Traducci&oacute;n de &a.es.carvay;.</emphasis></para>">
 <!ENTITY trans.es.gabor
   "<para><emphasis>Traducci&oacute;n de &a.es.gabor;.</emphasis></para>">
+<!ENTITY trans.es.german
+  "<para><emphasis>Traducci&oacute;n de &a.es.german;.</emphasis></para>">
 <!ENTITY trans.es.jcamou
   "<para><emphasis>Traducci&oacute;n de &a.es.jcamou;.</emphasis></para>">
 <!ENTITY trans.es.jesusr