Question: où la limitation est-elle implémentée? Dans le shell? Dans la glib? dans le noyau?
Dans le noyau. $ man execve :
NOTES
SUID and SGID processes can not be ptrace()d.
Linux ignores the SUID and SGID bits on scripts.
Officiellement, les setuid/setgid bits sont gérés par la primitive evec et ses dérivées. Maintenant, bon nombre d'appels système sont, en pratique, secondés par la glibc elle-même.
Cependant, il n'y a pas de "limitation" posée à proprement parler. Un script n'est pas un programme exécutable au sens UNIX du terme, c'est-à-dire en langage machine et dont l'image remplace celle du processus appelant. Un script est un fichier de données interprété par le programme qui est spécifié en première ligne par #!. Ce sont donc les bits de ce programme qu'il faudrait modifier.
Ca se tient parce qu'un fichier interprété de la sorte n'est pas forcément un programme en lui-même, mais également parce qu'il y aurait conflit dans les cas où le script et l'interpréteur auraient tous deux des bits set[ug]id modifiés.
Maintenant, je ne sais pas si cette facilité a été quand même implémentée sous d'autres UNIX. Mais ce ne doit pas être un comportement par défaut.
# Noyau
Posté par Obsidian . En réponse au message Bit setuid sur les scripts. Évalué à 2.
Dans le noyau.
$ man execve :
Officiellement, les setuid/setgid bits sont gérés par la primitive evec et ses dérivées. Maintenant, bon nombre d'appels système sont, en pratique, secondés par la glibc elle-même.
Cependant, il n'y a pas de "limitation" posée à proprement parler. Un script n'est pas un programme exécutable au sens UNIX du terme, c'est-à-dire en langage machine et dont l'image remplace celle du processus appelant. Un script est un fichier de données interprété par le programme qui est spécifié en première ligne par #!. Ce sont donc les bits de ce programme qu'il faudrait modifier.
Ca se tient parce qu'un fichier interprété de la sorte n'est pas forcément un programme en lui-même, mais également parce qu'il y aurait conflit dans les cas où le script et l'interpréteur auraient tous deux des bits set[ug]id modifiés.
Maintenant, je ne sais pas si cette facilité a été quand même implémentée sous d'autres UNIX. Mais ce ne doit pas être un comportement par défaut.