Encarcelar a usuarios particulares al iniciar sesión

Encarcelar a usuarios particulares al iniciar sesión

Todo este asunto de las cárceles y chroot me resulta un poco confuso. Se utilizan para ejecutar programas posiblemente riesgosos de forma segura, pero esto debe ser iniciado por el usuario. Estoy buscando cómo encarcelar a los usuarios como lo hacen Android e iOS. Esto se puede configurar para inicios de sesión remotos, pero ¿cómo se puede configurar para inicios de sesión desde casa?

Supongamos que tengo Ubuntu instalado en una PC de escritorio. Hay cuatro usuarios: administrador, usuario1, usuario2 e invitado. El primero inicia sesión como lo hace normalmente una cuenta. El segundo y tercer inicio de sesión en una cárcel. El cuarto ingresa en una cárcel más restrictiva que el segundo y el tercero. ¿Estas cuentas encarceladas tienen acceso a una especie de entorno virtualizado? ¿Incluyen copias de los archivos binarios principales o están integrados en la interfaz de todos? ¿Se logran con scripts de inicialización o algo más?

Respuesta1

Configuración de la cárcel Chroot

Crear usuario para ser encarcelado.

$sudo adduser acer

Para configurar chroot necesitamos configurar el privilegio sudo para los usuarios.

Agregue el usuario al grupo sudo

    $sudo adduser acer sudo 

Crear carpeta para configurar un usuario en la cárcel

    $sudo mkdir /chroot

El usuario de la cárcel sólo puede acceder a lo que esté dentro de la carpeta /chroot

Esto significa que debemos proporcionar algo allí, a menos que el usuario solo pueda ver la carpeta vacía.

Simplemente crea cosas básicas necesarias.

    $cd /chroot

    $ sudo mkdir bin dev etc home lib usr var

    $sudo mkdir etc/pam.d home/acer lib/security var/log usr/bin

Queremos copiar el software a /chroot que el usuario de la cárcel pueda usar.

comando bash

    $which bash 
    /bin/bash
    $sudo cp /bin/bash /chroot/bin
    $ldd /bin/bash
    #This ldd command is used to list the library function  
    linux-gate.so.1 =>  (0xb772d000)
            libtinfo.so.5 => /lib/i386-linux-gnu/libtinfo.so.5 (0xb76f0000)
            libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb76eb000)
            libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb753c000)
            /lib/ld-linux.so.2 (0xb772e000)

Copy this lib file to chroot lib directory

$sudo cp  /lib/i386-linux-gnu/libtinfo.so.5 /chroot/lib
    $sudo cp /lib/i386-linux-gnu/libdl.so.2 /chroot/lib
    $sudo cp /lib/i386-linux-gnu/libc.so.6 /chroot/lib
    $sudo cp /lib/ld-linux.so.2 /chroot/lib

ls comando

$which ls
    /bin/ls
    $sudo cp /bin/ls /chroot/bin
    $ldd /bin/ls
    linux-gate.so.1 =>  (0xb771f000)
            libselinux.so.1 => /lib/i386-linux-gnu/libselinux.so.1 (0xb76e1000)
            libacl.so.1 => /lib/i386-linux-gnu/libacl.so.1 (0xb76d8000)
            libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7529000)
            libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xb74eb000)
            libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb74e6000)
            /lib/ld-linux.so.2 (0xb7720000)
            libattr.so.1 => /lib/i386-linux-gnu/libattr.so.1 (0xb74e0000)

Copie este archivo lib al directorio chroot lib

    $sudo cp /lib/i386-linux-gnu/libselinux.so.1 /chroot/lib
    $sudo cp /lib/i386-linux-gnu/libacl.so.1  /chroot/lib
    $sudo cp  /lib/i386-linux-gnu/libc.so.6 /chroot/lib
    $sudo cp  /lib/i386-linux-gnu/libpcre.so.3 /chroot/lib
    $sudo cp   /lib/i386-linux-gnu/libdl.so.2  /chroot/lib
    $sudo cp  lib/i386-linux-gnu/libattr.so.1 /chroot/lib
    $sudo cp /lib/ld-linux.so.2 /chroot/lib

su comando

    $which su
    /bin/su 
    $sudo cp /bin/su /chroot/su
    $ldd /bin/su
    linux-gate.so.1 =>  (0xb7737000)
            libpam.so.0 => /lib/i386-linux-gnu/libpam.so.0 (0xb770d000)
            libpam_misc.so.0 => /lib/i386-linux-gnu/libpam_misc.so.0 (0xb7709000)
            libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb755a000)
            libaudit.so.1 => /lib/i386-linux-gnu/libaudit.so.1 (0xb7535000)
            libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7530000)
            /lib/ld-linux.so.2 (0xb7738000)

Copy this lib file to chroot lib directory

    $sudo cp /lib/i386-linux-gnu/libpam.so.0 /chroot/lib
    $sudo cp  /lib/i386-linux-gnu/libpam_misc.so.0 /chroot/lib
    $sudo cp /lib/i386-linux-gnu/libc.so.6  /chroot/lib
    $sudo cp /lib/i386-linux-gnu/libaudit.so.1 /chroot/lib
    $sudo cp /lib/i386-linux-gnu/libdl.so.2 /chroot/lib
    $sudo cp /lib/ld-linux.so.2 /chroot/lib

Agregue algunos archivos de configuración del sistema y bibliotecas adicionales al chroot

    $cat /etc/passwd | grep acer > /chroot/etc/passwd
    $cat /etc/passwd | grep root >> /chroot/etc/passwd
    $cat /etc/group | grep acer > /chroot/etc/group
    $cat /etc/group | grep root >> /chroot/etc/group
    $cat /etc/shadow | grep acer > /chroot/etc/shadow

Copie el archivo nsswitch.conf a /chroot

    $sudo cp /etc/nsswitch.conf /chroot/etc/nsswitch.conf

Dentro del nsswitch debería verse como el siguiente

    passwd: files
    group: files
    shadow: files
    hosts: files
    networks: files
    protocols: files
    services: files
    ethers: files
    rpc: files
    netgroup: files

Copiamos los archivos de configuración necesarios para que funcione el sistema PAM para que funcione la autorización en el jail

    $sudo cp /etc/pam.d/common-account /chroot/etc/pam.d/
    $sudo cp /etc/pam.d/common-auth /chroot/etc/pam.d/
    $sudo cp /etc/pam.d/common-session /chroot/etc/pam.d/
    $sudo cp /etc/pam.d/su /chroot/etc/pam.d/

Agregamos algunas bibliotecas adicionales requeridas por PAM y las funciones de cambio del servicio de nombres.

    $sudo cp /lib/libnss_files.so.2 /chroot/lib
    $sudo cp /lib/libnss_compat.so.2 /chroot/lib
    $sudo cp /lib/libnsl.so.1 /chroot/lib
    $sudo cp -fa /lib/security/ /chroot/lib

Necesitamos crear el archivo login.defs en el directorio /chroot/etc/. Este archivo define alguna configuración para el proceso de inicio de sesión.

    $sudo vim /chroot/etc/login.defs

Agregue la siguiente línea al archivo login.defs

    SULOG_FILE /var/log/sulog

Si no hiciéramos esto, el comando su intentaría utilizar la utilidad syslog, que no está disponible en la configuración de la cárcel y todo el proceso fallaría.

Cree el script que pondrá a nuestro usuario en la cárcel cada vez que inicie sesión en el sistema.

Cree el archivo jailshell en el directorio /bin, fuera de la cárcel

    $sudo vim /bin/jailshell

Agregue el siguiente script a ese archivo

    #!/bin/bash
    sudo chroot /chroot /bin/su acer

Hazlo ejecutable

    $sudo chmod  +x  /bin/jailshell

Para poner el script en acción, necesitamos editar el archivo /etc/passwd (que está fuera de la cárcel).

Cambie /bin/bash a /bin/jailshell en el usuario acer

    $sudo vim /etc/passwd
    acer:x:1003:1003:,,,:/home/acer:/bin/jailshell

Establecer el usuario acer en el directorio de inicio de la cárcel

    $cd /home/acer
    $sudo cp -fa ./ /chroot/home/acer

Lo siguiente también podría ser útil

    $sudo cp /etc/bash.bashrc /chroot/etc/  
    $sudo cp /etc/localtime /chroot/etc/
    $sudo cp /etc/services /chroot/etc/
    $sudo cp /etc/protocols /chroot/etc/
    $sudo cp /usr/bin/dircolors /chroot/usr/bin/
    $sudo cp /usr/bin/groups/ /chroot/usr/bin/

Todo hecho. Ahora prueba el inicio de sesión.

    $su – acer
    password:xxxx
    [sudo]password for acer:xxxx
    acer@Snovabits:/$ ls
    bin dev etc home lib    usr var 

información relacionada