Categories: HowtoLinux

Configurar rssh Chroot Jail en Linux para bloquear a los usuarios en su directorio home

El dia de hoy un amigo me pregunto como puede restringir a un usuario para que cuando se conecte por ssh solo tenga acceso a su /home.

Esto de restringir acceso a los directorios del sistema de un usuario en especifico no es nada nuevo, pero yo lo desconocia.

Asi que para no quedar mal me puse a investigar y encontre que el software rssh soporta la opcion de chroot. Si queremos encarcelar usuarios tenemos la opcion chrootpath.

chrootpath

Esta opcion es utilizada para establecer el directorio raiz donde la cárcel chroot estara ubicada, esto con el fin de aumentar la seguridad del sistema.

Un chroot en Linux o Unix es una operacion la cual cambia el directorio raiz para el usuario. Solo afecta el proceso actual y sus hijos.

Si tu directorio home predeterminado es /home/usuario normalmente puedes acceder a los archivos en los directorios /etc, /bin o sbin. Esto permite a un atacante instalar programas desde el servidor web dentro de /tmp. La funcionalidad de chroot permite restringuir los accesos al sistema de archivos y encierra al usuario dentro de su directorio inicial o home.

Configurando rssh chroot

Directorio Chroot: /usuarios
Es posible montar el sistema de archivoscon las opciones noexec/nosuid para mejorar la seguridad.

Directorios requeridos en la jaula:

  • /usuarios/dev – Archivo de dispositivos
  • /usuarios/etc – Archivos de configuracion tales como passwd
  • /usuarios/lib – Librerias compartidas
  • /usuarios/usr – rssh y otros binarios
  • /usuarios/bin – Copiar el shell predeterminado (/bin/csh o /bin/bash)

Archivos necesarios en la jaula en el directorio /usuarios (predeterminado para RHEL / CentOS / Linux Debian ):

  • /etc/ld.so.cache
  • /etc/ld.so.cache.d/*
  • /etc/ld.so.conf
  • /etc/nsswitch.conf
  • /etc/passwd
  • /etc/group
  • /etc/hosts
  • /etc/resolv.conf
  • /usr/bin/scp
  • /usr/bin/rssh
  • /usr/bin/sftp
  • /usr/libexec/openssh/sftp-server o /usr/lib/openssh/sftp-server
  • /usr/libexec/rssh_chroot_helper o /usr/lib/rssh/rssh_chroot_helper (el suid tiene que ser establecido en este binario)
  • /bin/sh or /bin/bash (shell predeterminado)

Para aumentar la seguridad limiten la cantidad de binarios dentro de la jaula al minimo. Usualmente /bin/bash y /bin/sh no son necesarios pero en algunos sistemas puede dar error.

Acerca del sistema de archivos

Los archivos tienen que estar dentro del directorio de la jaula (en nuestro caso de ejemplo, /usuarios) y a su vez dentro de directorios que imiten su ubicacion en el sistema de archivos de root (/).
Por ejemplo, /usr/bin/rssh se encuentra en /. Si nuestra jaula esta localizada en /usuarios, entonces copiamos /usr/bin/rssh a /usuarios/usr/bin/rssh.

Las siguientes instucciones han sido probadas satisfactoriamente en:

  • FreeBSD
  • Solaris UNIX
  • RHEL / Redhat / Fedora / CentOS Linux
  • Debian Linux

Constuyendo el entorno Chroot

Creamos todos los directorios necesarios:

deathbian:~# mkdir -p /usuarios/{dev,etc,lib,usr,bin}
deathbian:~# mkdir -p /usuarios/usr/bin
deathbian:~# mkdir -p /usuarios/libexec/openssh

Creamos /usuarios/dev/null:

deathbian:~# mknod -m 666 /usuarios/dev/null c 1 3

Copiamos los archivos de configuracion de /etc/, dentro del directorio de la jaula /usuarios/etc:

deathbian:~# cd /usuarios/etc
deathbian:~# cp /etc/ld.so.cache .
deathbian:~# cp -avr /etc/ld.so.cache.d/ .
deathbian:~# cp /etc/ld.so.conf .
deathbian:~# cp /etc/nsswitch.conf .
deathbian:~# cp /etc/passwd .
deathbian:~# cp /etc/group .
deathbian:~# cp /etc/hosts .
deathbian:~# cp /etc/resolv.conf .

Abrimos los archivos /usuarios/group y /usuarios/passwd para remover las cuentas de root y las demas.

Ahora copiamos los archivos binarios requeridos hacia el directorio /usuarios/bin:

deathbian:~# cd /usuarios/usr/bin
deathbian:~# cp /usr/bin/scp .
deathbian:~# cp /usr/bin/rssh .
deathbian:~# cp /usr/bin/sftp .
deathbian:~# cd /usuarios/usr/libexec/openssh/
deathbian:~# cp /usr/libexec/openssh/sftp-server .
O
deathbian:~# cp /usr/lib/openssh/sftp-server .
deathbian:~# cd /usuarios/usr/libexec/
deathbian:~# cp /usr/libexec/rssh_chroot_helper
O
deathbian:~# cp /usr/lib/rssh/rssh_chroot_helper
deathbian:~# cd /usuarios/bin/
deathbian:~# cp /bin/sh .
O
deathbian:~# cp /bin/bash .

Copiamos todos los archivos de las librerias compartidas

Los archivos de las librerias que cualquiera de estos archivos necesite se pueden encontrar utilizando el comando ldd / strace. Por ejemplo, al correr ldd contra /usr/bin/wget, produce la siguiente informacion:

deathbian:~# ldd /usr/bin/wget
linux-gate.so.1 =>  (0xb7fdc000)
libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7fc2000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7fb9000)
libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb7f76000)
libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb7e34000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7ce5000)
/lib/ld-linux.so.2 (0xb7fdd000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7ccd000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7cb8000)

Necesitamos copiar todas esas librerias, les recomiendo usar el script l2chroot con este proposito. El script lo descargan de esta manera:

deathbian:~# cd /sbin
deathbian:~# wget -O l2chroot http://www.cyberciti.biz/files/lighttpd/l2chroot.txt
deathbian:~# chmod +x l2chroot

Editamos el script l2chroot y cambian la variable BASE por nuestro directorio chroot (jail), BASE=”/usuarios”:
Ahora copiamos todos los archivos de las librerias compartidas:

deathbian:~# l2chroot /usr/bin/scp
deathbian:~# l2chroot /usr/bin/rssh
deathbian:~# l2chroot /usr/bin/sftp
deathbian:~# l2chroot /usr/libexec/openssh/sftp-server
O
deathbian:~# l2chroot /usr/lib/openssh/sftp-server
deathbian:~# l2chroot /usr/libexec/rssh_chroot_helper
O
deathbian:~# l2chroot /usr/lib/rssh/rssh_chroot_helper
deathbian:~# l2chroot /bin/sh
O
deathbian:~# l2chroot /bin/bash

Modificar la Configuracion de Syslogd

La funcion de la libreria de syslog trabaja escribiendo mensajes a un archivo FIFO como /dev/log. Se necesita pasar la opcion -a /path/to/chroot/dev/log. Utilizando este argumento se puede especificar sockets adicionales en los que syslogd escucha. Esto es necesario si van a permitir que un daemon corra dentro del entorno chroot(). Se pueden utilizar hasta 19 sockets adicionales. Si el entorno necesita mas, se puede aumentar el simbolo MAXFUNIX dentro del archivo fuente syslogd.c.

Editamos el archivo /etc/sysconfig/syslog, buscamos la linea:
SYSLOGD_OPTIONS="-m 0"
y la cambiamos por:
SYSLOGD_OPTIONS="-m 0 -a /usuarios/dev/log"

Guardamos y cerramos el archivo para luego reiniciar syslog.

deathbian:~# /etc/init.d/syslog restart

Si estan utilizando Debian / Ubuntu, apliquen estos cambios descritos al archivo /etc/default/syslogd.

Establecer el path de chroot

Editamos el archivo /etc/rssh.conf, y cambiamos la variable a chrootpath=/usuarios y guardamos.

Agregar el usuario a la jaula

Ahora configuramos la cuenta del usuario de rssh. Por ejemplo, con el siguiente comando agregamos al usuario fher98 dentro de chroot:

deathbian:~# useradd -m -d /usuarios/fher98 -s /usr/bin/rssh fher98
deathbian:~# passwd fher98

Ahora fher98 puede logearse usando sftp o copiar archivos utilizando scp. Incluso podra crear, trabajar y transferir archivos, pero no tendra acceso a navegar a otro directorio del sistema.

Linux Gratis

No soy un asesor financiero y la información que proporciono es solo para fines educativos e informativos. No brindo asesoramiento de inversión y cualquier decisión que tome con respecto a sus inversiones es suya. Consulte a un asesor financiero autorizado antes de tomar cualquier decisión de inversión. El valor de las criptomonedas puede ser volátil e invertir en ellas implica un riesgo significativo. Debe considerar cuidadosamente su propia situación financiera y tolerancia al riesgo antes de tomar cualquier decisión de inversión. No garantizo la exactitud o integridad de la información proporcionada y no soy responsable de ninguna pérdida o daño que pueda resultar del uso de esta información.

Disqus Comments Loading...

Recent Posts

Más Allá de la Teoría: Estudiantes en la Vanguardia de Lightning Network 2023

En el ámbito de la informática y la cadena de bloques, el conocimiento teórico a…

6 meses ago

Un Análisis Detallado del Informe de Crimen Cripto 2023: Una Guía para Principiantes

El emergente dominio de las criptomonedas ha cautivado la imaginación colectiva por su potencial para…

7 meses ago

Capital de Riesgo en Cripto: Sobreviviendo y Prosperando en un Mercado Bajista

En el siempre evolucionante mundo de las criptomonedas, el capital de riesgo (VC) ha encontrado…

7 meses ago

Bitcoin, divisas y criptomonedas: Potencial y perspectivas | Análisis 2023

?? Resumen video : Gareth Soloway Bitcoin, prepárate para lo que viene Introducción El mercado…

12 meses ago

El desmoronamiento de Silicon Valley Bank: la crisis bancaria del 2023

En marzo de 2023, el mundo financiero se vio sacudido por el repentino colapso de…

1 año ago

SegWit – Bitcoin Segregated Witness

A medida que Bitcoin continúa ganando popularidad y reconocimiento, aumenta la necesidad de escalabilidad y…

1 año ago