GNU/Linux >> Tutoriels Linux >  >> Linux

Autoriser SCP mais pas la connexion réelle à l'aide de SSH

Solution 1 :

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

Étant donné que RHEL/CentOS 5.2 n'inclut pas de package pour rssh, vous pouvez consulter ici pour obtenir un RPM :http://dag.wieers.com/rpm/packages/rssh/

Pour l'utiliser, définissez-le simplement 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 modifiez /etc/rssh.conf pour configurer le shell rssh - en particulier décommentez allowscp ligne pour activer l'accès SCP pour tous les utilisateurs rssh.

(Vous pouvez également utiliser chroot pour garder les utilisateurs confinés chez eux, mais c'est une autre histoire.)

Solution 2 :

Je suis bien en retard, mais vous pouvez utiliser les 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 test scp 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'extrémité distante. Cela vous donne une idée de ce que vous devez mettre dans les clés autorisées.

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

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

~backup_user/.ssh/authorized_keys contenu 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 pointe vers le répertoire où le contenu doit être accessible.

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

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

scp -v  -r  -P 2222 -i .ssh/id_rsa_key_file path/to/data [email protected]:~/CONTENT

Que fait cette commande :

  • Il affiche des informations détaillées (facultatif :vous pouvez supprimer le -v à partir du fichier command et du fichier authorized_keys)
  • Il copie récursivement le contenu du chemin/vers/données. (facultatif :vous pouvez supprimer -r à partir du fichier command et du fichier authorized_keys si vous ne souhaitez pas faire de 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 script shell qui gère cela comme décrit ici

Solution 3 :

Je suis un peu en retard pour la fête, cependant je vous propose de jeter un œil au ForceCommand directive de OpenSSH.

Subsystem sftp internal-sftp

Match group sftponly
         ForceCommand internal-sftp

Certes, il s'agit de SFTP et non de SCP, mais il atteint le même objectif, de manière plus sécurisée qu'avec un shell restreint. De plus, vous pouvez chrooter l'utilisateur si vous le souhaitez.

Solution 4 :

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

https://github.com/mysecureshell/mysecureshell

Limite les connexions à SFTP/SCP uniquement. Aucun accès au shell.

Solution 5 :

Je recommanderais d'utiliser scponly.

Il s'agit d'un shell restreint qui permet aux utilisateurs de faire exactement ce que cela ressemble, des fichiers SCP sur le serveur, mais pas de se connecter. Les téléchargements d'informations et de code source pour le logiciel sont disponibles ici et les packages RPM précompilés sont disponibles via le Référentiels EPEL YUM.

Une fois installé, vous devrez configurer chaque compte d'utilisateur, auquel 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


Linux
  1. Ssh – Restreindre un utilisateur Ssh/scp/sftp à un répertoire ?

  2. Ssh – Comment accélérer la connexion Ssh trop lente ?

  3. Commande introuvable dans Zsh, mais trouvée dans Bash ?

  4. La commande de mise en veille à l'aide de la commande d'écran ne s'affiche pas dans Ps ?

  5. 10 exemples pratiques d'utilisation de la commande scp

Utilisation de Secure Shell (SSH) pour la connexion et la copie sécurisée (SCP) pour le transfert de données sous Linux

Exécuter une commande à distance sur une connexion Ssh, avant de se connecter ?

faire en sorte que le serveur linux autorise rsync/scp/sftp mais pas une connexion au terminal

`ssh <host>` est un shell de connexion, mais `ssh <host> <command>` ne l'est pas ?

Comment afficher les descripteurs de fichiers ouverts sans utiliser la commande lsof

commande linux trouvée mais introuvable lors de l'utilisation de sudo