il me semble que le bit setuid n'est pas honoré sur les scripts sous
Linux, ce qu'une recherche sur Internet semble confirmer.
Question: où la limitation est-elle implémentée? Dans le shell? Dans la
glib? dans le noyau?
Un lien direct ou un extrait du code concerné serait le bienvenue.
Merci pour votre aide!
--
Pour contacter l'équipe de modération : moderate...@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Bonsoir,
>
> il me semble que le bit setuid n'est pas honoré sur les scripts sous
> Linux, ce qu'une recherche sur Internet semble confirmer.
En effet, cela est fait pour une raison de sécurité, ci ce n'était pas
le cas il serait possible d'obtenir « assez facilement » des droits
root avec des scripts qui utilisent des variables dans certaines
conditions. On trouve cela sur les autre UNIX aussi.
> Question: où la limitation est-elle implémentée? Dans le shell? Dans la
> glib? dans le noyau?
> Un lien direct ou un extrait du code concerné serait le bienvenue.
L'implémentation est directement dans le noyau, relativement au
répertoire source du noyau les sources à regarder sont :
fs/exec.c
et
fs/binfmt_script.c
Dans binfmt_script la fonction load_script se termine par le
remplacement du fichier script par l'interpréteur de commande :
/*
* OK, now restart the process with the interpreter's dentry.
*/
file = open_exec(interp);
if (IS_ERR(file))
return PTR_ERR(file);
bprm->file = file;
retval = prepare_binprm(bprm);
if (retval < 0)
return retval;
Tout se joue avec prepare_binprm(bprm) qui est défini dans exec.c et est
appelé avec le script comme argument. Malgré la définition de
prepare_binprm :
struct inode * inode = bprm->file->f_dentry->d_inode;
...
mode = inode->i_mode
...
if(!(bprm->file->f_vfsmnt->mnt_flags & MNT_NOSUID)) {
/* Set-uid? */
if (mode & S_ISUID) {
current->personality &= ~PER_CLEAR_ON_SETID;
bprm->e_uid = inode->i_uid;
}
L'exécution se fait avec les droits de l'utilisateur, car ce sont les
modes de l'interpréteur qui sont lus dans prepare_binprm.
Bien sûr, si l'interpréteur est lui setuid, par exemple avec perl, alors
l'exécution peut profiter du changement de droit.
>
> Merci pour votre aide!
>
--
Julien
Merci!
Entretemps j'étais arrivé aux mêmes conclusions :)
http://linuxfr.org/forums/10/23583.html