Veamos cómo ejecutar comandos en una jail haciendo referencia al nombre de la jail en lugar del número.
Supongamos que has configurado dos jails, llamadas «mail» y «www». La primera sirve para ejecutar tu servidor de correo, y la segunda para ejecutar tu servidor web en un entorno de jail seguro. Cada jail tiene sus propios parámetros, como el nombre, el nombre de host, la IP, el directorio raíz, etc.:
jailserver# grep jail /etc/rc.conf
jail_enable="YES"
jail_list="mail www"
jail_mail_name="mail"
jail_mail_hostname="mail.mydomain"
jail_mail_ip="192.168.0.11"
jail_mail_rootdir="/usr/jail/mail"
jail_mail_devfs_enable="YES"
jail_www_name="www"
jail_www_hostname="www.mydomain"
jail_www_ip="192.168.0.12"
jail_www_rootdir="/usr/jail/www"
jail_www_devfs_enable="YES"
jailserver#
Las jails se inician automáticamente al arrancar el sistema. Si acabas de configurarlas y quieres que se inicien de inmediato sin reiniciar:
jailserver# service jail start
Configuring jails:.
Starting jails: mail.mydomain www.mydomain.
jailserver# jls
JID IP Address Hostname Path
1 192.168.0.11 mail.mydomain /usr/jail/mail
2 192.168.0.12 www.mydomain /usr/jail/www
jailserver#
Ahora hay dos jails en ejecución, a las que se les han asignado los ID de jail 1 y 2. Esos números se asignan automáticamente. Para entrar en una jail, solo tienes que ejecutar un shell en ella:
jailserver# jexec 1 /bin/csh
mail# sysctl security.jail.jailed
security.jail.jailed: 1
mail# exit
jailserver#
¿Qué pasa si necesitas reiniciar las jails y quieres volver a entrar en una de ellas?
jailserver# service jail restart
Stopping jails: mail.mydomain www.mydomain.
Configuring jails:.
Starting jails: mail.mydomain www.mydomai■n.
jailserver# jls
JID IP Address Hostname Path
3 192.168.0.11 mail.mydomain /usr/jail/mail
4 192.168.0.12 www.mydomain /usr/jail/www
jailserver# jexec 1 /bin/csh
jexec: jail_attach(1): Invalid argument
jailserver#
Me encanta el historial del shell y lo uso bastante a menudo. Pero, ¡uy!, tras reiniciar las jails, los JID ya no son los mismos que antes. Probemos por el nombre.
jailserver# jexec mail /bin/csh
jexec: jail "mail" not found
jailserver#
¿Por qué no se encuentra la jail? jexec(8) indica:
La utilidad jexec ejecuta un comando dentro de la jail identificada por su JID o su nombre.
Y lo hemos configurado en rc.conf, pero sigue sin funcionar. La razón es que hemos configurado el nombre para los scripts de inicio. jexec no lo tiene en cuenta. En jail(8) hay una opción -n con la que puedes establecer el nombre de la jail. Eso es lo que busca jexec. Así que tenemos que configurar /etc/rc.conf así:
jailserver# grep jail /etc/rc.conf
jail_enable="YES"
jail_list="mail www"
jail_mail_name="mail"
jail_mail_flags="-n mail"
jail_mail_hostname="mail.mydomain"
jail_mail_ip="192.168.0.11"
jail_mail_rootdir="/usr/jail/mail"
jail_mail_devfs_enable="YES"
jail_www_name="www"
jail_www_flags="-n www"
jail_www_hostname="www.mydomain"
jail_www_ip="192.168.0.12"
jail_www_rootdir="/usr/jail/www"
jail_www_devfs_enable="YES"
jailserver#
Reiniciemos las jails otra vez y veamos si ahora funcionan correctamente como queremos:
jailserver# service jail restart
Stopping jails: mail.mydomain www.mydomain.
Configuring jails:.
Starting jails: mail.mydomain www.mydomain.
jailserver# jls
JID IP Address Hostname Path
5 192.168.0.11 mail.mydomain /usr/jail/mail
6 192.168.0.12 www.mydomain /usr/jail/www
jailserver# jexec mail /bin/csh
mail# exit
jailserver#
Vale, ahora podemos usar el nombre de la jail, que será constante sin necesidad de buscar primero el jid.
Nota final: Esto se ha probado con FreeBSD 8.2. jail(8) nos indica que la opción -n está obsoleta y que establecer el nombre mediante un parámetro debería ser equivalente. Así que supongo que la opción se eliminará en las próximas versiones principales y habrá que usar el parámetro de nombre. Por desgracia, no he conseguido configurar el parámetro de nombre, así que solo te muestro este método.



