Cómo enjaular (jail) a usuarios que se conecten por SSH

En nuestro mundillo hay muchos pero muchos secretos… honestamente no creo poder aprender lo suficiente como para conocer la mayoría, y esto está dado por el simple hecho de que Linux nos permite hacer tantas, pero tantas cosas que se nos hace difícil conocerlas todas.

Esta vez les explicaré cómo hacer algo sumamente útil, algo que muchos administradores de redes o sistemas hemos necesitado hacer, y se nos ha dificultado por simplemente no encontrar una vía medianamente simple de lograrlo:

Cómo enjaular usuarios que se conecten por SSH

¿enjaular? … WTF!

Sí. Si por algún motivo debemos darle acceso SSH a un amigo nuestro a nuestro ordenador (o servidor), siempre debemos cuidad por la seguridad y estabilidad del ordenador o servidor nuestro.

Sucede que hace poco quisimos darle acceso SSH a Perseo a un servidor nuestro, pero no podemos darle cualquier tipo de acceso pues tenemos ahí configuraciones de veras sensibles (hemos compilado muchas cosas, paquetes que hemos instalado individuales, etc…) y si alguien que no sea yo intenta hacer aunque sea el más mínimo cambio en el servidor, existe la posibilidad de que todo se vaya al traste jeje.

Entonces, ¿cómo crear un usuario con privilegios extremadamente limiados, tanto así que no pueda ni siquiera salir de su jaula (home)?

Empecemos descargando jailkit, una herramienta que nos permitirá hacer esto:

Todos los comandos siguientes son ejecutados como root

1. Primero debemos descargar a nuestro servidor JailKit.

wget http://ftp.desdelinux.net/jailkit-2.14.tar.gz

2. Luego debemos descomprimir el paquete y entrar en la carpeta que recién nos apareció:

tar xzf jailkit-2.14.tar.gz && cd jailkit-2.14

3. Posteriormente pasamos a compilar e instalar el software (les dejo screenshot):

./configure
make
make install

./configure

make

make install

4. Listo, ya con esto está instalado. Ahora pasamos a crear la jaula que contendrá a los futuros usuarios, en mi caso la creé en: /opt/ y le llamé «jail», por lo que la ruta sería: /opt/jail :

mkdir /opt/jail
chown root:root /opt/jail

5. Ya la jaula está creada, pero no tiene todas las herramientas necesarias para que los futuros usuarios que estarán ahí puedan trabajar sin problemas. O sea, hasta este momento la jaula está creada, pero es solo una caja vacía. Ahora pondremos en la jaula algunas herramientas que los usuarios enjaulados necesitarán:

jk_init -v /opt/jail basicshell
jk_init -v /opt/jail editors
jk_init -v /opt/jail extendedshell
jk_init -v /opt/jail netutils
jk_init -v /opt/jail ssh
jk_init -v /opt/jail sftp
jk_init -v /opt/jail jk_lsh

6. Listo, la jaula existe y ya tiene las herramientas para que el usuario las use… ahora solo nos falta… el usuario!. Vamos a crear al usuario kira y lo pondremos en la jaula:

adduser kira
jk_jailuser -m -j /opt/jail kira

Nota: Ejecuten el siguiente comando en una terminal y deben tener un resultado similar al que muestro en el screenshot:

cat /etc/passwd | grep jk_chroot

Si notan que no les aparece nada así como en el screenshot, algo han debido de hacer mal. Dejen un comentario aquí y con mucho gusto les ayudaré.

7. Y listo, ya el usuario está enjaulado… pero, está TAN enjaulado, que no se puede conectar por SSH, pues cuando intenta conectarse el servidor no le deja:

8. Para permitir que el usuario se conecte debemos hacer un paso más.

Debemos editar el archivo etc/passwd de la jaula, o sea, en este caso sería /opt/jail/etc/passwd , en él comentamos la línea del usuario que creamos, y añadimos una nueva como:

kira:x:1003:1003::/home/kira:/bin/bash

O sea, nos quedaría así el archivo passwd:

root:x:0:0:root:/root:/bin/bash
#kira:x:1003:1003:,,,:/opt/jail/./home/kira:/usr/sbin/jk_lsh
kira:x:1003:1003::/home/kira:/bin/bash

Noten bien los signos de puntuación duplicados y demás, es importante no soltarnos ninguno 

Luego de hacer esto, ya el usuario podrá entrar sin ningún tipo de problema 

Y esto es todo.

La herramienta que usamos para todo esto (jailkit) usa en el backend chroot, que es en realidad lo que casi todos los tutoriales usan. No obstante usando JailKit se hace más simple enjaular 

Importante!: Esto ha sido probado en Debian Squeeze (6) y Centos y ha funcionado al 100%, probado en Debian Wheezy (7) y también ha funcionado, aunque con un pequeño detalle, que no se muestra el nick del usuario en el ssh, pero no pierde funcionalidad alguna.

Si alguien presenta algún problema o algo no va bien, que deje tantos detalles como le sea posible, no me considero un experto pero sí le ayudaré en todo lo que pueda.