Chroot

El chroot permite ejecutar procesos con la raíz del sistema cambiada. De manera que es posible usar diferentes instalaciones dentro de una misma .

Se gana cierto de nivel de seguridad, ya que los procesos dentro del chroot no ven nada fuera de él

  • chroot ./ cambia la raíz de ejecución, para salir exit o ctrl+ d
  • para poder ver otros directorios desde el fuera del chroot ejecutamos mount –o bind /dev/ dev/
  • Si queremos dejarlo fijo editamos el fichero etc/fstab y añadimos
/dev/	/home/copia_seg/grecasadocu/dev/	auto	bind 0 0
  • Para ver los procesos que se están ejecutando en el chroot:
 fuser –v /home/copia_Seg/grecasadocu/dev/grecasadocu
  • Si al arrancar los servicios no dice ok en la parte derecha, es que estamos arrancado los servicios dentro del chroot

Montar directorios de fuera

Algunos programas, como apache, necesitan ciertos directorios del sistema para poder arrancar. Los principales son /proc y /dev. Para hacer que esos directorios se vean dentro del chroot se puede usar bind.

Para montarlo manualmente

  • mount -o bind /dev /directorio/chroot/dev
  • mount -o bind /proc /directorio/chroot/proc

Para dejarlo permanente (es decir, que se monte él solo cuando la máquina reinicia) hay que meter las líneas en el /etc/fstab

/proc    /directorio/chroot/proc   none    bind    0    0 
/dev     /directorio/chroot/dev    none    bind    0    0

Arrancar procesos dentro del chroot

Para entrar en el chroot con una shell normal, basta poner

    chroot /directorio/chroot

Si queremos arrancar algún proceso dentro del chroot, sin tener que entrar en él (útil para scripts), hay que añadir la orden a ejecutar al final de la orden anterior

    chroot /directorio/chroot orden_a_ejectucar argumentos

Por ejemplo

   chroot /directorio/chroot /etc/init.d/apache2 start
   chroot /directorio/chroot /etc/init.d/postgresql start
   chroot /directorio/chroot /etc/init.d/samba start

Servicios

Hay que tener en cuenta que si hay otro postgres o apache ejecutándose en la misma máquina hay que asegurarse de que no se pisan los puertos de escucha. Para arrancar cualquiera de los servicios

   chroot /directorio/chroot /etc/init.d/apache2 start
   chroot /directorio/chroot /etc/init.d/postgresql start
chroot /directorio/chroot /etc/init.d/samba start

Arranque automático

Si sólo hacemos esto, no se arrancarán ellos solos cada vez que se reinicie la máquina. Para conseguir que se arranquen automáticamente hay que: hacer dos scripts (uno para cada servicio) y añadirlos al /etc/init.d/

Por ejemplo Los scripts serían /etc/init.d/apache_chroot y /etc/init.d/postgresql_chroot. apache_chroot

   #!/bin/sh
   chroot /directorio/chroot /etc/init.d/apache2 $*
postgresql_chroot 
   #!/bin/sh
   chroot /directorio/chroot /etc/init.d/postgresql $*
samba_chroot 
   #!/bin/sh
   chroot /directorio/chroot /etc/init.d/samba $*

Lo único que hacen estos scripts es pasarle la orden que le manda el sistema (que puede ser start, stop, restart, etc) al servicio dentro del chroot. Una vez que están creados hay que darles permiso de ejecución (chmod +x) y luego añadirlos al sistema de arranque con update-rc.d

   # update-rc.d apache_chroot defaults
   # update-rc.d postgresql_chroot defaults
   # update-rc.d samba_chroot defaults

JAILKIT

Referencias