Enjaulado facil con jailkit y chroot()
La intención de este articulo es conseguir una manera alternativa y fácil de crear cuentas enjauladas preparada para utilizar de diversas formas (acceso de shell, ssh, ftp, mail, etc...).
El programa que vamos a utilizar para conseguir esto es el jailkit (http://olivier.sessink.nl/jailkit/), una serie de herramientas que nos permitirán modificar las cuentas que deseemos para limitar el acceso a diversos archivos o comandos específicos de una manera fácil e intuitiva.
Jailkitit esta escrito en python (así que deberemos tenerlo instalado) y solo necesita las librerías libc y libpthreads (posix), que están instaladas en la mayoría de los sistemas tipo UNIX.
INTENCION:
En nuestro ejemplo, crearemos una jaula para un usuario concreto y le daremos acceso a shell y ciertos comandos.
INSTALACION:
Lo primero es descargar el programa (que podéis hacerlo desde la web también):
http://olivier.sessink.nl/jailkit/jailkit-2.11.tar.gz
Lo descomprimimos:
# tar -zxvf jailkit-2.11.tar.gzEntramos en el directorio recién creado:
# cd jailkit-2.11Y ejecutamos el archivo de configuración, generalmente bastaría con escribir:
# ./configurePero recomiendo leer el archivo INSTALL.txt o README.txt siempre por si alguna opción nos es mas recomendable.
Una vez configurado todo correctamente:
# make
# make installEn este momento, si todo ha ido bien, ya tenemos nuestras herramientas jailkit para enjaular las cuentas como queramos.
Para empezar, crearemos el directorio que vamos a enjaular. Recordemos que este directorio que creemos sera el directorio raíz (/) del usuario enjaulado.
# mkdir /home/test
# chown root:root /home/test
CONFIGURACION DE LA CUENTA:
La primera y mas determinante herramienta de jailkit es jk_init, que nos permitirá crear rápidamente un enjaulado para ciertos archivos o directorios con el propósito que necesitemos.
Para un acceso simple de la cuenta debemos ejecutar:
# jk_init -v /home/jail basicshell
# jk_init -v /home/jail jk_lshEstos comandos permitirán al usuario enjaulado el uso de ciertas herramientas (bash, ls, cat, cp, grep, etc...) dentro de su jaula.
Existen mas opciones dentro de jk_init, y todas podremos verlas dentro de:
/etc/jailkit/jk_init.ini
En mi caso, voy a querer que el usuario en cuestión pueda utilizar herramientas de red, ssh y algunos editores.
# jk_init -v /home/jail netutils
# jk_init -v /home/jail ssh
# jk_init -v /home/jail editorsHay que tener en cuenta ciertos aspectos de seguridad en este momento.
Si el usuario enjaulado puede llegar a modificar archivos dentro del directorio raíz de la jaula, tales como JAULA/etc o JAULA/lib, nos encontraremos ante un problema, ya que el usuario podría conseguir el acceso fuera de la jaula.
Recordamos por esto que ningún directorio dentro de la raíz de la jaula (excepto JAULA/home y JAULA/tmp) debe tener permisos de escritura para el usuario enjaulado en cuestión Además ningún proceso con privilegios de root debería ejecutarse dentro de la JAULA por las mismas cuestiones de seguridad.
Bien, proseguimos pues. Lo siguiente es elegir el usuario que estará enjaulado.
Lo mas sencillo es crear un usuario desde 0, pero puede ser otro cualquiera.
OJO! Antes de enjaular al usuario previamente creado, debéis echarle un vistazo al man jk_jailuser y leer las opciones. Con la opción -m moveremos el contenido de /home/usuario al directorio enjaulado, en nuestro caso /home/test/home/usuario
Espero que haya quedado claro. Para enjaular el usuario ejecutaremos:
# jk_jailuser -m -j /home/test usuarioCon esto es suficiente, pero deberíais editar el archivo de configuración jk_lsh (ver man jk_lsh), en nuestro caso situado en:
/home/test/etc/jailkit/jk_lsh.ini
Ya tenemos el usuario enjaulado, podemos echarle un vistazo a vuestro archivo /etc/passwd para ver como cambia la linea del usuario en cuestión a algo parecido a esto:
usuario:x:1001:1001::/home/test/./home/usuario:/usr/sbin/jk_chrootsh
Para mas seguridad, podemos reiniciar jk_socketd, un demonio que se encarga del log personal de las jaulas que creemos:
# killall jk_socketd
# jk_socketd
ACCESO A SHELL:
Ahora, para que el usuario enjaulado tenga acceso shell, lo primero es utilizar la herramienta jk_cp que se encargara de copiar todas las librerías bash a la jaula:
# jk_cp -v -f /home/test /bin/bashY luego debéis modificar el archivo /home/test/etc/passwd y aseguraros que tiene algo como:
usuario:x:1001:1001:,,,:/home/usuario:/bin/bash
Ahora podéis probar a logearos como el usuario enjaulado. Si tenéis algún problema, podéis ver /var/log/auth.log y /var/log/daemon.log
Ya esta todo listo. Recordar en visitar la pagina web del autor de jailkit (http://olivier.sessink.nl/jailkit/) para ver muchos otros ejemplos (jail a mail, jail a apache2, etc...).
Un aporte: Cuando actualicéis vuestro sistema, una manera rápida y fácil de actualizar las cuentas enjauladas es utilizando:
# jk_update -j /home/test -dEso es todo, un saludete!