GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar Chroot SFTP en Linux (Permitir solo SFTP, no SSH)

Si desea configurar una cuenta en su sistema que se usará solo para transferir archivos (y no para ssh al sistema), debe configurar SFTP Chroot Jail como se explica en este artículo.

En un escenario típico de sftp (cuando chroot sftp no está configurado), si usa sftp, puede ver el archivo de raíz como se muestra a continuación.

Si desea otorgar acceso sftp en su sistema a proveedores externos para transferir archivos, no debe usar sftp estándar. En su lugar, debe configurar Chroot SFTP Jail como se explica a continuación.

Entorno SFTP sin Chroot

En el siguiente ejemplo (un entorno sftp típico), John puede acceder al sistema mediante sftp, ver la carpeta /etc y descargar los archivos desde allí.

# sftp [email protected]
john@thegeekstuff's password:
sftp> pwd
Remote working directory: /home/john

sftp> ls
projects  john.txt 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 SFTP de Chroot

En el siguiente ejemplo, John puede usar sftp en el sistema y ver solo el directorio que ha designado para que john realice sftp (es decir, /entrante).

Cuando John intente realizar 'cd /etc', dará un mensaje de error. Dado que SFTP está configurado en un entorno chroot, John no puede ver ningún otro archivo en el sistema.

# sftp [email protected]
john@thegeekstuff's password:
sftp> pwd
Remote working directory: /home/john

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. Crear un nuevo grupo

Cree un grupo llamado sftpusers. Solo los usuarios que pertenezcan a este grupo estarán automáticamente restringidos al entorno chroot SFTP en este sistema.

# groupadd sftpusers

2. Crear usuarios (o modificar usuarios existentes)

Digamos que desea crear un usuario guestuser al que solo se le debe permitir realizar SFTP en un entorno chroot, y no se le debe permitir realizar SSH.

El siguiente comando crea un usuario invitado, asigna este usuario al grupo sftpusers, crea /incoming como el directorio de inicio, establece /sbin/nologin como shell (lo que no permitirá que el usuario use ssh y obtenga acceso al shell).

# useradd -g sftpusers -d /incoming -s /sbin/nologin guestuser
# passwd guestuser

Verifique que el usuario se haya creado correctamente.

# grep guestuser /etc/passwd
guestuser:x:500:500::/incoming:/sbin/nologin

Si desea modificar un usuario existente y convertirlo en un usuario de sftp solamente y ponerlo en la cárcel de sftp de chroot, haga lo siguiente:

# usermod -g sftpusers -d /incoming -s /sbin/nologin john

En una nota relacionada, si tiene que transferir archivos de Windows a Linux, use cualquiera de los clientes sftp mencionados en esta lista de los 7 principales clientes sftp.

3. Configurar el subsistema sftp-server en sshd_config

Debe indicarle a sshd que use el sftp interno para sftp (en lugar del servidor sftp predeterminado).

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

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

A continuación, agregue la siguiente línea al archivo /etc/ssh/sshd_config

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

4. Especifique el directorio Chroot para un grupo

Desea colocar solo ciertos usuarios (es decir, usuarios que pertenecen al grupo sftpusers) en el entorno de chroot jail. Agregue las siguientes líneas al final de /etc/ssh/sshd_config

# tail /etc/ssh/sshd_config
Match Group sftpusers
        ChrootDirectory /sftp/%u
        ForceCommand internal-sftp

En lo anterior:

  • Hacer coincidir sftpusers de grupo:esto indica que las siguientes líneas coincidirán solo para los usuarios que pertenecen al grupo sftpusers
  • ChrootDirectory /sftp/%u:esta es la ruta que se usará para chroot después de autenticar al usuario. %u indica el usuario. Entonces, para john, será /sftp/john.
  • ForceCommand internal-sftp:esto fuerza la ejecución de internal-sftp e ignora cualquier comando que se mencione en el archivo ~/.ssh/rc.

5. Crear directorio de inicio sftp

Dado que especificamos /sftp como ChrootDirectory arriba, cree este directorio (que es equivalente a su directorio /home típico).

# mkdir /sftp

Ahora, en /sftp, cree los directorios individuales para los usuarios que forman parte del grupo sftpusers. es decir, los usuarios a los que solo se les permitirá realizar sftp y estarán en el entorno chroot.

# mkdir /sftp/guestuser

Entonces, /sftp/guestuser es equivalente a / para el usuario invitado. Cuando el usuario invitado accede al sistema mediante sftp y ejecuta "cd /", solo verá el contenido de los directorios en "/sftp/usuarioinvitado" (y no el / real del sistema). Este es el poder del chroot.

Entonces, en este directorio /sftp/guestuser, cree cualquier subdirectorio que desee que vea el usuario. Por ejemplo, cree un directorio entrante donde los usuarios puedan transferir sus archivos.

# mkdir /sftp/guestuser/incoming

6. Configurar el permiso apropiado

Para que chroot funcione correctamente, debe asegurarse de que los permisos apropiados estén configurados correctamente en el directorio que acaba de crear arriba.

Establezca la propiedad al usuario y agrupe al grupo sftpusers como se muestra a continuación.

# chown guestuser:sftpusers /sftp/guestuser/incoming

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

# ls -ld /sftp/guestuser/incoming
drwxr-xr-x 2 guestuser sftpusers 4096 Dec 28 23:49 /sftp/guestuser/incoming

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

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

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

7. Reinicie sshd y pruebe Chroot SFTP

Reiniciar sshd:

# service sshd restart

Pruebe el entorno chroot sftp. Como puede ver a continuación, cuando guesetuser hace sftp y hace "cd /", solo verá el directorio entrante.

# sftp [email protected]
guestuser@thegeekstuff's password:

sftp> pwd
Remote working directory: /incoming

sftp> cd /
sftp> ls
incoming

Cuando el usuario invitado transfiera archivos al directorio /entrante desde el sftp, en realidad se ubicarán en el directorio /sftp/guestuser/entrante del sistema.


Linux
  1. Cómo cambiar el puerto SSH en Linux

  2. Cómo configurar SSH sin contraseña en Linux

  3. Cómo configurar las claves SSH para el inicio de sesión ssh "sin contraseña" en Linux

  4. Cómo permitir ssh con contraseñas vacías en Linux

  5. ¿Cómo configurar Rsync sin contraseña con SSH en UNIX/Linux?

Cómo configurar el servidor Chroot SFTP en Linux

Cómo configurar el inicio de sesión SSH sin contraseña en Linux con claves

Cómo crear un alias SSH en Linux

Cómo permitir o denegar el acceso SSH a un usuario o grupo en particular en Linux

Cómo configurar SFTP chroot en Linux

Cómo configurar la autenticación multifactor para SSH en Linux