Comment restreindre le transfert de port ssh sans le refuser?

5

Supposons que j'ai créé un compte dont le shell de connexion est en réalité un script qui n'autorise pas une connexion interactive et ne permet qu'un ensemble de commandes très limité et spécifique à exécuter à distance.

Néanmoins, sshpermet à l'utilisateur de ce compte de transférer des ports, ce qui est un trou.

Le problème, c’est que je souhaite réellement que ce compte configure une configuration de transfert de port spécifique lorsque la sshsession est établie. Mais il doit être impossible de configurer le transfert de port arbitraire.

(Il s'agit d'une solution acceptable si la configuration de redirection de port autorisée est établie de manière inconditionnelle dans le cadre de chaque session.)

Kaz
la source
Si personne ne se présente dans quelques jours, j'accepterai ma propre réponse. Et peut-être travailler dessus.
Kaz
Si vous le laissez non accepté / ouvert pendant un certain temps, vous ne recevrez qu'un peu plus d'attention. Certaines personnes aiment passer le week-end ailleurs que SO :)
Sampo Sarrala
Ma réponse initiale était un correctif proposé, mais les fonctionnalités existantes d'OpenSSH font l'affaire.
Kaz
Oups, cela appartient à serverfault, n'est-ce pas! Il est facile d'oublier que "superutilisateur" ne signifie pas ici "root" ou "sysadmin".
Kaz

Réponses:

7

En fait, OpenSSH a une fonctionnalité pour cela, pour limiter le -Lstyle ouvert du côté serveur. La fonctionnalité est disponible de deux manières.

  1. Le fichier de configuration du serveur contient une PermitOpenoption. Cette option peut être utilisée pour spécifier des hôtes et des ports pour lesquels des transferts peuvent être établis. Cette option peut être utilisée à l'intérieur d'un Matchbloc. Elle peut donc être restreinte par utilisateur, groupe, nom d'hôte ou modèle d'adresse IP.

  2. Dans un authorized_keysfichier, des options peuvent être associées à une clé particulière. Il existe une permitopenoption qui fonctionne de manière similaire à celle de server-config.

Notes / Limitations:

  • L'option AllowTcpForwardingdésactive tous les transferts dans les deux sens, empêchant ainsi les ports d'écoute d'être configurés sur le serveur, ainsi que les transferts actifs.

  • Il n'y a pas de PermitOpencontrôle d'accès pour les -Rconnexions de style. C'est probablement d'accord. Cela signifie que les utilisateurs peuvent utiliser sshpour ouvrir divers ports non privilégiés pour l'écoute sur le serveur. Le problème du client est l'endroit où ils se connectent de l'autre côté de la connexion SSH. Si nous limitons le transfert dans la -Ldirection, l'utilisateur n'a aucun moyen d'utiliser ces -Rports (du moins pas via ssh, s'il ne peut pas créer une session interactive arbitraire).

  • Il ne semble pas y avoir de moyen de créer une liste vide d’ouvertures autorisées pour empêcher les utilisateurs d’établir des -Lconnexions de styles. Toutefois, une solution de contournement consiste à utiliser un nom d'hôte inoffensif, inexistant ou impossible, tel que la chaîne vide. Concrètement, permitopen=":1234"fait le tour.

Kaz
la source
Puisque je peux vivre sans contrôle d’accès fin -R, cela fonctionne pour moi.
Kaz
0

Il ne semble pas y avoir de moyen de créer une liste vide d’ouvertures autorisées, afin d’empêcher les utilisateurs d’établir des connexions de style -L. Toutefois, une solution de contournement consiste à utiliser un nom d'hôte inoffensif, inexistant ou impossible, tel que la chaîne vide. Concrètement, permitopen = ": 1234" fait l'affaire.

Un argument de «tout» peut être utilisé pour supprimer toutes les restrictions et permettre toute demande de transfert. Un argument de «aucun» peut être utilisé pour interdire toutes les demandes de transfert. Par défaut, toutes les demandes de transfert de port sont autorisées.

Shkrid
la source