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 : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Julien Salgado
Olivier Croquette a écrit :
Salut,
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);
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 ...
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
-- Pour contacter l'équipe de modération : ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans la liste de distribution des modérateurs.
Olivier Croquette a écrit :
Salut,
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);
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
...
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
--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
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);
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 ...
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
-- Pour contacter l'équipe de modération : ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans la liste de distribution des modérateurs.
Olivier Croquette
Julien Salgado wrote, On 11/01/08 16:33:
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
Merci! Entretemps j'étais arrivé aux mêmes conclusions :) http://linuxfr.org/forums/10/23583.html
-- Pour contacter l'équipe de modération : ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans la liste de distribution des modérateurs.
Julien Salgado wrote, On 11/01/08 16:33:
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
Merci!
Entretemps j'étais arrivé aux mêmes conclusions :)
http://linuxfr.org/forums/10/23583.html
--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
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
Merci! Entretemps j'étais arrivé aux mêmes conclusions :) http://linuxfr.org/forums/10/23583.html
-- Pour contacter l'équipe de modération : ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans la liste de distribution des modérateurs.