81 votes

Autoriser SCP mais pas la connexion réelle en utilisant SSH

Existe-t-il un moyen de configurer un utilisateur sur une machine Linux (Centos 5.2 dans ce cas) afin qu'il puisse utiliser scp pour récupérer des fichiers, mais qu'il ne puisse pas se connecter au serveur en utilisant SSH ?

49voto

Anonymous Points 1545

DÉCRYPTÉ : Veuillez noter que la réponse suivante est périmée. rssh n'est plus maintenu et n'est plus une méthode sécurisée.

rssh Shell ( http://pizzashack.org/rssh/ ) est conçu précisément dans ce but.

Comme RHEL/CentOS 5.2 n'inclut pas de paquetage pour rssh, vous pouvez chercher ici pour obtenir un RPM : http://dag.wieers.com/rpm/packages/rssh/

Pour l'utiliser, il suffit de le définir comme un Shell pour un nouvel utilisateur comme ceci :

useradd -m -d /home/scpuser1 -s /usr/bin/rssh scpuser1
passwd scpuser1

..ou changer le Shell pour un existant comme ceci :

chsh -s /usr/bin/rssh scpuser1

..et modifier /etc/rssh.conf pour configurer rssh Shell - surtout décommenter allowscp pour activer l'accès SCP pour tous les utilisateurs de rssh.

(Vous pouvez également vouloir utiliser chroot pour que les utilisateurs restent confinés dans leurs maisons, mais c'est une autre histoire).

45voto

Je suis très en retard sur ce sujet mais vous pourriez utiliser des clés ssh et spécifier la commande exacte autorisée dans leur fichier ~/.ssh/authorized_keys par exemple.

no-port-forwarding,no-pty,command="scp source target" ssh-dss ...

Vous devrez peut-être utiliser ps to sur la cible pour définir les bons paramètres de commande.

PS : Si vous exécutez une commande scp de test avec "-v" vous pouvez voir quelque chose comme ceci

debug1: Sending command: scp -v -t myfile.txt

Vous remarquerez que "-t" est une option scp non documentée, utilisée par le programme à l'autre bout. Cela vous donne une idée de ce que vous devez mettre dans authorized_keys.

EDIT : Vous pouvez trouver plus d'informations (avec plusieurs liens) dans cette question de StackOverflow .

Voici un exemple concret, pour un utilisateur nommé backup_user du côté du serveur.

~backup_user/.ssh/authorized_keys le contenu du côté serveur (avec quelques restrictions de sécurité supplémentaires) :

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="scp -v -r -d -t ~/CONTENT" ssh-rsa AAAAMYRSAKEY...

Créez un lien dans ~backup_user/ qui renvoie au répertoire où le contenu doit être accessible.

$ ln -s /path/to/directory/with/accessible/content ~backup_user/CONTENT

Maintenant, du côté client, la commande suivante devrait fonctionner :

scp -v  -r  -P 2222 -i .ssh/id_rsa_key_file path/to/data backup_user@SERVER:~/CONTENT

Ce que fait cette commande :

  • Il affiche des informations verbeuses ( optionnel : vous pouvez retirer le -v de la commande et du fichier authorized_keys)
  • Il copie récursivement le contenu du chemin/vers/données. ( optionnel : vous pouvez supprimer -r de la commande et du fichier authorized_keys si vous ne voulez pas faire une copie récursive)
  • Il utilise le port 2222 pour se connecter au serveur ( optionnel : vous pouvez supprimer -P 2222 de la commande)
  • Il utilise un fichier d'identité pour automatiser la connexion ( optionnel : vous pouvez supprimer -i .ssh/id_rsa_key_file
  • Le contenu de path/to/data sera copié dans /path/to/directory/with/accessible/content/

Pour faire une copie d'un fichier (ou plusieurs) du serveur vers le client, vous devez créer un Shell Shell qui s'occupe de cela. comme décrit ici

38voto

François Feugeas Points 1393

J'arrive un peu tard dans la soirée, mais je vous suggère de jeter un coup d'oeil au ForceCommand d'OpenSSH.

Subsystem sftp internal-sftp

Match group sftponly
         ForceCommand internal-sftp

Certes, il s'agit de SFTP et non de SCP, mais cela permet d'atteindre le même objectif, de manière plus sûre qu'avec un Shell restreint. En outre, vous pouvez chrooter l'utilisateur si vous le souhaitez.

9voto

chrismear Points 591

J'utilise MySecureShell pour ce faire. Vous pouvez également configurer d'autres restrictions.

https://github.com/mysecureshell/mysecureshell

Limite les connexions à SFTP/SCP uniquement. Pas d'accès à Shell.

8voto

Joshua Saayman Points 91

Je vous recommande d'utiliser scponly.

Il s'agit d'un Shell restreint qui permet aux utilisateurs de faire exactement ce qu'il semble être, des fichiers SCP vers le serveur, mais sans se connecter. Des informations et des téléchargements de code source pour le logiciel sont disponibles aquí et les paquets RPM précompilés sont disponibles via la page Dépôts YUM d'EPEL .

Une fois installé, vous devrez configurer chaque compte utilisateur, dont vous souhaitez restreindre l'accès, pour utiliser le Shell restreint nouvellement installé. Vous pouvez le faire manuellement via /etc/passwd ou utiliser la commande suivante : usermod -s /usr/bin/scponly USERNAME

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X