Forum Linux.général compte utilisateur
bonjour a tous,
question a 2 balles. est il possible de n'autoriser a un user que d'utiliser certainne commande et seulement ces commandes. pour etre plus precis je voudrais que ce user n'ai le droit que de lancer un script et rien d'autre. pas de mkdir, pas de ls enfin juste lancer le script.
est ce possible ? si oui comment proceder ?
# Avec su
Posté par Obsidian . Évalué à 4.
Si non, tu mets soit un setuid bit sur l'exécutable si c'en est un, soit tu passes par su si c'est vraiment un script.
Si oui, tu définis le script ou l'exécutable comme shell de l'utilisateur. Il sera automatiquement exécuté à la connexion à l'exclusion de tout le reste et la session se referma avec lui.
# Avec ssh
Posté par lom (site web personnel) . Évalué à 0.
Avec ssh, tu peux forcer le shell d'un utilisateur a la connexion. Par consequent, si au lieu de forcer un shell standard, tu donnes le chemin de ton script a la place et ferme la connexion, seul ce script sera execute.
Maintenant a toi de retrouver comment faire, moi je ne sais pas :o)
[^] # Re: Avec ssh
Posté par LaBienPensanceMaTuer . Évalué à 0.
Avec ssh, tu peux forcer le shell d'un utilisateur a la connexion.
Aucune trace de ça dans le man 5 sshd_config.
Le seul truc qui pourrait s'approcher de ce que tu décris serait de
forcer la variable d'environnement SHELL (voir AcceptEnv dans man 5 sshd_config), mais :
1/ je suis pas sur que ça outrepasse vraiment le shell par défaut de l'utilisateur.
2/ Ce serait plus à l'initiative de l'utilisateur qui se connecte, et faire confiance à l'utilisateur c'est aller dans le mur :)
Par contre, changer le shell de l'utilisateur se fait très bien à coup de chsh en tant que root.
Donc à priori tu peux très bien faire:
chsh -s <chemin du script> <user>
Toutefois cette modification sera globale au système, et non juste pour les connexions ssh.
[^] # Re: Avec ssh
Posté par lom (site web personnel) . Évalué à 2.
man sshd, section LOGIN PROCESS
=> ssh execute le fichier ~/.ssh/rc s'il existe. Il suffit donc de mettre dans ce fichier:
/path/vers/le/script/kivabien
exit
et zouplaboum, la connexion se fermera apres execution du script
C'est vrai que je me suis plante, ce n'est pas le shell par defaut qui est change...
[^] # Re: Avec ssh
Posté par LaBienPensanceMaTuer . Évalué à 2.
et zouplaboum, la connexion se fermera apres execution du script
C'est vrai que je me suis plante, ce n'est pas le shell par defaut qui est change...
Ok, j'ai matté la page de man en question, par contre je suis pas sur que le comportement que tu décris soit bon.
En effet, je lis:
7. Changes to user's home directory.
8. If ~/.ssh/rc exists, runs it; else if /etc/ssh/sshrc exists,
runs it; otherwise runs xauth. The ``rc'' files are given the
X11 authentication protocol and cookie in standard input.
9. Runs user's shell or command.
Je vois plus le point 8. comme une étape intermédiaire te permettant d'éxecuter des actions avant de lancer le shell.
Le lancement du shell ne semble pas avoir pour condition la (non) execution du script.
Donc, à mon avis, dans ton exemple, le shell de l'utilisateur sera lancé après le script.
On doit toujours pouvoir gruger en mettant /bin/true comme shell à l'utilisateur.
Après, j'pense que pour être sur il faudrait tester et j'avoue avoir la flemme :)
[^] # Re: Avec ssh
Posté par lom (site web personnel) . Évalué à 2.
Donc avec un ~/.ssh/rc contenant
fortune
exit
et en me logant via ssh, j'ai bien une jolie fortune et la connexion ferme aussitot. Ca permet donc de ne pas changer le shell par defaut.
[^] # Re: Avec ssh
Posté par Étienne . Évalué à 2.
Par contre je pense qu'en mettant comme shell /bin/false (ou /sbin/nologin sur certaines distributions), tu va exécuter le script rc puis un shell qui quitte tout de suite.
Etienne
[^] # Re: Avec ssh
Posté par lom (site web personnel) . Évalué à 2.
La connexion ssh s'arrete, alors que je peux me connecter sans souci (ie sans changer le shell par defaut) en dehors de ssh.
Apres, je suis peut etre dans un cas special, mais j'en doute.
[^] # Re: Avec ssh
Posté par LaBienPensanceMaTuer . Évalué à 1.
[binarym@gco]:~% echo "uname -a\nexit\n" > .ssh/rc
[binarym@gco]:~% ssh localhost
binarym@localhost's password:
Linux gco 2.6.18-5-amd64 #1 SMP Sat Dec 22 20:43:59 UTC 2007 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Mar 27 12:31:21 2008 from localhost
Linux gco 2.6.18-5-amd64 #1 SMP Sat Dec 22 20:43:59 UTC 2007 x86_64 GNU/Linux
[binarym@gco]:~% exit
Connection to localhost closed.
[^] # Re: Avec ssh
Posté par syntaxerror . Évalué à 1.
/authorized
à condition que l'utilisateur s'authentifie par clef, on peut forcer la commande à exécuter dans ~/.ssh/authorized_keys
(exemple d'utilisation, uucp sur ssh)
# Shell restrictif
Posté par LaBienPensanceMaTuer . Évalué à 5.
Ca doit pouvoir se faire à coup de selinux et consors, mais c'est certainement bien compliqué pour peu de chose.
La solution vers laquelle je m'orienterai pour ma part serait un shell restrictif qui autorise ou non l'execution des commandes en question.
Ca se code très bien en shell.
Exemple:
[binarym@gco]:~% grep test /etc/passwd 15:18
test:x:1001:1001::/home/test:/tmp/rshell.sh
[binarym@gco]:~% cat /tmp/rshell.sh
#!/bin/sh
do_exit=0
while (( ! $do_exit)) ; do
echo "exit or uname ?"
read cmd;
if [ "$cmd" != "exit" ] && [ "$cmd" != "uname" ] ; then
echo "$cmd not allowed";
elif [ "$cmd" == "exit" ] ; then
do_exit=1;
else
uname;
fi;
done
[binarym@gco]:~% su - test
Password:
Pas de répertoire, connexion avec HOME=/
exit or uname ?
uname
Linux
exit or uname ?
ls
ls not allowed
exit or uname ?
uname -a
uname -a not allowed
exit or uname ?
uname | ls
uname | ls not allowed
exit or uname ?
exit
Voilà.
[^] # rbash
Posté par daggett . Évalué à 2.
C'est un vrai bash complet, mais qui interdit plein de choses en mode interactif (mais pas en mode script). Entre autres, de changer de répertoire, et de lancer des programmes avec un chemin explicite.
Si le bashrc positionne des PATH et des alias qui vont bien, alors normalement il ne laissera à l'utilisateur que le choix de lancer les applis que tu prédéfinis.
Après il suffit de mettre rbash au lieu de bash comme shell par défaut de ce compte.
[^] # Re: rbash
Posté par LaBienPensanceMaTuer . Évalué à 1.
# sans ssh, sans shell special...
Posté par NeoX . Évalué à 2.
n'est plus /bin/bash (/bin/sh, /bin/zsh...)
mais /usr/local/bin/ton_programme
l'utilisateur se log en ssh/telnet => ca lance le programme
l'utilisateur ouvre un terminal => ca lance le programme (enfin je crois)
pour que ce programme se lance automatique avec quand cet utilisateur se log avec X, il me semble que ca se joue dans le .Xsession
si c'est pour faire un programme qui se lance uniquement en tant qu'un utilisateur (un daemon/service/serveur) alors le SUID doit etre la solution.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.