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:
-
Cree un grupo al que asignará cualquier usuario que deba ser encarcelado en su directorio de inicio:
# groupadd sftponly
-
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
-
Actualice
/etc/ssh/sshd_config
archivo:-
Comente la siguiente línea:
Subsystem sftp /usr/libexec/openssh/sftp-server
-
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
-
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
-
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
-
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
-
Agregue la siguiente línea a
/etc/fstab
archivo:/var/www/html /home/chroot/$NEWUSER/www none bind 0 0`
-
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)).