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.