GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Configure un shell encarcelado con jailkit en ubuntu

Caparazón encarcelado y Jailkit

Un shell encarcelado es un tipo de shell limitado que proporciona al usuario un shell de aspecto muy real, pero no le permite alterar/ver/modificar ninguna parte de los sistemas de archivos reales. El sistema de archivos dentro del shell es diferente del sistema de archivos real del sistema subyacente. Tal funcionalidad se logra a través de chroot y encuentra muchos tipos de aplicaciones. Por ejemplo, para configurar un shell de Linux para que los usuarios simplemente "jueguen". O ejecutar algún programa con funcionalidad completa pero en un entorno limitado y así sucesivamente.

En este tutorial vamos a hablar sobre la configuración rápida de un shell encarcelado con jailkit en ubuntu. Jailkit es un programa auxiliar que permite configurar rápidamente un shell encarcelado, encarcelar a los usuarios dentro de él y configurar programas para que se ejecuten desde el entorno encarcelado.

Jailkit se puede descargar desde
http://olivier.sessink.nl/jailkit/

Ya hemos discutido sobre la instalación de jailkit en ubuntu, así que echa un vistazo a esa publicación.

Configurar shell encarcelado

1. Configurar el entorno de la cárcel

Debe haber un directorio donde se configurará todo el entorno de la cárcel. Hagámoslo en /opt/jail. Esto puede ser lo que sea.

$ sudo mkdir /opt/jail

La raíz debe ser propietaria de este directorio. Así que cállate.

$ sudo chown root:root /opt/jail

2. Configure los programas para que estén disponibles dentro de la cárcel

Todos los programas que deben estar disponibles en la cárcel deben copiarse dentro de ella mediante el comando jk_init.
Ejemplo

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

O de una vez

$ sudo jk_init -v /opt/jail netutils basicshell jk_lsh openvpn ssh sftp

Los nombres como basicshell, editors, netutils son grupos que contienen varios programas. Cada grupo es un conjunto de archivos ejecutables, bibliotecas, etc. que se copiarán en el shell. Por ejemplo, la sección basicshell proporciona muchos programas como bash, ls, cat, chmod, mkdir, cp, cpio, date, dd, echo, egrep, etc. en la cárcel.

Para obtener una lista completa de las secciones que se pueden configurar, consulte /etc/jailkit/jk_init.ini .

jk_lsh (Jailkit limited shell) - is an important section, and must be added.

3. Crea el usuario que será encarcelado

Necesita un usuario para poner dentro de la cárcel. Vamos a crear uno

$ sudo adduser robber
Adding user `robber' ...
Adding new group `robber' (1005) ...
Adding new user `robber' (1006) with group `robber' ...
Creating home directory `/home/robber' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for robber
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] y

Tenga en cuenta que este es un usuario normal que se crea en el sistema de archivos real y no dentro de la cárcel.
En el siguiente paso, este usuario será encarcelado dentro de la cárcel.

En este punto, si echa un vistazo a /etc/passwd, verá una entrada al final que se ve así

robber:x:1006:1005:,,,:/home/robber:/bin/bash

Este es nuestro nuevo usuario y la última parte /bin/bash indica que el usuario tiene un acceso de shell normal en el sistema, si inicia sesión.

4. Encarcelar al usuario

Ahora es el momento de poner al usuario dentro de la cárcel.

$ sudo jk_jailuser -m -j /opt/jail/ robber

Al hacer esto, el ladrón de usuarios ahora ha sido encarcelado.
Ahora, si echa un vistazo a /etc/passwd, la última entrada se vería así

robber:x:1006:1005:,,,:/opt/jail/./home/robber:/usr/sbin/jk_chrootsh

Tenga en cuenta que las últimas 2 partes que indican el usuario doméstico y el tipo de shell han cambiado. El directorio de inicio del usuario ahora está dentro del entorno de la cárcel en /opt/jail. El shell del usuario ahora es un programa especial llamado jk_chrootsh que proporcionará el shell encarcelado.

Es este shell en particular llamado jk_chrootsh el que lleva al usuario dentro de la cárcel cada vez que inicia sesión en el sistema.

La configuración de la cárcel ya está casi terminada. Pero si intentas conectarte a id desde ssh, fallará así:

$ ssh [email protected]
[email protected]'s password:
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64)
 * Documentation:  https://help.ubuntu.com/
13 packages can be updated.
0 updates are security updates.
*** /dev/sda7 will be checked for errors at next reboot ***
*** /dev/sda8 will be checked for errors at next reboot ***
Last login: Sat Jun 23 12:45:13 2012 from localhost
Connection to localhost closed.
$

La conexión se cerrará. Esto sucede porque el usuario en realidad tiene un shell limitado.

5. Dar bash shell al usuario dentro de la cárcel

Lo siguiente importante que debe hacer es darle al usuario un bash shell adecuado, pero dentro de la cárcel.
Abra el siguiente archivo

/opt/jail/etc/passwd

Es el archivo de contraseñas dentro de la cárcel. Se vería algo así

root:x:0:0:root:/root:/bin/bash
robber:x:1006:1005:,,,:/home/robber:/usr/sbin/jk_lsh

Cambie /usr/sbin/jk_lsh a /bin/bash

root:x:0:0:root:/root:/bin/bash
robber:x:1006:1005:,,,:/home/robber:/bin/bash

Guarde el archivo y salga.

6. Iniciar sesión en la cárcel

Así que ahora es el momento de iniciar sesión en la cárcel de nuevo

$ ssh [email protected]
[email protected]'s password:
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-25-generic x86_64)
 * Documentation:  https://help.ubuntu.com/
13 packages can be updated.
0 updates are security updates.
*** /dev/sda7 will be checked for errors at next reboot ***
*** /dev/sda8 will be checked for errors at next reboot ***
Last login: Sat Jun 23 12:46:01 2012 from localhost
bash: groups: command not found
I have no [email protected]:~$

La cárcel dice '¡No tengo nombre!' , ja ja. Ahora tenemos un shell bash completamente funcional pero dentro de la cárcel.

Ahora comprueba el entorno moviéndote. La raíz / del entorno encarcelado es /opt/jail del sistema de archivos real. Pero solo nosotros sabemos eso, no el usuario encarcelado.

I have no [email protected]:~$ cd /
I have no [email protected]:/$ ls
bin  dev  etc  home  lib  lib64  run  usr  var
I have no [email protected]:/$

Además, solo los comandos que se copiaron a través de las secciones jk_cp estarán disponibles en esta cárcel.
Si el inicio de sesión falla, verifique /var/log/auth.log para ver si hay mensajes de error.

Ahora intente ejecutar algún comando de red como wget o algo similar.

$ wget http://www.google.com/

Si obtiene un error como este:

$ wget http://www.google.com/
--2012-06-23 12:56:43--  http://www.google.com/
Resolving www.google.com (www.google.com)... failed: Name or service not known.
wget: unable to resolve host address `www.google.com'

Solucionarlo ejecutando los siguientes 2 comandos:

$ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_files.so.2
$ sudo jk_cp -v -j /opt/jail /lib/x86_64-linux-gnu/libnss_dns.so.2

La ubicación exacta de libnss_files.so y libnss_dns.so puede variar, así que compruébelo.

Ejecutar programas o servicios en la cárcel

Ahora la configuración está completa. Las cárceles son útiles para ejecutar programas o servicios en entornos restringidos/seguros. Para iniciar un programa o demonio dentro de la cárcel, use jk_chrootlaunch comando.

$ sudo jk_chrootlaunch -j /opt/jail -u robber -x /some/command/in/jail

La utilidad jk_chrootlaunch se puede usar para iniciar un proceso particular dentro del entorno de la cárcel con privilegios del usuario especificado. Si el demonio no se inicia, consulte /var/log/syslog para ver si hay mensajes de error.

Para ejecutar el programa dentro de la cárcel, primero se debe copiar completamente el programa dentro de la cárcel usando el comando jk_cp.

jk_cp - a utility to copy files including permissions and libraries into a jail

Para obtener más información sobre varios comandos de jailkit, consulte la documentación en

http://olivier.sessink.nl/jailkit/
Ubuntu
  1. Configurar Linux Container con LXC en Ubuntu 16.04

  2. Cómo configurar la conmutación por error de IP con KeepAlived en Ubuntu y Debian

  3. ¿Usando Ubuntu con una configuración de dos pantallas?

  4. ¿Instalar Ubuntu con Uid específico?

  5. Configure un entorno chroot en Ubuntu con debootstrap

Cómo crear un usuario ssh encarcelado con Jailkit en Debian/Ubuntu

Un script de Shell para configurar el entorno de desarrollo en Ubuntu

Cómo configurar WordPress en Ubuntu Server con Apache

Supervise la actividad del usuario con la herramienta acct en Ubuntu 20.04

Cómo instalar y configurar Zsh en Ubuntu 20.04

Configuración inicial del servidor con Ubuntu 18.04