sshfs: chroot todos los usuarios no root a un directorio específico

8

En un servidor, necesito acceso ssh sin restricciones para root y restringido para todos los demás usuarios.

Me gustaría restringir a todos los usuarios no root a:

  • sin inicio de sesión ssh
  • solo permite montar /mnt/data/usandosshfs

Veo sshd_configpermite usar Match User, es decir:

Match User john
  ChrootDirectory /mnt/data/
  ForceCommand internal-sftp
  AllowTCPForwarding no
  X11Forwarding no

pero, ¿cómo puedo hacer coincidir todos los usuarios excepto el root?

Martin Vegter
fuente
Publiqué una respuesta, pero no me queda completamente claro si la parte de "fuentes creíbles y / u oficiales" se refiere a la viabilidad / seguridad general de su solución o a la pregunta específica "cómo hacer coincidir solo la raíz".
fra-san
@ fra-san - No estoy seguro de lo que quieres decir. ¿Implica que si bien esta solución funciona técnicamente, no es segura?
Martin Vegter
No, me preguntaba si estaba buscando algún respaldo de una configuración específica por parte de los autores originales u otras personas autorizadas. En realidad, lo que está haciendo se aconseja en muchas fuentes informadas (el Arch Wiki es un ejemplo).
fra-san

Respuestas:

12

La directiva Match en sshlos archivos de configuración admite la negación. Pero parece que negar condiciones sshd_configes un poco complicado: hay que escribir

Match User="!root,*"

tener directivas posteriores aplicadas a todos los usuarios excepto root.

Aquí está la documentación relevante: de man sshd_config:

Match Introduce un bloque condicional.
...
Los patrones de coincidencia pueden consistir en entradas individuales o listas separadas por comas y pueden usar los comodines y los operadores de negación descritos en la sección PATRONES de ssh_config (5).

Y de man ssh_config:

PATRONES
Un patrón consta de cero o más caracteres que no son espacios en blanco, '*' (un comodín que coincide con cero o más caracteres) o '?' (un comodín que coincide exactamente con un personaje).
...
Tenga en cuenta que una coincidencia negada nunca producirá un resultado positivo por sí mismo.
Por ejemplo, intentar hacer coincidir "host3" con la siguiente lista de patrones fallará:

from="!host1,!host2"

La solución aquí es incluir un término que produzca una coincidencia positiva, como un comodín:

from="!host1,!host2,*"

Sugerencia encontrada en este artículo en Red Hat Customer Portal.

fra-san
fuente