Restricción de un usuario SSH / SCP / SFTP a un directorio


36

¿Hay una manera simple de restringir un usuario SCP / SFTP a un directorio? Todos los métodos que he encontrado requieren que establezca una cárcel chroot copiando binarios, pero no creo que sea necesario.

Respuestas:


29

SSH admite el encriptado de un usuario SFTP de forma nativa. Solo necesitas suministrar

ChrootDirectory

En su archivo de configuración sshd, y reinicie sshd.

Si solo estás haciendo sftp, entonces no tienes que hacer nada más. Desafortunadamente, esto no funciona para scp. Para el shell interactivo, deberá copiar los binarios y los nodos / dev en el chroot.

Un ejemplo de configuración, para un solo usuario, testuser:

Match User testuser
    ChrootDirectory /home/testuser
    ForceCommand internal-sftp

Algunas cosas a tener en cuenta, desde la página de manual de sshd_config:

    Todos los componentes del nombre de ruta deben ser directorios propiedad de root que no sean
    escribible por cualquier otro usuario o grupo. Después del chroot, sshd (8) cambia el
    directorio de trabajo al directorio de inicio del usuario.

Busque ChrootDirectory en man sshd_config para obtener más información.


2
Tenga en cuenta que la parte que comienza con "Match user testuser" debe estar al final del archivo, ya que incluirá líneas de configuración solo si el usuario es "testuser" a partir de ese momento.
— Magnus

1
¿También es posible hacer Chroot solo para el Protocolo SFTP, pero aún permitir conexiones SCP normales?
— lanoxx

1
14.04 en mi máquina de Ubuntu, también era necesario cambiar la Subsystem sftp /usr/lib/openssh/sftp-serverlínea aSubsystem sftp internal-sftp -f AUTH -l VERBOSE
— partofthething

@Magnus o hasta otra Matchsección.
— roaima

12

Un chroot es un método razonablemente simple. Dado que el sistema operativo ya tiene esta característica de seguridad, los escritores de demonios tienden a no intentar volver a implementarla.

Rssh viene con una guía sobre cómo configurar una cárcel chroot. Está en el CHROOTarchivo en la distribución de origen. En pocas palabras, debe tener:

  • Unos binarios, copiados de la raíz: /usr/bin/scp, /usr/libexec/openssh/sftp-server,/usr/bin/rssh_chroot_helper
  • Las bibliotecas ( {/usr,}/lib/lib*.so.[0-9]) que usan, también copiadas
  • A /etc/passwd(posiblemente no sea una copia sino que se derive del maestro)
  • Unos dispositivos: /dev/null, /dev/tty, y también una /dev/logtoma para la explotación forestal (y tiene que informar a su demonio syslog para escuchar en ese socket)

Consejo adicional que no está en la documentación de rssh: si necesita que algunos archivos sean accesibles en una cárcel chroot, puede usar bindfs o Linux mount --bindpara crear jerarquías de directorios adicionales desde fuera de la cárcel. bindfspermite que el directorio remontado tenga permisos más restrictivos, por ejemplo, solo lectura. ( mount --bindno a menos que aplique un parche del núcleo; Debian ha incluido este parche desde East Lenny, pero la mayoría de las otras distribuciones no lo han hecho a partir de 2011.)


7

Es posible que desee mirar scponly (o más recientemente, rssh ); Es esencialmente un shell de inicio de sesión que solo se puede utilizar para iniciar scp o el subsistema sftpd. En la scponlycvariante realiza un chroot antes de activar el subsistema en cuestión.


scponly parece obsoleto, al menos en Ubuntu
— tobixen
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.