La page de man ne précise pas où c'est implementé. Techniquement parlant, quand tu appelles execve dans un programme en C, c'est celui de la glibc, pas celui du noyau, donc ça ne dit pas qui est responsable du non-setuid sur les scripts.
Mais la suite de ton message m'a permis de comprendre: un script n'est pas vu comme un programme par le noyau, mais comme un fichier qui doit être démarré par l'interpréteur defini par le #!
Effectivement, maintenant je vois ça dans le noyau.
[^] # Re: Noyau
Posté par Olivier4400 . En réponse au message Bit setuid sur les scripts. Évalué à 2.
La page de man ne précise pas où c'est implementé. Techniquement parlant, quand tu appelles execve dans un programme en C, c'est celui de la glibc, pas celui du noyau, donc ça ne dit pas qui est responsable du non-setuid sur les scripts.
Mais la suite de ton message m'a permis de comprendre: un script n'est pas vu comme un programme par le noyau, mais comme un fichier qui doit être démarré par l'interpréteur defini par le #!
Effectivement, maintenant je vois ça dans le noyau.
C'est prepare_binprm qui s'occupe du bit setuid:
http://lxr.linux.no/linux/fs/exec.c
/* Set-uid? */
if (mode & S_ISUID) {
current->personality &= ~PER_CLEAR_ON_SETID;
bprm->e_uid = inode->i_uid;
}
Et dans le chargeur de scripts http://lxr.linux.no/linux/fs/binfmt_script.c, prepare_binprm est appelé avec l'interpréteur, pas avec le script.
Bilan, le setuid du script n'a pas d'importance.