Seguridad

Asegurar el acceso SFTP con chroot y bloquear el uso de SSH

Configurar una jaula chroot SFTP en Linux: grupo, usuarios sin shell, sshd_config, directorios y permisos para limitar al usuario a su carpeta.

· 5 min de lectura · nivel avanzado

Si desea configurar en su sistema usuarios que se utilicen únicamente para transferir archivos (y no para acceder al sistema por ssh), debe configurar lo que se denomina una SFTP Chroot Jail.

En un escenario sftp típico (cuando chroot sftp no está configurado), si utiliza sftp puede ver el archivo root tal como se indica a continuación.

Illustration 1 — Sécuriser l'accès SFTP avec CHroot et bloquer l'utilisation de SSH

Entorno SFTP sin chroot

En el ejemplo siguiente (un entorno sftp típico), el usuario de prueba puede utilizar sftp en el sistema, mostrar la carpeta /etc y descargar archivos como el archivo /etc/passwd, que contiene toda la información relativa a los usuarios (nombre de acceso, contraseñas, etc.).

sftp tester@awoui
tester@awoui's password:
sftp> pwd
Remote working directory: /home/tester

sftp> ls
téléchargements documents 

sftp> cd /etc
sftp> ls -l passwd
-rw-r--r--    0 0        0            3750 Dec 29 23:09 passwd

sftp> get passwd
Fetching /etc/passwd to passwd
/etc/passwd     100% 3750     3.7KB/s   00:00

Entorno chroot SFTP

En el ejemplo siguiente, el usuario de prueba puede utilizar sftp en el sistema y mostrar únicamente el directorio que usted le ha asignado.

Cuando el usuario de prueba intenta ejecutar "cd /etc", aparecerá un mensaje de error. Puesto que SFTP está configurado en un entorno chroot, tester no puede mostrar ningún otro archivo del sistema.

sftp tester@awoui
tester@awoui's password:
sftp> pwd
Remote working directory: /home/testeur

sftp> ls
sftp> cd /etc
Couldn't canonicalise: No such file or directory

Ahora que sabe qué es el entorno chroot SFTP, veamos cómo configurarlo.

1. Cree un nuevo grupo

Cree un grupo llamado sftp. Solo los usuarios pertenecientes a este grupo quedarán limitados automáticamente al entorno chroot SFTP en este sistema.

groupadd sftp

2. Crear usuarios (o modificar un usuario existente)

Supongamos que desea crear un usuario Tom que solo deba estar autorizado a ejecutar SFTP en un entorno chroot y que no deba estar autorizado a ejecutar SSH.

El siguiente comando crea el usuario "Tom", asigna ese usuario al grupo sftp y establece /home como directorio personal. Definir /sbin/nologin como shell impedirá que el usuario utilice ssh y obtenga acceso al shell).

useradd -g sftp -d /home -s /sbin/nologin tom
passwd tom

Compruebe que el usuario se ha creado correctamente.

grep tom /etc/passwd
tom:x:500:500::/home:/sbin/nologin

Si desea modificar un usuario existente para convertirlo en usuario exclusivamente sftp y meterlo en la jaula chroot sftp, proceda de la siguiente manera:

usermod -g sftp -d /home -s /sbin/nologin tom

En la misma línea, si debe transferir archivos de Windows a Linux, utilice uno de los clientes sftp como filezilla o winscp.

3. Configurar el subsistema sftp-server en sshd_config

Conviene indicar a sshd que utilice el sftp interno para sftp (en lugar del servidor sftp predeterminado).

Modifique el archivo /etc/ssh/sshd_config y comente la línea siguiente:

#Subsystem       sftp    /usr/libexec/openssh/sftp-server

A continuación, añada la línea siguiente al archivo /etc/ssh/sshd_config:

Subsystem       sftp    internal-sftp

Guarde y cierre el archivo /etc/ssh/sshd_config.

Puede comprobarlo de nuevo utilizando el comando grep:

grep sftp /etc/ssh/sshd_config
#Subsystem      sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

4. Especificar el directorio de chroot para un grupo

Solo desea meter en el entorno de la jaula chroot a determinados usuarios (es decir, los usuarios pertenecientes al grupo sftp). Añada las líneas siguientes al final de /etc/ssh/sshd_config

nano /etc/ssh/sshd_config
Match Group sftp
        ChrootDirectory /sftp/%u
        ForceCommand internal-sftp

Arriba:

  • Match Group sftp - Indica que las líneas siguientes solo se aplicarán a los usuarios pertenecientes al grupo sftp.
  • ChrootDirectory /sftp/%u - Es la ruta que se utilizará tras la autenticación del usuario. %u indica el usuario. Así, para Tom será /sftp/christophe.
  • ForceCommand internal-sftp - Fuerza la ejecución de internal-sftp e ignora cualquier comando indicado en el archivo ~/.ssh/rc file.

5. Crear un directorio base sftp

Puesto que más arriba hemos indicado /sftp como ChrootDirectory, cree ese directorio (que es el equivalente de su directorio /home habitual).

mkdir /sftp

Ahora, dentro de /sftp, cree los directorios individuales de los usuarios que forman parte del grupo sftp, es decir, los usuarios que solo estarán autorizados a ejecutar sftp y que estarán en el entorno chroot.

mkdir /sftp/tom

Así, /sftp/tom equivale a / para Tom. Cuando Tom utilice sftp y ejecute «cd /», solo verá el contenido de los directorios situados bajo «/sftp/tom» (y no la verdadera raíz / del sistema). Esa es la potencia de chroot.

De este modo, dentro de ese directorio /sftp/tom, cree cualquier subdirectorio que desee que vea el usuario. Por ejemplo, cree un directorio de entrada en el que los usuarios puedan enviar sus archivos.

mkdir /sftp/tom/home

6. Configuración de los permisos adecuados

Para que chroot funcione correctamente, debe asegurarse de que los permisos adecuados estén bien configurados en el directorio que acaba de crear más arriba.

Defina la pertenencia al usuario y al grupo sftp tal como se indica a continuación.

chown tom:sftp /sftp/tom/home

El permiso tendrá el aspecto siguiente para el directorio de entrada.

ls -ld /sftp/tom/home
drwxr-xr-x 2 to sftp 4096 Dec 28 23:49 /sftp/tom/home

El permiso tendrá el aspecto siguiente para el directorio /sftp/tom

ls -ld /sftp/tom
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp/tom

ls -ld /sftp
drwxr-xr-x 3 root root 4096 Dec 28 23:49 /sftp

7. Reiniciar sshd y probar chroot SFTP

Reinicie sshd:

service ssh restart

Pruebe el entorno chroot sftp. Como puede verse a continuación, cuando tom se conecta por sftp y ejecuta «cd /», solo verá el directorio de entrada.