Restringir un usuario SSH / SCP / SFTP a un directory

¿Hay alguna forma simple de restringir un usuario de SCP / SFTP a un directory? Todos los methods con los que me he encontrado me obligan a configurar una cárcel chroot copyndo binarys, pero no creo que sea necesario.

SSH admite el cierre automático de un usuario de SFTP. Solo necesitas suministrar

ChrootDirectory

En su file de configuration sshd, y reinicie sshd.

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

Una configuration de ejemplo, para un solo usuario, testuser:

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

Algunas cosas que debe tener en count, desde la página man de sshd_config:

     Todos los componentes de la ruta de acceso deben ser directorys propiedad de la raíz que no son
     escribible por cualquier otro usuario o grupo.  Después del chroot, sshd (8) cambia el
     directory de trabajo al directory de inicio del usuario.

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

Un chroot es un método razonablemente simple. Como el sistema operativo ya tiene esta característica de security, los escritores de daemon no intentan volver a implementarlo.

Rssh viene con una guía sobre la configuration de una cárcel chroot. Está en el file CHROOT en la distribución fuente. En pocas palabras, debe tener:

  • Algunos binarys copydos 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, igualmente copydas
  • A /etc/passwd (muy posiblemente no una copy sino derivada del maestro)
  • Algunos dispositivos: /dev/null , /dev/tty , y también un socket /dev/log para el logging (y usted necesita decirle a su daemon syslog que escuche en ese socket)

Sugerencia adicional que no está en la documentation de rssh: si necesita que se puedan acceder algunos files en una cárcel chroot, puede usar bindfs o mount de Linux mount --bind para crear jerarquías de directorys adicionales desde el exterior de la cárcel. bindfs permite que el directory remontado tenga permissions más restrictivos, por ejemplo de solo lectura. ( mount --bind no lo hace a less que aplique un parche de kernel; Debian ha incluido este parche ya que en east lenny pero la mayoría de las otras distribuciones no lo han hecho a partir de 2011.)

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