floure.ARCHIVO / Tecnologías de la información
← Volver a la colección3 MIN DE LECTURA

Tecnologías de la información

Jaula Chroot

Sistemas Operativos / Linux

Cambiar la raíz visible modifica cómo se resuelven rutas. No equivale a aislar completamente el proceso ni a quitarle privilegios; el nombre «jaula» promete más de lo que hace la llamada. (¬‿¬ )

Una jaula chroot, o simplemente chroot, es un mecanismo que cambia el directorio raíz que ve un proceso en sistemas operativos tipo Unix.

Al ejecutar un proceso en un entorno chroot, se le presenta un directorio raíz diferente al del sistema operativo principal, lo que cambia la resolución de rutas absolutas. No es una frontera de seguridad completa ni un sustituto de un sandbox

Indice

  1. Configuración Seguridad en la conexión SSH
  2. Nuevo Usuario
  3. Estructura Jaula
  4. Binarios y librerias
  5. Configuración para su uso

Configuración Seguridad en la conexión SSH

-Si no tenemos instalado openssh-server, aquí hay un apartado-

Configuramos SSH de manera segura primeramente: vamos a sudo nano /etc/ssh/sshd_config

y agregamos/modificamos lo siguiente:

Port 2222
PermitRootLogin no
PasswordAuthentication no

Reiniciamos SSH sudo service ssh restart


Creamos usuario

sudo adduser --shell /bin/false --home /home/desafio desafio Con este comando le dimos un shell falso-no funcional y le designamos una carpeta home.


Creamos la estructura de la Jaula

sudo mkdir -p /var/chroot/desafio/{bin,lib,lib64,home/desafio} y además cambiamos permisos con sudo chown root:root /var/chroot/desafio sudo chmod 0755 /var/chroot/desafio

Con esto creamos los directorios de forma recursiva y esta será su entorno, además de cambiar permisos para que root sea el propietario superior del entorno, agregando una capa de seguridad para evitar el escalamiento de privilegios. La raíz de la jaula y sus componentes de ruta deben ser de root y no escribibles por otros. Solo un subdirectorio interior destinado a datos debe pertenecer a desafio.

Verificamos con `` ls -ld /var/chroot/desafio


Copiamos binarios y librerías

Para que el usuario pueda utilizar lo básico en su jaula, debemos también proporcionarle los binarios y sus respectivas librerías:

  • para copiar los binarios de ls y de bash sudo cp /bin/bash /bin/ls /var/chroot/desafio/bin/

Luego debemos copiar sus respectivas librerías.

# Para buscar las librerias necesarias, filtrarlas y copiar las necesarias
libs=$(ldd /bin/bash /bin/ls | awk '/=> \// {print $3} /^[[:space:]]*\// {print $1}' | sort -u)
for lib in $libs; do
  dir="/var/chroot/desafio$(dirname "$lib")"
  sudo mkdir -p "$dir"
  sudo cp "$lib" "$dir"
done

Configuración SSH

Vamos nuevamente a nuestro sshd_config y agregamos la siguiente linea para configurar perfiles específicos para un usuario:

con eso le decimos cuál es su directorio Chroot y que debe utilizarlo al conectarse por SSH.

Referencia: chroot(2). El manual advierte expresamente que la llamada no está diseñada como aislamiento de seguridad completo.

Revisión: chroot(2), ChrootDirectory de OpenSSH. Corregido el destino de bibliotecas a la misma raíz que los binarios e incluido el cargador que ldd muestra sin =>. Usar ldd solo sobre binarios de confianza. La receta sigue incompleta: /bin/false impide una shell interactiva; copiar Bash no cambia el shell asignado. Para SFTP restringido se puede diseñar ForceCommand internal-sftp con chroot y sin binarios externos, revisando autenticación y permisos. Para una shell, faltan definir comandos, dispositivos y cuentas mínimas. El bloque Match de la imagen no se transcribió ni comprobó. Instalar/probar clave y validar sshd antes de cerrar métodos de acceso; no se levantó una jaula.

+----------------------------------------+
| Floure &                               |
| Tachibana's guild                      |
| [Hikari · Nozomi · Vesper]             |
| SEAL: sha256/12: 99f657a9043b          |
| STATUS: LITURGY_IN_PROGRESS            |
+----------------------------------------+

Conexiones

Abrir red completa ↗
✳

Fin del apunte

Seguir explorando ↗