Ouah la réponse de "mute" casse bien...
J'ai entendu parler (il y a longtemps, bien longtemps) d'un compilateur de shell mais je ne suis pas certain que ça existe vraiment (comme le dahu)
Il y aurait une solution faisable mais un peu tordue (et beaucoup unsecure !!!)
1) tu donnes ton script à "root" et tu le mets en chmod 500 (seul root peut le lire et l'exécuter)
2) tu crées un source "C" qui va lancer le script shell en lui passant tous les arguments que tu veux et même l'environnement adéquat, du style correspondant à peu près à ceci:
main(int argc, char *argv[], char *envp[])
{
static char nom_script[]="nom de base du script";
argv[0]=nom_script;
execve("chemin_du_script", argv, envp);
}
la partie "argv[0]=" permet de remplacer la variable "argv[0]" qui contient le nom du programme exécuté par le nom qui sera vu dans le script (et reçu dans "$0") et qui, en shell, doit correspondre au nom du script
Et il est autorisé de faire "argv[0]=..." car argv[0] est un pointeur et "nom_script" aussi !
3) tu compiles ce programme, tu le donnes à root et tu lui mets un "setuid" pour qu'il puisse s'exécuter avec les droits de "root" comme cela le programme peut lancer le script mais personne d'autre ne le peut et ne peut le lire
Poste le Thursday 5 February 2004 20:28:50