Tutorial para hacer una jaula chroot SSH/SFTP (Debian Lenny)


Luego de la version 4.8, Openssh ya soporta hacer chrooting, es decir, enjaular a los usuarios en un ambiente, sin la necesidad de aplicar parches de ningun tipo.
Este tutorial les va a explicar como crear un ambiente chroot, para que? bueno para que los usuarios que se conecten al sistema, trabajen en el pero sin poder salir de un directorio siendo su directorio el directorio /. En simples palabras, es como si tuvieran un mini sistema aparte.

"La version que viene con Debian Lenny es la 5.1 y soporta chroot" (para ver la version, se abre una consola y se pone el comando $ dpkg -p openssh-server )
Version: 1:5.1p1-5

INSTALANDO OPENSSH

# apt-get install ssh openssh-server

HABILITANDO Chrooted SFTP (ingreso por ftp al sistema)

Editar el archivo /etc/ssh/sshd_config... y asegurarse de tener esta linea de la siguiente manera:

[...]
Subsystem sftp /usr/lib/openssh/sftp-server
[...]
Luego agregar las siguientes lineas al final del archivo (Notar que ChrootDirectory /home es en donde queremos encerrar al usuario)
[...]
Match User falko
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand /usr/lib/openssh/sftp-server
falko es el nombre del usuario a encerrar y como dije antes, /home es el directorio donde estara encerrado. Si son mas usuarios, se agregan mas lineas como estas pero para el resto de los usuarios, claro?

Ademas vamos a agregar un grupo...
[...]
Match Group users
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no
ForceCommand /usr/lib/openssh/sftp-server
Esto debera encerrar a los usuarios del grupo users dentro de /home.

Ahora reiniciamos Openssh con /etc/init.d/ssh restart

Luego es muy importante es que si tenemos un usuario en /home/falko demos permisos para que solo ese usuario pueda leer y escribir en ese directorio

# chmod 700 /home/falko

HABILITANDO CHROOT PARA SSH

Esto es un poquito mas complicado, pero lo vamos a hacer con cuidado.
Nosotros vamos a configurar un ambiente chroot con todos los programs (/bin/bash, /bin/cp). Esto es para que el usuario trabaje en su ambiente con los comandos que nosotros le copiemos.

Hay que aclarar que para copiar un comando debemos ver cuales son las librerias que utiliza este comando y copiarlas tambien, esto se hace con el comando ldd. (Nosotros vamos a bajarnos un script para esto)
Vamos a verlo con un ejemplo, digamos que queremos copiarle al usuario el comando cp, los pasos son los siguientes:

$ ldd /bin/cp
linux-gate.so.1 => (0xb7f6c000)
libselinux.so.1 => /lib/libselinux.so.1 (0xb7f40000)
libacl.so.1 => /lib/libacl.so.1 (0xb7f39000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7ddd000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7dd9000)
/lib/ld-linux.so.2 (0xb7f6d000)
libattr.so.1 => /lib/libattr.so.1 (0xb7dd4000)

Para evitar copiar esto a mano hay un script que lo hace y lo podemos bajar desde AQUI , el script se llama make_chroot_jail.sh y nos copia todos los archivos y librerias = )

Tambien si deseariamos hacer a mano la copia de los archivos, debemos crear en el directorio donde vamos a encerrar al usuario algunos directorios como por ejemplo /dev/null, /dev/zero, /dev/tty, y /dev/urandom, estos se crean con el comando mknod

Vuelvo a repetir, con el script nos evitamos tambien esto.

Bien comenzemos ahora si, a trabajar, primero instalamos:

# apt-get install sudo debianutils coreutils

Descargar make_chroot_jail.sh y copiarlo a /usr/local/sbin , luego darle permisos de ejecucion, como aqui vemos:

# cd /usr/local/sbin
# wget http://www.fuschlberger.net/programs/ssh-scp-sftp-chroot-jail/make_chroot_jail.sh
# chmod 700 /usr/local/sbin/make_chroot_jail.sh

Luego vamos a correr este Script (make_chroot_jail.sh) para copiar y crear todo lo necesario para nuestro chroot. Ustedes pueden entrar y ver el contenido , asi como tambien definir que cosas copiar y que no.

Siguiente agregar un enlace simbolico /home/home

# cd /home
# ln -s . home

Ahora vamos a ejecutar el script ! la sintaxis seria

# make_chroot_jail.sh username [/path/to/chroot-shell [/path/to/chroot]]

Nosotros reemplazamos
username=falko (nuestro usuario)
/path/to/chroot-shell = /bin/bash
/path/to/chroot = /home

Seria asi :

# make_chroot_jail.sh falko /bin/bash /home

Esto crea y actualiza todos los archivos necesarios para hacer chroot.
Sucede talvez que podemos actualizar algun comando en nuestro sistema, entonces si queremos que nuestro usuario enjaulado tenga la ultima version del mismo ejecutamos:

# make_chroot_jail.sh update /bin/bash /home

Ahora como hicimos con los usuarios que se conectaran por ftp, debemos agregar en el archivo de configuracion de ssh, los usuarios y grupos que se van a conectar por ssh:

# vi /etc/ssh/sshd_config

Agregar las siguientes lineas
[...]
Match User falko
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no

Y si deseamos agregar un grupo podemos agregar las siguientes lineas

[...]
Match Group users
ChrootDirectory /home
AllowTCPForwarding no
X11Forwarding no

Ahora reiniciamos Openssh con /etc/init.d/ssh restart

Luego es muy importante es que si tenemos un usuario en /home/falko demos permisos para que solo ese usuario pueda leer y escribir en ese directorio

# chmod 700 /home/falko

Listo eso es todo!

Links