Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Cómo Enjaular un Usuario por SSH

#1
[Imagen: jaula.jpg]

SSH es una aplicación que usan los administradores de sistemas para controlar remotamente un ordenador. Frente a otros sistemas gráficos tiene la ventaja de requerir poco ancho de banda y ser muy rápido. Lo único que hace falta es que esté instalado en el ordenador local y en el remoto y saber la contraseña del servidor (ordenador remoto).

SSH es muy útil también para enviar o recibir ficheros de forma encriptada, sin necesidad de servicios de terceros que en la mayor parte de los casos son poco seguros (whatspapp, email, etc).

Ahora bien, imagínese que tiene un servidor y un cliente ó amigo le pide la contraseña de SSH para conectarse a su servidor. Si se la da podrá hacer lo que quiera con su servidor, no solo mandarle archivos. Frente a este escenario hay que tomar precauciones.

Una solución sencilla es enjaular un usuario en un directorio y permitir acceso solo a dicho directorio (y subdirectorios), y solo permitirle manejar ciertos comandos. A continuación voy a explicar cómo hacerlo en cualquier distribución GNU/Linux, creo que con MacOs será parecido. Con el sistema de Mocosoft ya es algo más complicado y no lo voy a explicar a no ser que vea mucho interés.

Para ello descargaremos la última versión de Jailkit, que aunque data de finales del 2016 sigue siendo plenamente funcional.

Vamos a hacerlo con la términal y el comando wget que es más divertido:

wget https://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz

Con esto descargamos un archivo comprimido de tipo tar.gz. Lo descomprimimos y entramos en el directorio que se crea al descomprimir. Fijaros en &&. Lo que hace es después de descomprimir jailkit-2.19.tar.gz entrar en el directorio jailkit-2.19. Se podría haber hecho en dos pasos pero así es más rápido.
 
tar xzf jailkit-2.19.tar.gz && cd jailkit-2.19

Ahora vamos a compilar Jailkit. Para ello configuramos y compilamos:

./configure
make && sudo make install

A continuación creamos la jaula donde queramos. Por ejemplo en /opt/jail

sudo mkdir /opt/jail
sudo mkdir /opt/jail

hacemos que la jaula pertenezca a root


sudo chown root:root /opt/jail

Vamos a iniciar servicios en la jaula:

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

También podríamos haber instalado la jaula en /var/www/jail , /srv/jail , /home/jail. Elijan el que más les convenga.

El siguiente paso es crear un usuario al que permitiremos conectarse por ssh. En nuestro ejemplo le llamaremos cliente

sudo adduser cliente

Al crear el usuario llamado cliente tendremos que crear una contraseña nueva que es la que facilitaremos al usuario que se conecte como cliente.

Cómo hemos dicho antes no queremos que "cliente" tenga la posibilidad de hacer estropicios en nuestro ordenador ó servidor, así que lo enjaulamos

sudo jk_jailuser -m -j /opt/jail cliente

Si el cliente intenta entrar desde un ordenador remoto por SSH no podrá. Esto es debido a que no tiene bash activado. Lo solucionamos editando el archivo passwd dentro de la jaula. Cambiamos /usr/sbin/jk_lsh por /bin/bash

sudo nano /opt/jail/etc/passwd

Quedará algo parecido a lo siguiente

root:x:0:0:root:/root:/bin/bash
#ponemos almoadilla antes de la siguiente linea y añadimos la linea siguiente para acceso ssh
#cliente:x:1002:1002:,,,:/home/cliente:/usr/sbin/jk_lsh
cliente:x:1002:1002::/home/cliente:/bin/bash

A partir de este momento el cliente se puede conectar en nuestro servidor y enviar o recuperar ficheros por ssh en su jaula particular.



Responder
#2
Gracias a Pablo por este ejemplo para usar SSH en una jaula.

La jaula la he puesto en una Raspberry Pi con Debian Stretch.

He conseguido entrar por SSH pero tengo dos problemas:
  1. Me sale "I have no name" en vez de mi nombre de usuario.
  2. No puedo usar el comando nano.
¿Alguien podría decirme como lo puedo solucionar?
Responder
#3
Hola Guillermo. Me alegra que te haya sido útil mi explicación. Respecto a los problemas que tienes voy a explicar cómo solucionarlos.

El mensaje de "I have no name" te aparece porque no tienes la librería de resolución de nombres en la jaula. Para buscarla teclea
sudo locate libnss_compat.so

El comando locate te busca la ruta del fichero libnss_compat.so. Por ejemplo, en raspbian (el sistema operativo oficial de la raspberry pi) sería
/lib/arm-linux-gnueabihf/libnss_compat.so.2

La ruta será diferente dependiendo del sistema operativo que uses.
Una vez localizada la ruta puedes copiar la librería a la jaula. En el caso de que la jaula esté en /opt/jail

sudo jk_cp -j /opt/jail/ /lib/arm-linux-gnueabihf/libnss_compat.so.2

El segundo punto, "que no puedes usar el comando nano" lo puedes solucionar entrando por SSH y escribiendo en la terminal:

export TERM=xterm

Espero haberte ayudado. Si tienes más dudas estaré encantado de ayudarte.
Responder
#4
Muchas gracias Pablo por las explicaciones tan claras y concisas.

Había buscado por internet varios días y no había nadie que lo explicara de ninguna manera.

He probado lo que has dicho y funciona perfectamente.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)