Enjaulamiento nativo de SFTP

Por cuestiones de seguridad, es importante proteger el acceso de los usuarios a los diferentes directorios dentro del sistema operativo, y aunque se pudieran manejar los típicos permisos de lectura, escritura y ejecución que maneja Linux con el comando chmod, pudiera no ser suficiente, pues aun así un usuario quisquilloso podría ver la estructura de directorios y donde se encuentran los archivos de configuración principales del sistema.

Para evitar lo anterior, es posible realizar Enjaulamiento de usuarios, donde no les permites que se muevan más allá de la carpeta que tú definas, esto es muy funcional por ejemplo para transferencias de archivos, en esta ocasión, les indicare como hacerlo para el servicio SFTP.

1) Crea el directorio donde deseas manejar el Enjaulamiento, p. ej.
# mkdir /chroot/home

2) Define el punto de montaje, para manejar el Enjaulamiento, puede ser por ejemplo /home_jail, para que los usuarios en home se encuentren enjaulados:
# mount -o bind /home_jail /chroot/home

3) Ahora edita el archivo de configuración de SSH, /etc/ssh/sshd_config:
ChrootDirectory
Subsystem sftp internal-sftp

Donde , debe ser igual al directorio que definiste para Enjaulamiento, o en su defecto el valor %h, si se definió el directorio HOME de los usuarios enjaulados dentro del punto de montaje del directorio enjaulado.

ChrootDirectory %h

También es posible hacerlo por grupo, suponiendo que creamos un grupo de usuarios enjaulados, llamado “enjaulados”, podríamos definir la siguiente configuración:

Match group enjaulados
ForceCommand internal-sftp
ChrootDirectory %h
X11Forwarding no
AllowTcpForwarding no

Donde estamos indicando el Enjaulamiento para ese grupo.

4) Una vez, definido, reiniciar los servicios SSH
# service sshd restart

5) Ahora, es necesario crear los usuarios, para ello:
/usr/sbin/useradd -g -s /bin/bash -m -d

Donde:
, deberá ser para este caso: enjaulados
, deberá ser la ruta donde se montó el directorio enjaulado: /home_jail/usertest
, nombre del usuario a enjaular, en este caso le pondremos: usertest

Quedando:
/usr/sbin/useradd -g enjaulados -s /bin/bash -m -d /home_jail/usertest usertest

6) Modificar los permisos de la carpeta del usuario enjaulado, para que opere de manera adecuada a: 755
chmod 755 /home_jail/usertest

7) Asignar contraseña al usuario:
passwd usertest

8) Listo!, ahora prueba conectándote por sftp (con algún cliente winscp, xsftp, etc),el usuario se encontrara enjaulado y no podrá moverse del directorio home hacia atrás, siempre hacia adelante.

Saludos.