|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Inactif
Inscription : mars 2006 Messages : 852 ![]() |
Bonjour les gens,
Je rencontre un problème pour lequel je ne trouve pas de réponse dans la FAQ, ni de tutoriel qui m'éclaire vraiment. Je veux rendre certains script appartenant à root, executable par un compte utilisateur. J'ai donc fixé le bit SUID pour ce script. Mais quand je l'execute en tant qu'utilisateur, j'obtiens le message "only root can do that". Je me suis renseigné, et apparement, comme c'est un script, c'est le bash qui est appelé avec EUID=root, mais le contexte d'execution du script reçois un EUID égale à celui de l'appelant, donc l'utilisateur. Je n'ai déjà pas trés bien compris pourquoi, mais là où ça me semble encore plus incompréhensible, c'est que par exemple, la commande mount, qui n'est pas un script, a le bit SUID fixé, et pourtant je ne peux pas l'appeler depuis le compte utilisateur. Existe t-il un tutoriel à ce sujet ? Quelque chose qui puisse convenir à quelqu'un d'assez lent avec cette question (ça me semblait clair, mais quand je fais des essais, je m'aperçois que je n'y comprend absoluement rien). Note : je suis bien informé des problèmes de sécurité que présente cet attibut, mais la question n'est pas là pour le moment (il faut apparement surtout se méfier des dépendances de ces programmes vis-àvis des variables d'environnement, car celles-ci sont librement modifiables par l'appelant, et peuvent donc êtres des failles). |
|
|
00
|
|
|
#2 | |
|
Membre émérite
![]() Inscription : janvier 2004 Messages : 990 ![]() |
Citation:
Dans le cas général, le bit suid il va juste indiquer que le programme aura le droit de changer son uid pour celui du propriétaire du fichier. C'est à dire que si le programme effectue un appel système setuid (ou ses frères) le programme aura les mêmes droits que le propriétaire du fichier. Pour un script c'est différent, car le script n'est pas exécuté directement, il est exécuté via un interpréteur. Cet interpréteur ne fera rien d'autre que des opérations de lecture sur le script. (Essaye d'exécuter un script sur lequel tu n'as pas les droits de lecture... Une solution consiste à réécrire tes scripts en C. Ou bien écrire un programme C qui a le bit suid et qui effectue un appel à setuid avant d'exécuter le script shell. Mais cette solution peut présenter des failles majeures si tu ne le programme pas correctement, et toutes ne sont pas forcément trivial à corriger. Tu pourrais regarder par là : http://www.lea-linux.org/cached/inde...d_scripts.html
__________________
Les vaches ne peuvent PAS voler, quoi qu'elles aient pu vous raconter. |
|
|
|
00
|
|
|
#3 | |
|
Inactif
Inscription : mars 2006 Messages : 852 ![]() |
Citation:
Je n'en ai plus strictement besoin (parce le problème du mount était autre chose... une erreure de ma part), mais j'aimerais comprendre, ne serait-ce que parce que ça a l'air d'être au centre de beaucoup de choses. En plus, en me renseignant sur setuid (ce n'est pas qu'un fonction C... il y existe une commande setuid sous Debian, dans le package "super"), j'ai appris que selon qu'on est sur Linux, BSD ou SystemV, le fonctionnement n'est pas même. Setuid n'a pas l'air recommandé. |
|
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 257 ![]() |
salut
je crois que root est toujours le propriétaire dufichier, donc il faut changer le propriétaire par la commande chown. Sinon verifier par # ls -l votre-script # chown user1 votre-script concernant la command mount, juste root que peut l exécute. |
|
|
00
|
|
|
#5 |
|
Inactif
Inscription : mars 2006 Messages : 852 ![]() |
Salut
Pas tout à-fait : tout le monde peut l'executer si le programme à le bit SUID. Mais la commande mount peut échoué depuis un compte utilisateur si on l'appel en lui donnant en argument un descripteur dans /dev/*. Par contre, si on l'appel en lui donnant seulement un repertoire de montage pour lequel existe une entré dans fstab alors ça fonctionne. La raison en est que les entrées /dev/* sont protégées et seulement accessible à root. En résumé, depuis un compte utilisateur (non root), et en supposant que l'on ait un périphérique usb sur /dev/sda1 et qu'on le monte sur /media/usb Si on fait "mount /dev/sda1 /media/usb" on obtiendra une erreur "only root can do that". Mais si on fait "mount /media/usb" et qu'on l'entré "/dev/sda1 auto /media/usb" dans fstab, alors ça fonctionnera. |
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : novembre 2007 Messages : 257 ![]() |
tu as raison
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com