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