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:
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
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
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
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
Saludos



entonces seria algo así como los permisos en FTP? interesante
siempre sales con cada cosa que ni siquiera sabia que existía, como lo de los usuarios en mysql xD
No precisamente, porque SSH no es lo mismo que FTP. SSH es una shell, o sea, una terminal… estarías en una terminal en otro ordenador o servidor, podrías ejecutar comandos, iniciar procesos, etc… harías tanto como el administrador del server te permita
jajajajajaja nah venga, lo que pasa es que yo publico cosas más técnicas… o sea, que me gusta publicar cosillas que no son tan populares y sí interesantes. Por ejemplo, yo personalmente no pienso publicar algo el día que el nuevo Ubuntu salga, porque considero que muchos ya hablarán de eso… no obstante, de esto que lees acá en el post, no es algo que se lea todos los días o no?
Muy buenos aportes gracias
también hay un protocolo que se llama sftp que es ftp y Secure Shell juntos,aunque no es lo mismo que ejecutar FTP sobre SSH :\
Saludos
Sí sí en efecto, pero al enjaular SSH automáticamente enjaulo a quien se conecte usando SFTP, pues como bien dices, SFTP es en realidad SSH+FTP
Saludos
No se ven las imágenes!!!
Un pequeño error mío jeje, dime ahora
Listo. Gracias
muy bueno, lo apunto a mis favoritos para tenerlo disponible cuando lo necesite jejeje
Gracias, cualquier duda o problema acá estamos para ayudarte
Tienen a Perseo enjaulado. http://i.imgur.com/YjVv9.png
LOL
xD
Que tal.
Sabes, es un tema del cual no estoy muy familiarizado y que había estado checando en BSD (PC-BSD y Ghost BSD) y me parece muy interesante y con funionalidades que pueden ser muy utiles.
Voy a guardarlo para referencias y lo checare con la docu de los BSD. Gracias por el dato.
Tampoco yo estuve familiarizado con esto pues nunca pensé en darle acceso SSH a alguno de mis servers a alguien jaja, pero cuando me encontré con la necesidad de hacerlo, quise dar acceso pero sin que exista la posibilidad de que por equivocación alguien haga algo que no debe
Nunca he probado esto en sistemas BSD, por lo que no te puedo decir que funcionará, pero si buscas por cómo hacer chroot en BSD, algo te debe salir
Gracias por el comentario amigo
Hola,yo uso FreeBSD y claro jailkit funciona de hecho esta en los ports
Lo instalas con este comando
cd /usr/ports/shells/jailkit/ && make install clean
O por paquete ftp
pkg_add -r jailkit
Solo que en la configuración (kira:x:1003:1003::/home/kira:/bin/bash)
Necesitas añadir tcsh o sh,amenos de que hayas instalado bash y añadir esta ruta
/usr/local/bin/bash
Y unos cuantos detalles mas,en Ghost BSD debe ser el proceso parecido incluso mas sencillo al estar basado en FreeBSD
Saludos
Genial, lo estaba buscando; sabes si funciona en Centos??; gracias.
No lo he probado en Centos, pero sí, debería funcionar
De hecho creo recordar que varios han usado esta misma herramienta en servidores Centos y Red Hat
Muchas gracias. Se va directamente a marcadores.
Gracias a tí por comentar
Muy buen “truco”, super útil para administradores de sys. Pero mejor aun exelentemente bien redactado. Que mas se puede pedir.
Muchas gracias por el aporte.
Gracias, de vers muchísimas gracias por tu comentario
Saludos
Alabado sea SSH jaja
Una vez intenté hacer una jaula para ssh pero al estilo tradicional y la verdad que nunca me salio correctamente. Si andaba la jaula no tenia ni bash, o sea se conectaba y ahi nomas quedaba jaja si le andaba la shell podia subir en le jerarquía de directorios y montón de quilombos más jaja pero este jailkit es una maza, te automatiza todas esas cosas… Altamente recomendado
jaja gracias.
Sí, en realidad SSH es todo una maravilla por lo que nos permite, que en realidad no es más que lo que permite el sistema así que… un hurra por Linux! … jaja.
Hola, una duda!
porque cambiar el home de (1)/opt/jail/./home/kira a (2)/home/kira
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
(1)#kira:x:1003:1003:,,,:/opt/jail/./home/kira:/usr/sbin/jk_lsh
(2)kira:x:1003:1003::/home/kira:/bin/bash
Hola
Si no se pone eso el acceso SSH no funciona, el usuario intenta conectarse pero es expulsado automáticamente … parece ser un bug o problema con el intérprete que trae el JailKit, pues al hacer este cambio indicándole que use el bash normal del sistema, funciona todo.
Hola he instalado esto y funciona excelente mente muy bien en centos =D
pero mi dua es como ago para agregar mas comandos por ejemplo a un usuario jail
no puede ejecutar el comando svn co http://pagina.com/carpeta
osea este comando no existe para los usuarios jail en este caso como ago para agregar estos comandos al jail y hay muchos mas que requiero agregar.
Hola que tal
Si deseas habilitar el comando “svn” en el Jail tienes el comando jk_cp
O sea:
jk_cp /opt/jail/ /bin/svn
Esto suponiendo que el binario o ejecutable de svn sea: /bin/svn
Y que la Jaula/Jail sea: /opt/jail/
Te encontrarás con comandos que dependen de otros, o sea que si agregas el comando “pepe” verás que debes además agregar a “federico”, pues “pepe” depende de “federico” para ejecutarse, si encuentras esto entonces agregas los comandos necesarios y ya
Eso es es excelente estoy probandolo a hora mismo ya les digo que paso muchas gracias =D
Suerte
he logrado hacer lo que me dijistes pero de esta forma y automatica mente me lo ha detectado sin ningn problema este fue el comando que he utilizado para poder usar el subverision.
jk_cp -j /home/jaul svn
bueno igual uso centos xP y pues a lo mejor es diferente pero bueno
a hora quisiera saber cuales son las librerias como la de svn pero ahora quisiera compilar por que digamos que necesito usar un comando asi
./configure y marca error
./configure.lineno: line 434: expr: command not found
no sabria cuales son las librerias ya tengo instalado lo que es mysql y demas si compila fuera de la jail pero no dentro de la jaui.
perdon por las molestias.
pd: deverias colocar en la guia lo que te dije sobre el comando usado en centos =) saludos.
Mira, cuando te diga que no puede encontrar un comando (como acá) lo primero es encontrar el comando:
whereis exprUna vez encontrado (/usr/bin/expr y /usr/bin/X11/expr) lo copiamos al Jail con jk_cp
Intenta esto a ver.
Sip, ya edito el post y agrego que funciona en Centos
Genial, muchas gracias (:
Gracias por el aporte…
hola cm estan
Joder tio! Desde Chile mis saludos. Estas tan pedo como yo! jajaja!. Abrazos. Me ha sido de gran ayuda tu post!
Gracias a tí por tu comentario