
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.