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.

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.
