Jails en freeBSD
Las "Jaulas" (jails) en FreeBSD, es una implementación de virtualización en el sistema operativo, que permite a los administradores particionar un sistema, en múltiples susbsistemas independientes llamados jaulas.Su utilidad es separar los servicios de un proveedor del de sus clientes, principalmente por razones de seguridad y facilidad de administración. Para esto se comparte el sistema, archivos y recursos, de manera tal que sólo pueda ser accedido por el subsitema correcto.
Esta solución provee:
Virtualización: Cada jaula es un entorno virtual corriendo en un sistema anfitrión, con sus propios archivos, procesos, cuentas de usuario... Desde el punto de vista de un proceso, el entorno virtual es casi indistinguible del sistema real.
Seguridad: Cada jaula está aislada del resto, dando esto un nivel adicional de seguridad.
Facilita la Delegación: Gracias al alcance limitado de la jaula, permite delegar la administración de tareas que requieren permisos de super usuario sin entregar el control total del sistema.
¿En que se diferencia esto con una jaula chroot? En que en las jaulas freeBSD cada proceso es atachado a una estructura específica en el kernel, que tiene el propósito de limitar la interacción de esos procesos con aquellos en ejecución en otra jaula, y restringiendo las cosas que puedan hacer (por ejemplo limitando el acceso raw).
Modificaciones en el sistema "host"
Fue instalado un sistema mínimo, sin absolutamente nada, aunque normalmente se piensa que la instalación de un sistema operativo debe tener todo lo posible, y después ir quitando cosas, personalmente pienso que debe ser realizado al revés, la razón es simple, conozco todo lo que voy instalando si no tengo nada.
Utilizo para la creación y gestión de la jaula, un excelente framework realizado por Dirk Engling, llamado ezjail. El motivo de usar este framework, y no hacer los jails vía old style, es la simplicidad, crear y compilar una jaula es algo que lleva tiempo. Con ezjail el proceso se reduce a:
------------------------------------------------------------------
# cvs -d :pserver:anoncvs@cvs.erdgeist.org:/home/cvsroot co ezjail
------------------------------------------------------------------
Luego procedemos a reconfigurar un poquito nuestra red, aclaro aquí que llamaré "host" a la máquina bsd "real", y "jaula" a las diferentes jails. Editamos el archivo /etc/rc.conf:
----------------------------------------------------------------
#Archivo /etc/rc.conf gateway_enable="YES" keymap="us.iso"sshd_enable="YES"
----------------------------------------------------------------
#referencia1: Esta linea hace que las jaulas inicien automáticamente con el sistema host.
#referencia2: Previene que el demonio syslogd de la máquina host interfiera con el de las máquinas jaulas.
Configuro también una ip para la máquina host, y también agrego otra ip para una máquina jaula, asignando una ip como interfaz virtual.
Procederemos a retocar otro archivo de configuración, esta vez, /etc/ssh/sshd_config:
----------------------------------------
Archivo /etc/ssh/sshd_config
ListenAddress 192.168.0.100 #Ip del Host
----------------------------------------
Acabamos de configurar el demonio sshd de la máquina host para que escuche solamente en la ip que le asignamos a la máquina host, ya que nos interesará tener en las diferentes jaulas un demonio ssh corriendo para poder delegar la administración a otras personas, y no cargarnos con todo (o cargarnos con todo pero de una manera mas geek).
Creando nuestra primera "jaula"
Por fin vamos a crear la primera jaula, afortunadamente disponemos de ezjail, lo que lo hará simple, rápido, y bonito.
----------------------------------------------------------------------
# ezjail-admin create -r /zonas/web web.carupitor.com.ar 192.168.0.200
----------------------------------------------------------------------
Luego de la creación de la jaula, la iniciamos con el comando /usr/local/etc/rc.d/ezjail.sh:
bsdhost# /usr/local/etc/rc.d/ezjail.sh start web.carupitor.com.ar
Configuring jails:.
Starting jails: web.carupitor.com.ar.
bsdhost#
------------------------------------------------------------------
Corroboramos listando las jaulas:
---------------------------------------------------------------------
bsdhost# ezjail-admin list
STA JID IP Hostname Root Directory
--- ----- --------------- -------------------- ---------------------
DR 1 192.168.0.200 web.carupitor.com.ar /zonas/web
bsdhost#
---------------------------------------------------------------------
Con esto hemos creado nuestra primera "máquina virtual"!. Fue creada en el directorio /zonas, con hostname web, e ip 192.168.0.200. Observar el JID (Jail ID), este nos permitirá hacer un jexec a la jaula
Ahora vamos a configurar la red en ella. Para ello primero que todos nos logueamos en la jaula, habilitaremos sshd, y pondremos una ruta por defecto:
# jexec 1 tcsh
#Archivo /etc/rc.conf
sshd_enable="YES"
defaultrouter="192.168.0.1"
---------------------------
El comando jexec ejecuta un comando en la jaula que se le determine como parámetro, en este caso ejecutaremos el shell tcsh en la jaula con jid 1.
Configuramos también el archivo /etc/hosts (en la jaula).
---------------------------------------------web# vi /etc/hosts
::1 localhost localhost.my.domain
127.0.0.1 localhost localhost.my.domain
192.168.0.200 web web.carupitor.com.ar
web#
---------------------------------------------
Y cargamos el nameserver en el archivo /etc/resolv.conf
-----------------------------bsdhost# cat /etc/resolv.conf
domain carupitor.com.ar
nameserver 192.23.41.254
bsdhost#
-----------------------------
Opcional: Configuraremos a continuación una cuenta de usuario en la jaula, para poder acceder via ssh a ella y gestionarla. También es posible acceder via ssh al sistema host, y de ahí realizar un jexec 1 tcsh. También estableceremos una password para root:
----------------------------------------------------------------
web# passwd root
Changing local password for root
New Password:
Retype New Password:
web#
web# adduser
Username: webadmin
Full name: Administrador Web
Uid (Leave empty for default):
Login group [webadmin]:
Login group is webadmin. Invite webadmin into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/webadmin]:
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : webadmin
Password : *****
Full Name : Administrador Web
Uid : 1001
Class :
Groups : webadmin
Home : /home/webadmin
Shell : /bin/sh
Locked : no
OK? (yes/no): yes
adduser: INFO: Successfully added (webadmin) to the user database.
Add another user? (yes/no): no
Goodbye!
web#
-------------------------------------------------------------------
Para tener acceso como root es necesario instalar sudo en la jaula, o descomentar #PermitRootLogin no en el archivo /etc/ssh/sshd_config (en la jaula), o agregar al usuario creado al grupo wheel para permitir ejecutar su -.
Reiniciamos la máquina host para ver si tomó todos nuestros cambios, cuando nuevamente esté en linea, trataremos de acceder vía ssh a la jaula.
pulpo@adella ~ $ ssh 192.168.0.200 -lwebadmin Password: Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 6.2-RELEASE (GENERIC) #0: Fri Jan 12 10:40:27 UTC 2007 Welcome to FreeBSD!
$ uname FreeBSD $
$ hostname web.carupitor.com.ar $
--------------------------------------------------------------------------
Instalando Apache en nuestra jaula
Para comenzar con esta sección, nos logueamos como root a nuestra jaula, luego instalamos apache 2.0.
----------------------------------------------------------------------------------------
web# pkg_add -r apache20
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/Latest/apache20.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/perl-5.8.8.tbz... Done.
Removing stale symlinks from /usr/bin...
Removing /usr/bin/perl
rm: /usr/bin/perl: Read-only file system
Skipping /usr/bin/perl5
Done.
Creating various symlinks in /usr/bin...
Backing up /usr/bin/perl as /usr/bin/perl.freebsd
mv: rename /usr/bin/perl to /usr/bin/perl.freebsd: Read-only file system
*** /usr/bin/perl is still there, which should not happen
Symlinking /usr/local/bin/perl5.8.8 to /usr/bin/perl5
ln: /usr/bin/perl5: Read-only file system
Done.
Cleaning up /etc/make.conf... Done.
Spamming /etc/make.conf... Done.
Cleaning up /etc/manpath.config... Done.
Spamming /etc/manpath.config... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/libiconv-1.9.2_2.tbz... Done.
Fetching ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-6.2-release/All/expat-2.0.0_1.tbz... Done.
To run apache www server from startup, add apache2_enable="YES"
in your /etc/rc.conf. Extra options can be found in startup script.
web#
----------------------------------------------------------------------------------------------
Editamos /etc/rc.conf y agregamos la linea apache2_enable="YES", de esta forma el web server inciará cuando sea iniciada la jaula.
web# vi /etc/rc.conf
sshd_enable="YES"
defaultrouter="192.168.0.1"
apache2_enable="YES"
web#
Iniciamos apache en el servidor...
------------------------------------
web# /usr/local/sbin/apachectl start
------------------------------------
Desde un navegador escribimos la ip de la máquina virtual, si todo está bien, tendremos que ver lo siguiente:
Los links:
Wikipedia
Ezjail
FreeBSD

1 comentarios:
queridisimo hermanito geek! amigame a tu blog!!!!
saludon
..el raffo..
Publicar un comentario en la entrada