Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2007, 11h40   #1
Inactif
 
Avatar de Hibou57
 
Inscription : mars 2006
Messages : 852
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 852
Points : 398
Points : 398
Par défaut Compréhension du fonctionnement du bit SUID, et des UID/EUID

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).
Hibou57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 20h41   #2
Membre émérite
 
Avatar de Celelibi
 
Inscription : janvier 2004
Messages : 990
Détails du profil
Informations forums :
Inscription : janvier 2004
Messages : 990
Points : 822
Points : 822
Citation:
Envoyé par Hibou57 Voir le message
Je veux rendre certains script appartenant à root, executable par un compte utilisateur.
Euh, si tu veux juste que tout le monde puisse exécuter un script, c'est rien d'autre que le chmod o+x qu'il faut mettre, pas autre chose.
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... ) Le script ne s'exécute pas réellement, c'est l'interpréteur qui s'exécute (et effectue des actions dictées par le script). Donc si tu veux qu'un script exécuté par un utilisateur puisse avoir les mêmes droits que si il était exécuté par root, il faudrait que l'interpréteur ait le bit suid activé et qu'il possède une commande "setuid" pour changer l'uid réel du script. Ce n'est bien entendu pas le cas.


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.
Celelibi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2007, 20h57   #3
Inactif
 
Avatar de Hibou57
 
Inscription : mars 2006
Messages : 852
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 852
Points : 398
Points : 398
Citation:
Envoyé par Celelibi Voir le message
J'avais déjà lu cette page, et c'est elle qui m'a fait venir des questions justement : le jeux entre UID et EUID ne me semble pas clair.

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é.
Hibou57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 17h51   #4
Membre confirmé
 
Avatar de hmhm12
 
Inscription : novembre 2007
Messages : 257
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 257
Points : 245
Points : 245
Par défaut il faut donner le droit a l utlisateur

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.
hmhm12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 19h22   #5
Inactif
 
Avatar de Hibou57
 
Inscription : mars 2006
Messages : 852
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 852
Points : 398
Points : 398
Salut

Citation:
Envoyé par hmhm12 Voir le message
concernant la command mount, juste root que peut l exécute.
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.
Hibou57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2007, 15h49   #6
Membre confirmé
 
Avatar de hmhm12
 
Inscription : novembre 2007
Messages : 257
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 257
Points : 245
Points : 245
tu as raison
hmhm12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h13.


 
 
 
 
Partenaires

Hébergement Web