Citation
nicola
C’est peut-être possible en donnant le bit suid
root, en d’autres termes en donnant le script à
root et disant que tout utilisateur qui lance le
script le fait en tant que root. Tu t’en doutes,
c’est dangereux. Tu peux limiter les dégâts en
interdisant à tout le monde de le lancer, sauf aux
membres d’un groupe que tu as créé pour
l’occasion.
--
La seule excuse de Dieu est qu’il n’existe pas.
Stendhal
Le suid ne fonctionne que pour un exécutable. Et un script shell n'est pas un exécutable, c'est un script interprété par l'exécutable "/bin/bash". A la limite on peut donner le suid au programme "/bin/bash" mais ça, c'est vraiment le truc à ne pas faire...
Citation
windob
heu... merci pour la réponse mais excuse moi, je
debute, je n'ai rien compris a ta réponse.
Hum... le suid (ou sgid) est un mécanisme un peu spécial.
Ce qu'il faut comprendre, c'est que quand un utilisateur (uid=X, gid=Y) lance un exécutable, il y a création d'un processus qui appartient à l'utilisateur (même si l'exécutable appartient à un autre utilisateur). Donc le processus possède alors un uid=X et gid=Y (identiques au uid/gid de celui qui lance l'exécutable). Et si le processus doit accéder à un fichier quelconque, le système regarde le uid/gid du processus pour vérifier les droits d'accès au fichier. Exemple: si tu lances le programme "vi" qui appartient à "root", ben le processus lancé aura tes droits et non ceux de root. Donc tu ne pourras ouvrir que les fichiers pour lesquels tu as une autorisation de lecture et les modifier que si tu as une autorisation d'écriture (bien que l'exécutable "/bin/vi" appartienne à root).
Bon, ça c'est la base des droits Unix. Cependant il y a parfois des cas particuliers où tu as besoin de droits qui ne sont pas les tiens (généralement des droits plus forts que les tiens mais pas forcément). Par exemple, quand tu modifies ton mot de passe, la commande "passwd" que tu lances va aller écrire dans le fichier "/etc/shadow" alors que tu n'as pas le droit d'y écrire. Ce mécanisme est donné par le "suid". Il suffit pour cela de positionner le suid sur un exécutable. Quand il est positionné, tout utilisateur qui lancera cet exécutable génèrera un processus qui aura un uid=X' (X' étant le propriétaire de l'exécutable). Et ce processus aura tous les droits de X' et non plus les tiens. Ainsi, tu peux aller lister les attributs de la commande "/bin/passwd" et tu y verras un petit "s" à la place du "x". Ce "s" en première position indique un "suid". Et comme la commande appartient à "root", tout utilisateur qui lance cette commande génère un processus qui a les droits de "root".
Il existe aussi le même système pour le gid et il se nomme "setgid". S'il est positionné, le processus généré par l'exécutable aura un gid identique au gid de l'exécutable.
Donc si tu positionnais le setuid sur le programme "/bin/vi", n'importe qui pourrait aller lire et modifier n'importe quel fichier puisque quiconque qui exécutera ce programme l'exécutera en ayant les droits de "root".
Pour les connaisseurs (et les amoureux des expèrieces bizarres), ceci me rappelle un jour une expérience que j'ai tenté avec le setuid/setgid qui n'a jamais fonctionné (un peu comme l'expèrience de Michelson qui tentait de prouver que la vitesse de la lumière dépend du référentiel d'observation et qui n'a jamais fonctionné parce que la vitesse de la lumière est invariante quel que soit le référentiel...).
Voici le résumé de l'expèrience
- J'ai créé un fichier quelconque donc j'en étais le propriétaire.
- J'ai positionné les droits de ce fichier à "---rwxrwx" donc n'importe qui pouvait le lire sauf moi.
- J'ai créé un programme en C qui ne faisait que lire ledit fichier. Evidement, n'importe qui pouvait utiliser ce programme sauf moi puisque je ne pouvais pas lire le fichier.
- J'ai donné le programme à quelqu'un d'autre ce qui ne changeait rien à la situation.
- Enfin j'ai placé un "setuid" sur le programme. Mon raisonnement était que puisque le programme que je lançais avait les droits de quelqu'un d'autre, cela me permettrait de lire le fichier (puisque n'importe qui d'autre que moi avait les droits de lecture et que le processus lancé n'était plus le mien). C'était un bel exemple de cas où le setuid serait utilisé non pas pour donner des droits mais pour en enlever. Ben ça n'a jamais fonctionné et je n'ai jamais pu lire ledit fichier. Si qqun a une explication...
L'homme qui murmurait à l'oreille des pingouins
[
fr.lang.free.fr]