OpenSSH algo como 'internal-sftp' pero para SCP?

16

Estoy ejecutando Debian estable y estoy buscando establecer el siguiente entorno para los usuarios de mi grupo 'sftponly':

  • encarcelado
  • puede transferir con SFTP
  • puede transferir con SCP
  • no puede iniciar sesión interactivamente con SSH

De mi experimentación e investigación, parece que la siguiente estrofa en sshd_config me lleva al 90%:

Match group sftponly
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp

Esto me da SFTP encarcelado y no SSH, lo cual es bueno. Pero también deshabilita SCP, que es menos que ideal porque muchos clientes son procesos heredados con secuencias de comandos que usan SCP en lugar de SFTP (el servidor que estamos reemplazando admite ambos protocolos), y dado que esos clientes no están bajo nuestro control y fácilmente modificado, es probable que no sea práctico deshabilitar SCP por completo.

Tiene sentido que esta configuración deshabilite SCP, ya que las conexiones SCP entrantes hacen que sshd genere un proceso 'scp' a través del shell de inicio de sesión del usuario, como ese usuario. Parece que lo mismo sería normalmente cierto para SFTP, si no fuera por el controlador especial 'internal-sftp'.

Entonces, supongo que mi pregunta es: ¿hay alguna manera de lograr el mismo efecto que 'internal-sftp' pero para SCP, sin recurrir al uso de herramientas de terceros como scponly y rssh? Lo realmente bueno de 'internal-sftp' es que no requiere configurar una cárcel con archivos de soporte, o tratar con binarios setuid de terceros potencialmente explotables (rssh, en particular, tiene un historial de exploits).

brianjcohen
fuente
1
¿Los clientes se conectan utilizando un archivo de clave ssh o utilizan contraseñas? Si se trata de un archivo de claves, es posible restringir lo que pueden hacer.
Jenny D
Se están conectando con contraseñas.
brianjcohen

Respuestas:

3

Eche un vistazo a rssh, que es un shell alternativo que permite un acceso limitado a un sistema.

rssh es un shell restringido para proporcionar acceso limitado a un host a través de ssh (1), lo que permite a un usuario cuyo shell está configurado en rssh usar uno o más de los comandos scp (1), sftp (1) cvs (1 ), rdist (1) y rsync (1), y solo esos comandos.

Puede configurar qué comandos se pueden utilizar por usuario o en todo el sistema utilizando el archivo rssh.conf

Alternativamente, puede usar scponly para hacer lo que quiera. Actúa como un contenedor para la suite ssh y permite la transferencia de archivos pero no el acceso de shell.

usuario9517
fuente
2

¿Necesitas hacer esto a través de ssh?

SI es así, puede intentar configurar su shell para:

/usr/libexec/openssh/sftp-server

Y asegúrese de agregar lo anterior en / etc / shells

Si desea desacoplar el uso de cuentas integradas, puede configurar proftpd

Configuré un SFTP seguro usando proftpd. proftpd compilado así:

./configure --prefix = / usr --sysconfdir = / etc --with-modules = mod_sftp

Puede usar este artículo a continuación y un poco más en Google sobre cómo configurarlo:

http://tutorialgenius.blogspot.com/2012/02/linux-installing-and-configuring.html

coderwhiz
fuente
2

Me temo que no hay nada igualmente fácil o confiable con OpenSSH, ya que, como observó, hay un servidor SFTP incorporado, pero no hay un servidor SCP incorporado.

Una advertencia: la sugerencia de Vince Berk es mala por varias razones:

  1. El comportamiento del shell con respecto a los archivos de inicio puede verse influido por las variables de entorno, que SSH puede establecer de forma remota en función de la configuración del servidor.
  2. El usuario puede simplemente ejecutar ssh / bin / bash y obtener un shell. No tendrá un tty y, por lo tanto, será un inconveniente usarlo, pero qué ... sin mencionar todos los otros programas que puede ejecutar que presumiblemente no quieres que haga.
  3. Cambiar los permisos de .bash_profile no sirve de nada si el usuario solo puede hacer "ssh host rm -f .bash_profile"; no se mencionó nada sobre los permisos del directorio de inicio.

... y así. Este tipo de enfoque es demasiado frágil.

Richard E. Silverman
fuente
0

Esta es una herramienta de terceros, que no está dentro del alcance de la pregunta, pero pensé que merece una mención de todos modos.

Jailkit: https://olivier.sessink.nl/jailkit/

Tiene una colección de herramientas para facilitar la configuración de cárceles de usuario: copiar binarios y bibliotecas a la cárcel y configurar el registro desde el interior de la cárcel al sistema operativo. Lo he usado para construir chroots sftp / scp / rsync-only.

También viene con jk_lsh(shell limitado de jailkit) que se puede usar fuera de la cárcel para limitar los comandos que un usuario puede ejecutar, por ejemplo, si desea permitir scp / sftp / rsync solo sin chroot.

chutz
fuente
-1

Aquí hay un truco sobre cómo realizar este lado del servidor. Establezca el shell de los usuarios para, por ejemplo, bash:

usermod -S /bin/bash [username]

Ahora cree en su homedir un '.bash_profile' con la siguiente línea:

[ -n "$PS1" ] && exit

Esto hace que las sesiones no interactivas (como 'scp') continúen. Sin embargo, si intentan un inicio de sesión 'ssh', se llama a la 'salida' y se cierra la conexión.

¡Asegúrese de que no puedan 'sftp' un nuevo '.bash_profile' en sus directorios personales!

chown root:root .bash_profile

¡Espero que ayude!

Vince Berk
fuente
Este enfoque no parece tener en cuenta el requisito de la cárcel.
brianjcohen
Sí, desafortunadamente tendría que crear un entorno chroot manual para el lado 'scp', superponiéndose con el directorio chroot dado en sshd_config, y realizar el truco anterior para cada usuario que desee restringir. El 'scp' no funciona con el servidor sftp interno.
Vince Berk