sshfs: chrooter tous les utilisateurs non root dans un répertoire spécifique

8

Sur un serveur, j'ai besoin d'un accès ssh illimité pour root et restreint pour tous les autres utilisateurs.

Je voudrais limiter tous les utilisateurs non root à:

  • pas de connexion ssh
  • autoriser uniquement le montage à l' /mnt/data/aidesshfs

Je vois sshd_configpermet d'utiliser Match User, à savoir:

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

mais comment puis-je faire correspondre tous les utilisateurs sauf root?

Martin Vegter
la source
J'ai posté une réponse, mais je ne sais pas très bien si la partie "sources crédibles et / ou officielles" se réfère à la faisabilité / sécurité générale de votre solution ou à la question spécifique "comment faire correspondre root uniquement".
fra-san
@ fra-san - Je ne sais pas ce que tu veux dire. Impliquez-vous que, bien que cette solution fonctionne techniquement, elle n'est pas sécurisée?
Martin Vegter
Non, je me demandais simplement si vous recherchiez une approbation d'une configuration spécifique par les auteurs originaux ou d'autres personnes faisant autorité. En fait, ce que vous faites est conseillé dans de nombreuses sources bien informées (l' Arch Wiki en est un exemple).
fra-san

Réponses:

12

La directive Match dans sshles fichiers de configuration de prend en charge la négation. Mais il semble que la négation des conditions sshd_configsoit un peu délicate: il faut écrire

Match User="!root,*"

d'avoir des directives ultérieures appliquées à tous les utilisateurs sauf root.

Voici la documentation pertinente: de man sshd_config:

Match Introduit un bloc conditionnel.
...
Les modèles de correspondance peuvent consister en des entrées uniques ou des listes séparées par des virgules et peuvent utiliser les opérateurs génériques et de négation décrits dans la section PATTERNS de ssh_config (5).

Et de man ssh_config:

MOTIFS
Un motif se compose de zéro ou plusieurs caractères non blancs, '*' (un caractère générique qui correspond à zéro ou plusieurs caractères) ou '?' (un caractère générique qui correspond exactement à un caractère).
...
Notez qu'une correspondance annulée ne produira jamais un résultat positif en soi.
Par exemple, la tentative de mise en correspondance de "host3" avec la liste de modèles suivante échouera:

from="!host1,!host2"

La solution ici consiste à inclure un terme qui donnera une correspondance positive, tel qu'un caractère générique:

from="!host1,!host2,*"

Astuce trouvée dans cet article sur le portail client Red Hat.

fra-san
la source