Cómo crear un usuario SSH enjaulado con Jailkit en Debian 9 (Stretch)

Este documento describe cómo instalar y configurar Jailkit en el servidor de Debian 9 (Stretch). Jailkit es un conjunto de utilidades para limitar las cuentas de usuario a archivos específicos utilizando chroot() y o comandos específicos. Configurar un shell chroot, un shell limitado a algún comando específico o un demonio dentro de una jaula chroot es mucho más fácil y puede automatizarse utilizando estas utilidades.

Se sabe que Jailkit se utiliza en los dispositivos de seguridad de red de varias empresas líderes en seguridad informática, en los servidores de Internet de varias grandes organizaciones empresariales, en los servidores de Internet de los proveedores de servicios de Internet, así como en muchas empresas más pequeñas y usuarios particulares que necesitan asegurar procesos cvs, sftp, shell o daemon.

1 Nota preliminar

Este tutorial se basa en un servidor Debian 9, por lo que debes configurar una instalación básica de servidor Debian antes de continuar con este tutorial. El sistema debe tener una dirección IP estática. Yo utilizo 192.168.0.100 como dirección IP en este tutorial y servidor1.ejemplo.com como nombre de host.

2 Instalar Jailkit

Primero descargaremos e instalaremos el Jailkit. En el momento de escribir esta guía, la última versión disponible de Jailkit es la 2.20. La descargaré y la instalaré de la siguiente manera:

cd /tmp    
wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz
tar xvfz jailkit-2.20.tar.gz
cd jailkit-2.20

Jailkit requiere algunos paquetes antes de su instalación, los instalaremos como sigue:

apt-get install build-essential autoconf automake1.11 libtool flex bison debhelper binutils-gold python

Ahora nuestro sistema está listo para instalar el Jailkit, instálalo como sigue:

echo 5 > debian/compat
./debian/rules binary
cd ..
dpkg -i jailkit_2.20-1_amd64.deb

Se instalará el Jailkit en Debian Server, podemos eliminar los paquetes extra de /tmp:

rm -rf /tmp/jailkit*

3 Encarcelar un usuario

Ahora crearemos un usuario que será encarcelado con Jailkit como

adduser srijan
root@server1:~#adduser srijan
Añadiendo el usuario `srijan’ …
Añadir nuevo grupo `srijan’ (1001) …
Añadiendo un nuevo usuario `srijan’ (1001) con el grupo `srijan’ …
Creando el directorio personal `/home/srijan’ …
Copiar los archivos de `/etc/skel’ …
Introduce la nueva contraseña UNIX: <–contraseña
Vuelve a escribir la nueva contraseña UNIX:<–contraseña
passwd: contraseña actualizada con éxito
Cambiando la información de usuario de srijan
Introduce el nuevo valor, o pulsa ENTER para el valor por defecto
Nombre completo []: <–ENTER
Número de habitación []:<–ENTER
Teléfono del trabajo []:<–ENTER
Teléfono de casa []:<–ENTER
Otro []:<–ENTER
¿Es correcta la información? [S/N] <–Y
root@server1:~#

En mi caso estoy creando el usuario srijan, puedes utilizar cualquier nombre.

A continuación vamos a comprobar la información sobre el usuario srijan en /etc/passwd como:

egrep srijan /etc/passwd
root@server1:/tmp# egrep srijan /etc/passwd
srijan:x:1001:1001:,,,:/home/srijan:/bin/bash
root@server1:/tmp#

A continuación, vamos a encarcelar al usuario creado. Crea un directorio /jail para el entorno Jail:

mkdir /jail

Ahora proporcionaremos a la Cárcel algunos de los entornos de los programas por defecto como:

jk_init -v /jail netutils basicshell jk_lsh openvpn ssh sftp

Podemos dar otros valores también, la lista completa del entorno de la Cárcel se puede comprobar en el archivo

nano /etc/jailkit/jk_init.ini

Ahora la Cárcel está lista, sólo tienes que añadir el usuario dentro del entorno:

jk_jailuser -m -j /jail/ srijan

De nuevo comprueba los valores en /etc/passwd para el usuario srijan:

egrep srijan /etc/passwd
root@server1:/tmp# egrep srijan /etc/passwd
srijan:x:1001:1001:,,,:/jail/./home/srijan:/usr/sbin/jk_chrootsh
root@server1:/tmp#

Ahora nuestro usuario se ha añadido en el entorno Jailed. Conectaré el servidor Debian con el terminal bash con su IP 192.168.0.100:

ssh [email protected]
root@server1:~$ ssh [email protected]
No se puede establecer la autenticidad del host ‘192.168.0.100 (192.168.0.100)’.
La huella de la clave ECDSA es 3d:ca:91:67:96:39:15:b4:0f:6e:c8:2c:92:ef:25:d7.
¿Estás seguro de que quieres seguir conectándote (sí/no)? sí
La contraseña de [email protected]:
Servidor Linux1 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64

Los programas incluidos en el sistema Debian GNU/Linux son software libre;
las condiciones exactas de distribución de cada programa se describen en los archivos individuales
en /usr/share/doc/*/copyright.

Debian GNU/Linux no ofrece ABSOLUTAMENTE NINGUNA GARANTÍA, en la medida en que
lo permita la legislación aplicable.
Conexión a 192.168.0.100 cerrada.
root@server1:~$

La conexión se está cerrando porque el usuario no tiene shell de registro, vamos a añadirlo en el archivo de configuración para Jail:

nano /jail/etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
#srijan:x:1001:1001:,,,:/home/srijan:/usr/sbin/jk_lsh
srijan:x:1001:1001:,,,:/home/srijan:/bin/bash

Se añadirá el prompt bash para el usuario encarcelado srijan. Ahora intenta de nuevo el login ssh con el usuario srijan y podrás entrar:

ssh [email protected]

Ahora comprueba el contenido del directorio raíz, te darás cuenta de que tiene un contenido como este

ls /
srijan@server1:~$ ls /
bin dev etc home lib64 usr
srijan@server1:~$

4 Ejecutar servicios y comandos en un entorno Jailed

Jail puede utilizarse para ejecutar servicios en un entorno Jailed. Supongamos que queremos ejecutar cualquier servicio en el entorno Jailed, entonces utilizaremos el comando jk_chrootlaunch para ello:

jk_chrootlaunch -j /jail -u srijan -x 'service apache2 start'

Aquí estoy iniciando el servicio de Apache. Del mismo modo, puedes ejecutar cualquier servicio o demonio en un entorno Jailed.

Supongamos que queremos ejecutar un determinado comando en el entorno Jailed, entonces utilizaremos jk_cp. Vamos a probarlo en el entorno Jailed cuando ejecutemos cal entonces se muestra de la siguiente manera:

cal
srijan@server1:~$ cal
bash: cal: command not found
srijan@server1:~$

Significa que el entorno de Jail no conoce el comando cal, ahora lo añadiré en Debian Server de la siguiente manera:

jk_cp  -v -j /jail/ /usr/bin/cal
root@server1:~# jk_cp -v -j /jail/ /usr/bin/cal
Creando enlace simbólico /jail/usr/bin/cal a ncal
Copiando /usr/bin/ncal a /jail/usr/bin/ncal
Creando enlace simbólico /jail/lib/x86_64-linux-gnu/libncurses.so.5 a libncurses.so.5.9
Copiando /lib/x86_64-linux-gnu/libncurses.so.5.9 a /jail/lib/x86_64-linux-gnu/libncurses.so.5.9
/jail/lib/x86_64-linux-gnu/libtinfo.so.5 ya existe, no se tocará
/jail/lib/x86_64-linux-gnu/libc.so.6 ya existe, no lo tocaremos
/jail/lib/x86_64-linux-gnu/libdl.so.2 ya existe, no lo tocaremos
/jail/lib64/ld-linux-x86-64.so.2 ya existe, no lo tocaremos
/jail/lib/x86_64-linux-gnu/libtinfo.so.5 ya existe, no lo tocaremos
/jail/lib/x86_64-linux-gnu/libc.so.6 ya existe, no lo tocaremos
/jail/lib/x86_64-linux-gnu/libdl.so.2 ya existe, no lo tocaremos
/jail/lib64/ld-linux-x86-64.so.2 ya existe, no lo tocaremos

Vuelve a ejecutar el comando cal en el entorno Jailed:

cal
srijan@servidor1:~$ cal
Abril 2019
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

srijan@server1:~$

Así que hemos añadido el comando para el entorno Jailed. ¡Enhorabuena! Ahora hemos configurado con éxito el entorno Jailed en Debian 9 🙂

5 Enlaces

También te podría gustar...