GNU/Linux >> Tutoriales Linux >  >> Linux

Vincular montar un usuario SFTP después de usar chroot

Este artículo está dirigido a administradores o desarrolladores.

Vincular el montaje de un usuario de Protocolo de transferencia de archivos seguro (SFTP) en el que se ha realizado la operación chroot en sus servidores Red Hat® Enterprise Linux® (RHEL®) y CentOS® 6 (OpenSSH es 4.9p1 o posterior) crea las siguientes condiciones:

  • El usuario solo puede usar SFTP y no tiene acceso completo de Shell a través de Secure Shell (SSH).
  • El usuario está encarcelado en su directorio de inicio y no tiene forma de salir de él.
  • Desde la perspectiva del usuario, su directorio principal está en el servidor.
  • Este montaje de enlace a menudo es necesario para un desarrollador que podría necesitar acceso de escritura a una (o más) raíz o raíces de documentos de Apache® o algún otro directorio con el fin de cargar o editar contenido web.

Este artículo describe cómo usar la operación chroot para establecer el directorio de inicio para el usuario y crear un montaje de enlace dentro de ese directorio de inicio para cualquiera de los directorios externos (raíz de documentos) a los que necesitan acceso. Un montaje de vinculación es la única forma de dar acceso al usuario a los datos fuera de su directorio chroot. No puede usar un enlace simbólico (enlace simbólico) a datos fuera del directorio chroot (por ejemplo, ln -s /home/user/http /var/www/http ). Después de la operación chroot, el sistema de archivos no tiene conocimiento de ningún dato fuera del directorio chroot. Esta falta de conocimiento rompe el enlace simbólico. Como alternativa, puede mover el directorio raíz del documento al directorio de inicio del usuario y luego enlazarlo a la ubicación original (por ejemplo, ln -s /var/www/html /home/user1/html ).

El demonio SSH (SSHD) ofrece algunas variables dinámicas en la configuración para la operación chroot:

  • %u :nombre de usuario del usuario que inicia sesión
  • %h :$HOME del usuario que inicia sesión

SSHD es muy estricto sobre cómo debe establecer los permisos. Una de estas restricciones es que el usuario no puede escribir en el nivel superior del directorio chroot. Debe elegir un nivel superior adecuado para el directorio chroot, como la siguiente configuración:

  • Establezca ChrootDirectory en %h :El usuario no puede escribir en su ruta principal. Necesitan una subcarpeta en la que puedan escribir (por ejemplo, cargas) o un enlace de montaje en otra ubicación en la que puedan escribir (por ejemplo, /var/www/html ).
  • Establecer ChrootDirectory en /home/chroot :El usuario puede escribir en su ruta principal, pero el nivel superior del directorio chroot está protegido con permisos del sistema de archivos, no con la cárcel chroot.

La primera opción utiliza el directorio chroot para garantizar la seguridad en lugar de depender de los permisos del sistema de archivos. La segunda opción permite escribir en el directorio principal, pero significa que el directorio chroot se comparte con otros usuarios y solo los permisos del sistema de archivos detienen la divulgación de información. La opción correcta depende de sus necesidades.

Bind montar un usuario SFTP después de una operación chroot

Use los siguientes pasos para vincular el montaje del usuario:

  1. Cree un grupo al que asignará cualquier usuario que deba ser encarcelado en su directorio de inicio:

    # groupadd sftponly
    
  2. Crea el usuario. Establezca el shell en /bin/false y asigne el usuario al grupo que creó anteriormente:

    # mkdir -p /home/chroot/$NEWUSER
    # useradd -d /$NEWUSER -s /bin/false -G sftponly $NEWUSER    # Note: homedir is relative to the chroot
    # pass}wd $NEWUSER
    
  3. Actualice /etc/ssh/sshd_config archivo:

    1. Comente la siguiente línea:

       Subsystem       sftp    /usr/libexec/openssh/sftp-server
      
    2. Agregue las siguientes líneas al final del archivo:

       Subsystem     sftp   internal-sftp
       Match Group sftponly
       ChrootDirectory /home/chroot   # OR     ChrootDirectory %h
       X11Forwarding no
       AllowTCPForwarding no
       ForceCommand internal-sftp
      
    3. Pruebe la configuración y luego vuelva a cargar el SSHD:

       # sshd -t
       # service sshd reload
      

Configurar el homedir del usuario después de la operación chroot

  1. Si el ChrootDirectory es /home/chroot , ejecute los siguientes comandos:

     # chmod 711 /home/chroot            # This prevents chrooted users from seeing other chrooted users' homedirs
     # chmod 755 /home/chroot/$NEWUSER
     # chown $NEWUSER:sftponly /home/chroot/$NEWUSER
    
  2. Si el ChrootDirectory es %h , ejecute el siguiente comando:

     # chown root:root /home/chroot/$NEWUSER
    

Crear montajes de enlace en cualquier ruta fuera del directorio chroot que el el usuario necesita acceder

  1. Agregue la siguiente línea a /etc/fstab archivo:

     /var/www/html   /home/chroot/$NEWUSER/www        none    bind    0 0`
    
  2. Monte el directorio:

     # mkdir /home/chroot/$NEWUSER/www
     # mount /home/chroot/$NEWUSER/www
    

Permisos de actualización

Actualice los permisos del sistema de archivos en los directorios a los que accede el usuario. Tenga en cuenta a otros usuarios que actualmente tienen acceso de lectura/escritura para asegurarse de no eliminar sus permisos sin darse cuenta. Puede completar este paso de varias maneras diferentes, como cambiar la propiedad del usuario, cambiar la propiedad o los permisos del grupo, o agregar listas de control de acceso a archivos (FACL).

El siguiente ejemplo muestra comandos para agregar FACL:

     # setfacl -Rm u:$NEWUSER:rwX /home/chroot/$NEWUSER/www/
     # setfacl -Rm d:u:$NEWUSER:rwX /home/chroot/$NEWUSER/www/

Problemas potenciales

Pueden ocurrir los siguientes problemas.

Permisos de directorio

Los permisos de directorio pueden causar los siguientes problemas:

  • La función chroot integrada de SFTP es muy estricta con respecto a los permisos. Si los permisos no son lo suficientemente seguros, recibirá el siguiente error cuando intente iniciar sesión:

        root@ftp01[ ~ ]# sftp $NEWUSER@localhost
        Connecting to localhost...
        chroottest@localhost's password:
        Write failed: Broken pipe
        Couldn't read packet: Connection reset by peer
    
  • Es posible que pueda iniciar sesión, pero no puede cargar archivos. En este caso, recibe el siguiente error:

        sftp> put test
        Uploading test to /$NEWUSER/test
        Couldn't get handle: Permission denied
        In both cases the problem is directory permissions.  Here's what a known-good directory structure looks like:
        root@ftp01[ ~ ]# ls -ld / /home /home/chroot /home/chroot/$NEWUSERdrwxr-xr-x. 28 root     root     4096 Aug 22 10:31 /
        drwxr-xr-x. 18 root     root     4096 Oct 10 10:49 /home
        drwx--x--x   3 root     root     4096 Oct 10 10:49 /home/chroot
        drwxr-xr-x   3 $NEWUSER $NEWUSER 4096 Oct 10 11:40 /home/chroot/$NEWUSER
        root@ftp01[ ~ ]#
    

SCP no funciona

Este tipo de usuario solo funciona con SFTP y no funciona con otros protocolos (por ejemplo, shell remoto (RSH), protección de contenido seguro (SCP) o Protocolo de transferencia de archivos (FTP)).


Linux
  1. Cómo configurar las cárceles chroot de Linux

  2. Montar un directorio remoto usando SSHFS en Debian Jessie

  3. Ssh:¿restringir un usuario de Ssh/scp/sftp a un directorio?

  4. ¿Umount recursivo después de Rbind Mount?

  5. ¿Copiar archivos modificados después de una fecha específica usando interruptores Cp?

Cómo cargar o descargar archivos/directorios usando sFTP en Linux

Cómo configurar SFTP chroot en Linux

Cómo crear un usuario SFTP con permisos de directorio especificados en Ubuntu 20.04

SFTP con chroot dependiendo de la clave pública del usuario que se conecta

¿Por qué el enlace de montaje de un archivo después de desvincular falla con ENOENT?

Chroot SFTP:es posible permitir que el usuario escriba en el directorio actual (chroot)