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.
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.
Directorio Chroot: /usuarios
Es posible montar el sistema de archivoscon las opciones noexec/nosuid para mejorar la seguridad.
Directorios requeridos en la jaula:
Archivos necesarios en la jaula en el directorio /usuarios
(predeterminado para RHEL / CentOS / Linux Debian
):
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.
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:
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
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
.
Editamos el archivo /etc/rssh.conf
, y cambiamos la variable a chrootpath=/usuarios
y guardamos.
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.
En el ámbito de la informática y la cadena de bloques, el conocimiento teórico a…
El emergente dominio de las criptomonedas ha cautivado la imaginación colectiva por su potencial para…
En el siempre evolucionante mundo de las criptomonedas, el capital de riesgo (VC) ha encontrado…
?? Resumen video : Gareth Soloway Bitcoin, prepárate para lo que viene Introducción El mercado…
En marzo de 2023, el mundo financiero se vio sacudido por el repentino colapso de…
A medida que Bitcoin continúa ganando popularidad y reconocimiento, aumenta la necesidad de escalabilidad y…