Je voudrais créer un utilisateur qui ne peut faire qu'une seule chose: via ssh, spécifiez un script (et des arguments de ligne de commande pour le script) qui réside dans un dossier particulier (pour les besoins de cette question, appelons-le /local/remote_only_scripts/foo
) et faire exécuter ce script et retourner sa sortie.
Pour être clair, quelques exemples de choses que je ne veux pas que l'utilisateur puisse faire:
- Connectez-vous localement au compte. L'application de connexion est
/bin/login
. Ce n'est pas un script dans le/local/remote_only_scripts/foo
dossier, il ne doit donc pas être appelé par l'utilisateur. - Connectez-vous à distance au compte. Encore une fois, la connexion (est-ce ce que ssh appelle?) N'est pas un script dans le dossier correspondant.
- Liste le contenu du répertoire. ls est dedans
/bin/ls
. Ce n'est pas un script dans le répertoire approprié. - Modifiez un fichier dans ce répertoire. emacs, vi, gedit la plupart des autres éditeurs ne sont pas des scripts dans ce répertoire.
- Affichez le contenu d'un fichier dans ce répertoire.
- Exécutez un fichier dans ce répertoire qu'il n'est pas autorisé à exécuter.
Notez que ce sont des exemples, il y a beaucoup d'autres actions que je ne veux pas que l'utilisateur puisse faire. Lorsque vous envisagez une action, demandez "est-ce que cela se fait par un script en /local/remote_only_scripts/foo
?" si la réponse est non, l'utilisateur ne devrait pas pouvoir le faire. Si la réponse est oui, l'utilisateur devrait pouvoir le faire.
PS: Permettez-moi de clarifier ce que je veux dire par "ajouter un utilisateur". Je ne veux pas dire ajouter un utilisateur à un sous-système ssh. Je veux plutôt dire ajouter un utilisateur au système informatique. Ainsi, par exemple, j'ai un système exécutant Debian stable, appelez-le par son adresse, www.hg.bar.com. Je veux ajouter un utilisateur (via kuser, users-admin ou useradd ou d'une manière similaire) l'appeler hg_guest. hg_guest ne peut pas se connecter localement ou faire l'une des choses dans la liste ci-dessus. Tout ce que hg_guest peut faire est d'exécuter des scripts "à distance". J'ai dit qu'il devrait pouvoir le faire via ssh, mais en y réfléchissant maintenant, peut-être que lui permettre d'utiliser ssh peut lui permettre de se connecter localement, donc un autre mécanisme peut être nécessaire.
la source
command=
, les optionsno-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
sont nécessaires pour vraiment restreindre le compte.Essayez ceci comme shell de connexion pour l'utilisateur:
Vous voudrez probablement aussi avoir ceci dans le
authorized_keys
fichier explicitement comme dans la réponse de Coren; mais remplacez le '... / foo; avec le programme ici. Cela permettra d' éviter les commandes de SSH commesftp
,scp
etssh hostname command
.la source
Dans le cas contraire, ils n'ont besoin d'accéder qu'à un script, cela fonctionne très bien pour moi. Ajoutez l'utilisateur et modifiez son shell par défaut sur le chemin du script. Lorsqu'ils se connectent via ssh, il exécutera le script et fermera leur session.
server1:/ # useradd -s "/local/remote_only_scripts/foo/script.sh" hg_guest
server1:/ # grep hg_guest /etc/passwd
hg_guest: x: 2002: 100 :: / home / hg_guest: /local/remote_only_scripts/foo/script.sh
la source