• # Noyau

    Posté par . En réponse au message Bit setuid sur les scripts. Évalué à 2.

    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.