OpenSSH quelque chose comme 'internal-sftp' mais pour SCP?

16

J'utilise Debian stable et je cherche à établir l'environnement suivant pour les utilisateurs de mon groupe 'sftponly':

  • emprisonné
  • peut transférer avec SFTP
  • peut transférer avec SCP
  • ne peut pas se connecter de manière interactive avec SSH

D'après mes expérimentations et mes recherches, il semble que la strophe suivante dans sshd_config m'atteigne à 90%:

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

Cela me donne SFTP emprisonné et pas de SSH, ce qui est bien. Mais cela désactive également SCP, ce qui est loin d'être idéal car bon nombre de clients sont des processus scriptés hérités qui utilisent SCP plutôt que SFTP (le serveur que nous remplaçons pris en charge les deux protocoles), et puisque ces clients ne sont pas sous notre contrôle et facilement modifié, il n'est probablement pas pratique de désactiver complètement SCP.

Il est logique que cette configuration désactive SCP, car les connexions SCP entrantes font que sshd génère un processus `scp 'via le shell de connexion de l'utilisateur, en tant que cet utilisateur. Il semble que la même chose serait normalement vraie pour SFTP, sans le gestionnaire spécial «internal-sftp».

Donc, je suppose que ma question est: existe-t-il un moyen d'obtenir le même effet que 'internal-sftp' mais pour SCP, sans recourir à l'utilisation d'outils tiers comme scponly et rssh? Ce qui est vraiment bien avec 'internal-sftp', c'est qu'il ne nécessite pas de mettre en place une prison avec des fichiers de support, ni de traiter des binaires setuid tiers potentiellement exploitables (rssh, en particulier, a un historique d'exploits).

brianjcohen
la source
1
Les clients se connectent-ils à l'aide d'un fichier de clé ssh ou utilisent-ils des mots de passe? S'il s'agit d'un fichier clé, il est possible de restreindre ce qu'ils peuvent faire.
Jenny D
Ils se connectent avec des mots de passe.
brianjcohen

Réponses:

3

Jetez un œil à rssh qui est un shell alternatif qui permet un accès limité à un système.

rssh est un shell restreint pour fournir un accès limité à un hôte via ssh (1), permettant à un utilisateur dont le shell est configuré pour rssh d'utiliser une ou plusieurs des commandes scp (1), sftp (1) cvs (1 ), rdist (1) et rsync (1), et uniquement ces commandes.

Vous pouvez configurer les commandes pouvant être utilisées par utilisateur ou à l'échelle du système à l'aide du fichier rssh.conf

Alternativement, vous pouvez utiliser scponly pour faire ce que vous voulez. Il agit comme un wrapper pour la suite ssh et permet le transfert de fichiers mais pas l'accès au shell.

user9517
la source
2

Avez-vous besoin de le faire via ssh?

SI vous pouvez donc essayer de définir leur shell sur:

/usr/libexec/openssh/sftp-server

Et assurez-vous d'ajouter ce qui précède dans / etc / shells

Si vous souhaitez dissocier l'utilisation des comptes intégrés, vous pouvez configurer proftpd

J'ai installé un SFTP sécurisé en utilisant proftpd. proftpd compilé comme suit:

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

Vous pouvez utiliser cet article ci-dessous, et plus sur Google pour savoir comment le configurer:

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

coderwhiz
la source
2

Je crains qu'il n'y ait rien de similaire ni de facile ni de fiable avec OpenSSH, car comme vous l'avez observé, il y a un serveur SFTP intégré, mais pas de serveur SCP intégré.

Un avertissement: la suggestion de Vince Berk est mauvaise pour plusieurs raisons:

  1. Le comportement du shell en ce qui concerne les fichiers de démarrage peut être influencé par les variables d'environnement, que SSH peut définir à distance en fonction de la configuration du serveur.
  2. L'utilisateur peut simplement exécuter ssh / bin / bash et obtenir un shell. Il n'aura pas de terminal et ne sera donc pas pratique à utiliser, mais alors quoi ... sans parler de tous les autres programmes qu'il peut exécuter que vous ne voulez probablement pas qu'il utilise.
  3. Changer les permissions de .bash_profile ne sert à rien si l'utilisateur peut juste faire "ssh host rm -f .bash_profile"; rien n'a été mentionné sur les autorisations du répertoire personnel.

... etc. Ce type d'approche est tout simplement trop fragile.

Richard E. Silverman
la source
0

Il s'agit d'un outil tiers, qui n'entre pas dans le cadre de la question, mais j'ai pensé qu'il méritait quand même une mention.

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

Il dispose d'une collection d'outils pour faciliter la configuration des prisons utilisateur: copie des fichiers binaires et des bibliothèques dans la prison et configuration de la journalisation de l'intérieur de la prison vers le système d'exploitation. Je l'ai utilisé pour construire des chroots sftp / scp / rsync uniquement.

Il est également livré avec jk_lsh(shell limité jailkit) qui peut être utilisé en dehors de la prison pour limiter les commandes qu'un utilisateur peut exécuter, si par exemple vous voulez autoriser scp / sftp / rsync uniquement sans chroot.

chutz
la source
-1

Voici une astuce sur la façon d'effectuer ce côté serveur. Définissez le shell des utilisateurs, disons, bash:

usermod -S /bin/bash [username]

Créez maintenant dans leur homedir un '.bash_profile' avec la ligne suivante:

[ -n "$PS1" ] && exit

Cela entraîne la poursuite des sessions non interactives (comme «scp»). Cependant, s'ils tentent une connexion «ssh», la «sortie» est appelée et la connexion est fermée.

Assurez-vous qu'ils ne peuvent pas «sftp» un nouveau «.bash_profile» dans leurs répertoires personnels!

chown root:root .bash_profile

J'espère que cela pourra aider!

Vince Berk
la source
Cette approche ne semble pas tenir compte de l'exigence de la prison.
brianjcohen
Oui, malheureusement, vous devrez créer un environnement chroot manuel pour le côté «scp», chevauchant le répertoire chroot donné dans sshd_config, et effectuer l'astuce ci-dessus pour chaque utilisateur que vous souhaitez restreindre. Le «scp» ne fonctionne pas avec le serveur sftp interne.
Vince Berk