OpenSSH: diferencia entre internal-sftp y sftp-server

81

¿Por qué hay dos formas de configurar SFTP con OpenSSH y cuándo usar cuál? ¿Hay alguna diferencia entre ellos?

Quiero decir que el primero está usando una lib de OpenSSH y el segundo dice "use the internal", ¿entonces también es OpenSSH?

Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Denny Crane
fuente

Respuestas:

94

Ambos sftp-servery internal-sftpson parte de OpenSSH. sftp-serveres un binario independiente internal-sftpes solo una palabra clave de configuración que le indica sshdque use el código del servidor SFTP incorporado, en sshdlugar de ejecutar otro proceso (generalmente el sftp-server).


Desde el punto de vista funcional, sftp-servery internal-sftpson casi idénticos. Se crean a partir del mismo código fuente.

La principal ventaja de internal-sftpes que no requiere archivos de soporte cuando se usa con la ChrootDirectorydirectiva .

Citas de la sshd_config(5)página del manual :

  • Por Subsystemdirectiva :

    El comando sftp-serverimplementa el subsistema de transferencia de archivos SFTP.

    Alternativamente, el nombre internal-sftpimplementa un servidor SFTP en proceso. Esto puede simplificar las configuraciones utilizando ChrootDirectorypara forzar una raíz del sistema de archivos diferente en los clientes.

  • Por ForceCommanddirectiva :

    Especificar un comando de internal-sftpforzará el uso de un servidor SFTP en proceso que no requiere archivos de soporte cuando se usa con ChrootDirectory.

  • Por ChrootDirectorydirectiva :

    El ChrootDirectorydebe contener los archivos y directorios necesarios para admitir la sesión del usuario. Para una sesión interactiva esto requiere al menos una concha, típicamente sh, y básicos /devnodos tales como null, zero, stdin, stdout, stderr, y ttydispositivos. Para las sesiones de transferencia de archivos que usan SFTP, no es necesaria una configuración adicional del entorno si se usa el servidor sftp en proceso, aunque las sesiones que usan el registro pueden requerir /dev/logdentro del directorio chroot en algunos sistemas operativos (ver sftp-serverpara más detalles).

Otra ventaja de internal-sftpes un rendimiento, ya que no es necesario ejecutar un nuevo subproceso para él.


Se internal-sftpagregó mucho más tarde (OpenSSH 4.9p1 en 2008?) Que el sftp-serverbinario independiente , pero por ahora es el predeterminado.

Creo que no hay razón para usarlo sftp-serverpara nuevas instalaciones.


Puede parecer que sshdpodría usarse automáticamente internal-sftp, cuando se encuentra sftp-server, ya que la funcionalidad es idéntica e internal-sftpincluso tiene las ventajas anteriores. Pero hay casos extremos, donde hay diferencias.

Pocos ejemplos:

  • El administrador puede confiar en una configuración de shell de inicio de sesión para evitar que ciertos usuarios inicien sesión. Cambiar a el internal-sftpevitaría la restricción, ya que el shell de inicio de sesión ya no está involucrado.

  • Usando sftp-serverbinario (siendo un proceso independiente) puede usar algunos hacks, como ejecutar el SFTP bajosudo .

  • Para SSH-1 (si alguien todavía lo está usando), la Subsystemdirectiva no está involucrada en absoluto. Un cliente SFTP que usa SSH-1 le dice explícitamente al servidor qué binario debe ejecutar el servidor. Entonces, los clientes SFTP SSH-1 heredados tienen un sftp-servernombre codificado.

Martin Prikryl
fuente
6

Puede bloquear una clave_autorizada en el servidor sftp externo.

comando = "/ usr / libexec / openssh / sftp-server" ssh-rsa AAAA ... == [email protected]

Cuando lo hace, su usuario puede sftp, pero no puede scp o ssh:

$ sftp host: / etc / group / tmp
Conectando al host ...
Obteniendo / etc / group a / tmp / group
/ etc / group 100% 870 0.9KB / s 00:00

Intentar hacer cualquier otra cosa simplemente se bloqueará:

$ scp host: / etc / group / tmp
Asesinado por la señal 2.

$ ssh tiempo de actividad del host
Asesinado por la señal 2.

Por desgracia, no hay una manera fácil de bloquear una clave en un chroot a menos que se modifique sshd_config. Esto sería realmente genial para un usuario poder hacerlo sin la intervención del administrador del sistema.

Charles Fisher
fuente
3
ForceCommand internal-sftpdebería lograr lo mismo
ptman
Lo más práctico es que sin chroot puedes usar sshfs host:/home/user/.ssh ~/hackmepara editar todas esas configuraciones para abrir el acceso si cambias de opinión más adelante.
sh1