Coquille Openssh personnalisée

8

L'environnement est Ubuntu Server 12.04

Je voudrais créer un utilisateur sur un serveur qui ne peut que ssh dans un shell qui exécute tail -f sur un fichier journal et ferme la session une fois le programme terminé (ctrl + c).

Existe-t-il un moyen d'y parvenir?

Un bleu
la source

Réponses:

8

Pour être pédant, ce ne sera pas ctrl + c, mais SIGHUP(plus proche de ctrl + d) qui tue l'application.

Vous pouvez mettre essentiellement ce que vous voulez dans le shell de l'utilisateur /etc/passwd. Remplacez simplement la valeur par défaut sur la ligne de mot de passe de l'utilisateur (probablement /bin/bash) par un autre programme. Ce programme peut être un script, tel que /usr/bin/tail_log_file, avec ces contenus, détenu par root: root, avec umode 0755:

#!/bin/rbash
tail -f /path/to/logfile

Vous pouvez utiliser un interpréteur autre que rbash, mais il est conseillé d'utiliser un shell restreint dans de tels cas.

Pour être extrêmement pédant à ce sujet, vous devez ajouter le chemin du script à /etc/shells, mais je trouve généralement que cela fonctionne de toute façon.

Gardez également à l'esprit que l'utilisateur pourrait potentiellement mettre le script en arrière-plan, ou utiliser certaines options ( ssh username@host bash) tout en acquérant un shell. Si vous souhaitez restreindre l'utilisateur de cette manière, de bonnes autorisations de système de fichiers sont la seule vraie solution.

Falcon Momot
la source
fonctionne très bien, merci beaucoup pour votre réponse rapide et précise.
Ablue
2
La seule raison pour laquelle vous voudriez ajouter quelque chose /etc/shellsest de permettre aux utilisateurs qui ont autre chose comme shell de définir leur shell sur ceci; le superutilisateur ( root) peut toujours changer le shell de n'importe qui en ce qu'il veut.
Jonathan Callen du
1
Pour ajouter ce que @JonathanCallen a dit: c'est en fait une fuite de sécurité pour ajouter ce script /etc/shellscar cela permettrait à l'utilisateur de changer son shell (car /usr/bin/tail_log_fileserait alors considéré comme un "shell sans restriction")!
Joachim Sauer
Ok je vais supprimer.
2012
1
C'est beaucoup trop compliqué; les commandes forcées (voir la réponse de @tink) sont le moyen de le faire.
Rétablir Monica - M. Schröder
10

Les commandes forcées ssh vous viennent à l'esprit si vous êtes heureux d'utiliser l'authentification basée sur une paire de clés.

man authorized_keys
/command=
tink
la source
2

Vous pouvez configurer ssh pour exécuter une commande de votre choix lorsque vous vous connectez à l'aide de l'authentification par clé publique. Pour ce faire, générez une paire de clés:

djs@sardinia:~$ ssh-keygen -f restricted-key 
Generating public/private rsa key pair. 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in restricted-key. 
Your public key has been saved in restricted-key.pub. 
The key fingerprint is: b1:8f:26:47:c2:c5:f2:8d:ed:a0:c4:bd:9a:30:9d:08 djs@sardinia 
[...]

restricted-key.pubcontient une ligne appropriée pour mettre dans le ~/.ssh/authorized_keysfichier des utilisateurs :

ssh-rsa AAAA...UDz47Nl djs@sardinia

mais vous pouvez ajouter une commande à cela, et ssh exécutera cette commande lors de la connexion avec la clé:

command="tail -f /my/interesting/file" ssh-rsa AAAA...UDz47Nl djs@sardinia

Ensuite, l'utilisateur peut ssh vers la machine en utilisant ssh -i restricted-key.

Dan
la source