OVH Cloud OVH Cloud

Empecher le Ctrl-c dans un shell

7 réponses
Avatar
Bulot Grégory
Bonjour,=20


je suis en train de pr=E9parer un shell d'administration simplifier (1 =3D =
check=20
mail, 2=3Drelance apache, 3=3Drelance serveur)

donc en shell (bash) j'ai un boucle 'read $Reponse' malheureusement on peut=
=20
faire ctrl-C, dans ce cas l'utilisateur =E0 acc=E8s au prompt et peu taper =
les=20
commandes qu'il souhaite (rm -fR / .....) et evidement je ne le souhaite pa=
s,=20
je voudrais savoir s'il est possible de n'autoriser que des choix que=20
j'aurais d=E9finis (emp=E9cher les ctrl c dans un premier temps sera d=E9j=
=E0 pas=20
mal)


actuellement apr=E8s avoir saisi le login admin / pass admin, dans le .bash=
rc je=20
lance un script shell qui lui propose les choix

Merci

7 réponses

Avatar
Max
Le 17/08/06, Bulot Grégory :

donc en shell (bash) j'ai un boucle 'read $Reponse' malheureusement on pe ut
faire ctrl-C, dans ce cas l'utilisateur à accès au prompt et peu tape r les
commandes qu'il souhaite (rm -fR / .....) et evidement je ne le souhaite pas,
je voudrais savoir s'il est possible de n'autoriser que des choix que
j'aurais définis (empécher les ctrl c dans un premier temps sera dé jà pas
mal)



trap (help trap)
par exemple pour neutraliser ctrl-c : trap '' 2

--
Max
Avatar
Jean-Michel Schelcher
On 17/08 19:14, Bulot Grégory wrote :

Bonjour,


je suis en train de préparer un shell d'administration simplifier (1 = check
mail, 2=relance apache, 3=relance serveur)

donc en shell (bash) j'ai un boucle 'read $Reponse' malheureusement on pe ut
faire ctrl-C, dans ce cas l'utilisateur à accès au prompt et peu tape r les
commandes qu'il souhaite (rm -fR / .....) et evidement je ne le souhaite pas,
je voudrais savoir s'il est possible de n'autoriser que des choix que
j'aurais définis (empécher les ctrl c dans un premier temps sera dé jà pas
mal)


actuellement après avoir saisi le login admin / pass admin, dans le .ba shrc je
lance un script shell qui lui propose les choix

Merci



Je crois que tu as tout ce qu'il faut ici:
http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html

En gros, tu initialises au début du script (bash par contre) un "piège"
aux signaux SIG (comme ctrl-C ou ctrl-Z).

Pour la liste des signaux capturables: man kill

Pour le menu, je te conseille la commande dialog.

Et pour limiter les commandes, c'est sudo qu'il te faut. Avec tout ça,
ton script sera asser blindé.

Cordialement,

jms
Avatar
Bulot Grégory
Le jeudi 17 août 2006 20:11, Max a écrit :
trap '' 2



pile poil ! merci
Avatar
Bulot Grégory
Le jeudi 17 août 2006 20:18, Jean-Michel Schelcher a écrit :
On 17/08 19:14, Bulot Grégory wrote :
> Bonjour,
>
>
> je suis en train de préparer un shell d'administration simplifier (1 =
> check mail, 2=relance apache, 3=relance serveur)
>
> donc en shell (bash) j'ai un boucle 'read $Reponse' malheureusement on
> peut faire ctrl-C, dans ce cas l'utilisateur à accès au prompt et p eu
> taper les commandes qu'il souhaite (rm -fR / .....) et evidement je ne le
> souhaite pas, je voudrais savoir s'il est possible de n'autoriser que d es
> choix que j'aurais définis (empécher les ctrl c dans un premier tem ps
> sera déjà pas mal)
>
>
> actuellement après avoir saisi le login admin / pass admin, dans le
> .bashrc je lance un script shell qui lui propose les choix
>
> Merci

Je crois que tu as tout ce qu'il faut ici:
http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html

En gros, tu initialises au début du script (bash par contre) un "pièg e"
aux signaux SIG (comme ctrl-C ou ctrl-Z).

Pour la liste des signaux capturables: man kill



même style de réponse que 'Max' cela doit être la bonne réponse ;-)

la page précédante du lien ci-dessus est pas mal non plus ;-)
http://www.tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_01.html


Pour le menu, je te conseille la commande dialog.


je fais plus simple (à mon goût ...)
echo -n "blabla

MENU ADMINISTRATION SYSTEME


1 : 1er choix , blabla : A
2 : 2iem choix , blabla : B

9 : quitter menu administration : q


choix sur $NomMachine: "
trap '' 2
read rep
case $rep in ....



Et pour limiter les commandes, c'est sudo qu'il te faut. Avec tout ça,
ton script sera asser blindé.



chacun de mes choix exécute un script, ça marche aussi avec sudo ? (fau dra que
je lise le man ! )
Avatar
Jean-Michel OLTRA
bonjour,


Le vendredi 18 août 2006, Bulot Grégory a écrit...


echo -n "blabla



MENU ADMINISTRATION SYSTEME




1 : 1er choix , blabla : A
2 : 2iem choix , blabla : B



9 : quitter menu administration : q




choix sur $NomMachine: "
trap '' 2
read rep
case $rep in ....




Il y a select, pour faire un truc comme ça.

--
jm

A.E.L. Sarl (R.C.S CASTRES 490843240)
http://www.affaires-en-ligne.com


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Vincent Bernat
OoO Pendant le repas du jeudi 17 août 2006, vers 19:14, Bulot Grégory
disait:

Bonjour,
je suis en train de préparer un shell d'administration simplifier (1 = check
mail, 2=relance apache, 3=relance serveur)



donc en shell (bash) j'ai un boucle 'read $Reponse' malheureusement on peut
faire ctrl-C, dans ce cas l'utilisateur à accès au prompt et peu taper les
commandes qu'il souhaite (rm -fR / .....) et evidement je ne le souhaite pas,
je voudrais savoir s'il est possible de n'autoriser que des choix que
j'aurais définis (empécher les ctrl c dans un premier temps sera déjà pas
mal)




actuellement après avoir saisi le login admin / pass admin, dans le .bashrc je
lance un script shell qui lui propose les choix



En plus des autres réponses, je pense que tu devrais plutôt mettre
dans ton .bashrc quelque chose comme :

exec /chemin/vers/ton/script

Ainsi, le shell interactif qui était en cours de lancement est
remplacé par un script. Si celui-ci plante ou se fait tuer d'une façon
ou d'une autre, tu ne retournes pas au shell interactif car celui-ci
n'existe plus (exec).
--
panic("esp_handle: current_SC == penguin within interrupt!");
2.2.16 /usr/src/linux/drivers/scsi/esp.c


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Avatar
Bulot Grégory
Le vendredi 18 août 2006 09:21, Vincent Bernat a écrit :

En plus des autres réponses, je pense que tu devrais plutôt mettre
dans ton .bashrc quelque chose comme :

exec /chemin/vers/ton/script

Ainsi, le shell interactif qui était en cours de lancement est
remplacé par un script. Si celui-ci plante ou se fait tuer d'une façon
ou d'une autre, tu ne retournes pas au shell interactif car celui-ci
n'existe plus (exec).



effectivement, c'est judicieux, mais je programme toujours parfaitement (qu i a
parlé de vendredi :-D )