Configuración de un Directorio SFTP en Chroot

En algún momento, es posible que te encuentres en una situación en la que necesites otorgar acceso SFTP a un usuario, pero debe configurarse para evitar que naveguen por toda la estructura de directorios del sistema. Aquí es donde resulta útil la funcionalidad de chroot incorporada en sshd. Esto te permitirá restringir y aislar al usuario en un directorio específico y evitar fácilmente el acceso no autorizado. En este ejemplo, cubriremos los pasos de configuración para establecer el acceso para un usuario llamado Rafael en el departamento de contabilidad.

1. Crear el Usuario

Como usuario root, crea la cuenta y la contraseña para Rafael. Especificaremos el directorio de inicio como /var/contabilidad. Este será el directorio chroot que vamos a configurar. La shell debe ser /bin/false para evitar inicios de sesión interactivos.

# useradd Rafael -d /var/contabilidad -s /bin/false
# passwd Rafael

Nota: Aunque el usuario será forzado a /var/contabilidad sin importar lo que especifiques, no hacerlo así crearía automáticamente un directorio innecesario /home/Rafael que podría causar problemas en el futuro.

2. Configurar el Directorio SFTP en Chroot

Como root, crea el directorio en chroot. La propiedad de root y los permisos predeterminados de 755 deben establecerse automáticamente.

# mkdir /var/contabilidad

3. Actualizar la Configuración de SSHD

Realiza una copia de seguridad de tu archivo sshd_config antes de comenzar a editar con vi,

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bk
# vi /etc/ssh/sshd_config

Primero, busca la línea Subsystem sftp,

Subsystem sftp /usr/lib/openssh/sftp-server

y modifícala para que se vea así,

Subsystem sftp internal-sftp

Esto garantizará que el subsistema SFTP esté vinculado al comando internal-sftp, que es necesario para la configuración de SFTP en chroot.

A continuación, agrega las siguientes opciones debajo del Subsystem que corresponderán a la coincidencia con el usuario Rafael,

Match User Rafael 
   ChrootDirectory /var/contabilidad 
   ForceCommand internal-sftp 
   AllowTcpForwarding no 
   PasswordAuthentication yes 
   PermitTunnel no 
   AllowAgentForwarding no 
   X11Forwarding no

Nota:

ChrootDirectory /var/contabilidad especifica el directorio de destino para el usuario

ForceCommand internal-sftp asegura que solo se permita SFTP

AllowTcpForwarding no deshabilita el reenvío de TCP

PasswordAuthentication yes permite la autenticación basada en contraseña

PermitTunnel no deshabilita el túnel, evitando que el usuario cree túneles

AllowAgentForwarding no deshabilita el reenvío del agente, lo que restringe el reenvío de autenticación

X11Forwarding no elimina el reenvío X11, evitando el reenvío de la interfaz gráfica

Aunque las últimas 3 opciones no son necesarias, incluirlas ayudará a fortalecer el aislamiento y la seguridad del entorno en chroot.

4. Reiniciar el Servicio SSH

Después de realizar cambios y guardar el archivo sshd_config, reinicia el servicio sshd,

# service sshd restart

5. Verificar el Acceso

Desde una máquina remota, inicia una conexión SFTP al servidor como Rafael y verifica que el usuario esté correctamente restringido a /var/contabilidad,

sftp Rafael@servidorsftp
Contraseña de Rafael@servidorsftp: 
Conectado a servidorsftp. 
sftp> cd / 
sftp> pwd 
Directorio de trabajo remoto: / 
sftp> ls 
sftp> quit

Como puedes ver, desde la perspectiva del usuario, /var/contabilidad es su directorio raíz y al ejecutar ls no se muestran archivos dentro del directorio.

Nota Final

Dentro del archivo /etc/ssh/sshd_config, también podrías usar la directiva Match Group en lugar de Match User si estás habilitando el acceso a varios usuarios con acceso similar. Si colocaras a todos los usuarios dentro del grupo sftp_users, un bloque Match Group podría verse así,

Match Group sftp_users 
   ChrootDirectory /var/sftp_users 
   ForceCommand internal-sftp 
   AllowTcpForwarding no 
   PasswordAuthentication yes 
   PermitTunnel no 
   AllowAgentForwarding no 
   X11Forwarding no

La función Match Group tiene la ventaja de una mejor administración de usuarios y es fácilmente escalable en comparación con múltiples bloques Match User. Independientemente de la dirección que elijas, asegúrate de verificar que el usuario esté efectivamente en chroot y no tenga acceso más allá de lo requerido.

Leave a comment