Cómo Restringir el Acceso de Usuario SSH a un Directorio Específico Usando una Cárcel Chroot

Hay varias razones para restringir una sesión de usuario SSH a un directorio específico, especialmente en servidores web, pero la más obvia es la seguridad del sistema. Para bloquear usuarios de SSH en un directorio determinado, podemos usar el mecanismo chroot.

El cambio de raíz (chroot) en sistemas similares a Unix como Linux es un medio para separar operaciones de usuario específicas del resto del sistema Linux; cambia el directorio raíz aparente para el proceso de usuario en ejecución actualmente y su proceso hijo (padre) con un nuevo directorio raíz llamado jail chrooted.

En este tutorial, te mostraremos cómo restringir el acceso de usuario SSH a un directorio dado en Linux. Ten en cuenta que ejecutaremos todos los comandos como root, usa el comando sudo si estás conectado al servidor como usuario normal.

1. Comience creando la cárcel chroot utilizando el comando mkdir a continuación:

1. Comienza creando la jaula chroot utilizando el comando mkdir que se muestra a continuación:

# mkdir -p /home/test

2. A continuación, identifica los archivos necesarios, de acuerdo con la página de manual sshd_config, la opción ChrootDirectory especifica la ruta del directorio al que se chroot después de la autenticación. El directorio debe contener los archivos y directorios necesarios para soportar la sesión de un usuario.

Para una sesión interactiva, esto requiere al menos un shell, comúnmente sh, y los nodos básicos de /dev como null, zero, stdin, stdout, stderr y dispositivos tty:

# ls -l /dev/{null,zero,stdin,stdout,stderr,random,tty}
Listing Required Files

3. Ahora, crea los archivos /dev de la siguiente manera utilizando el comando mknod. En el comando a continuación, se utiliza la bandera -m para especificar los bits de permisos de archivo, c significa archivo de caracteres y los dos números son los números principales y menores a los que apuntan los archivos.

# mkdir -p /home/test/dev/		
# cd /home/test/dev/
# mknod -m 666 null c 1 3
# mknod -m 666 tty c 5 0
# mknod -m 666 zero c 1 5
# mknod -m 666 random c 1 8
Create /dev and Required Files

4. Posteriormente, establece los permisos apropiados en la jaula chroot. Tenga en cuenta que la jaula chroot y sus subdirectorios y subarchivos deben ser propiedad del usuario root, y no deben ser legibles por ningún usuario normal o grupo:

# chown root:root /home/test
# chmod 0755 /home/test
# ls -ld /home/test
Set Permissions on Directory

Paso 2: Configura Shell Interactiva para Jaula Chroot SSH

5. Primero, cree el directorio bin y luego copie los archivos /bin/bash en el directorio bin utilizando el comando cp de la siguiente manera:

# mkdir -p /home/test/bin
# cp -v /bin/bash /home/test/bin/
Copy Files to bin Directory

6. Ahora, identifique el bash requerido para las bibliotecas compartidas libs, como se indica a continuación, y cópielas en el directorio lib:

# ldd /bin/bash
# mkdir -p /home/test/lib64
# cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /home/test/lib64/
Copy Shared Library Files

Paso 3: Crear y Configurar Usuario SSH

7. Ahora, cree el usuario SSH con el comando useradd y establezca una contraseña segura para el usuario:

# useradd tecmint
# passwd tecmint

8. Cree el directorio de configuraciones generales de la cárcel chroot, /home/test/etc y copie los archivos de cuenta actualizados (/etc/passwd y /etc/group) en este directorio de la siguiente manera:

# mkdir /home/test/etc
# cp -vf /etc/{passwd,group} /home/test/etc/
Copy Password Files
Note: Each time you add more SSH users to the system, you will need to copy the updated account files into the /home/test/etc directory.

Paso 4: Configurar SSH para Usar Cárcel Chroot

9. Ahora, abra el archivo sshd_config.

# vi /etc/ssh/sshd_config

y agregue/modifique las líneas a continuación en el archivo.

#define username to apply chroot jail to
Match User tecmint
#specify chroot jail
ChrootDirectory /home/test
Configure SSH Chroot Jail

Guarde el archivo y salga, y reinicie los servicios SSHD:

# systemctl restart sshd
OR
# service sshd restart

Paso 5: Pruebas de SSH con Cárcel Chroot

10. En este punto, pruebe si la configuración de la cárcel chroot funciona según lo esperado:

# ssh [email protected]
-bash-4.1$ ls
-bash-4.1$ date
-bash-4.1$ uname
Testing SSH User Chroot Jail

A partir de la captura de pantalla anterior, podemos ver que el usuario SSH está encerrado en la cárcel chroot y no puede ejecutar ningún comando externo (ls, date, uname, etc).

El usuario solo puede ejecutar bash y sus comandos integrados como (pwd, history, echo, etc) como se ve a continuación:

# ssh [email protected]
-bash-4.1$ pwd
-bash-4.1$ echo "Tecmint - Fastest Growing Linux Site"
-bash-4.1$ history
SSH Built-in Commands

Paso 6. Cree el directorio personal del usuario SSH y agregue comandos de Linux

11. A partir del paso anterior, podemos notar que el usuario está encerrado en el directorio raíz, podemos crear un directorio personal para el usuario SSH de la siguiente manera (haga esto para todos los usuarios futuros):

# mkdir -p /home/test/home/tecmint
# chown -R tecmint:tecmint /home/test/home/tecmint
# chmod -R 0700 /home/test/home/tecmint
Create SSH User Home Directory

12. A continuación, instale algunos comandos de usuario como ls, date y mkdir en el directorio bin:

# cp -v /bin/ls /home/test/bin/
# cp -v /bin/date /home/test/bin/
# cp -v /bin/mkdir /home/test/bin/
Add Commands to SSH User

13. A continuación, verifique las bibliotecas compartidas para los comandos anteriores y móvilas al directorio de bibliotecas de la prisión chroot:

# ldd /bin/ls
# cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /home/test/lib64/
Copy Shared Libraries

Paso 7. Pruebas de SFTP con Chroot Jail

14. Haz una prueba final utilizando sftp; verifica si los comandos que acabas de instalar funcionan.

Agrega la línea a continuación en el archivo /etc/ssh/sshd_config:

#Enable sftp to chrooted jail 
ForceCommand internal-sftp

Guarda el archivo y sal. Luego reinicia los servicios SSHD:

# systemctl restart sshd
OR
# service sshd restart

15. Ahora, prueba utilizando SSH y obtendrás el siguiente error:

# ssh [email protected]
Test SSH Chroot Jail

Intenta usar SFTP de la siguiente manera:

# sftp [email protected]
Testing sFTP SSH User

¡Eso es todo por ahora! En este artículo, te mostramos cómo restringir a un usuario SSH en un directorio determinado (jaula chroot) en Linux. Utiliza la sección de comentarios a continuación para ofrecernos tus pensamientos sobre esta guía.

Source:
https://www.tecmint.com/restrict-ssh-user-to-directory-using-chrooted-jail/