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.

phunehehe
fuente

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.

gabe
fuente
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.)

Gilles 'SO- deja de ser malvado'
fuente
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.

Shadur
fuente
scponly parece obsoleto, al menos en Ubuntu
tobixen