IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration système Discussion :

Compréhension du fonctionnement du bit SUID, et des UID/EUID


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    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).

  2. #2
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    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

  3. #3
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Par défaut
    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é.

  4. #4
    Membre chevronné Avatar de hmhm12
    Profil pro
    Administrateur système
    Inscrit en
    Novembre 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Novembre 2007
    Messages : 258
    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.

  5. #5
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Par défaut
    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.

  6. #6
    Membre chevronné Avatar de hmhm12
    Profil pro
    Administrateur système
    Inscrit en
    Novembre 2007
    Messages
    258
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Novembre 2007
    Messages : 258
    Par défaut
    tu as raison

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2007] Réglage et compréhension du fonctionnement des taquets
    Par bendesarts dans le forum Word
    Réponses: 2
    Dernier message: 20/11/2013, 14h28
  2. Réponses: 20
    Dernier message: 05/09/2011, 06h59
  3. Réponses: 7
    Dernier message: 08/07/2007, 19h51
  4. Réponses: 2
    Dernier message: 30/12/2006, 10h50
  5. [C#] Problème de compréhension du fonctionnement d'un Timer
    Par cyllix dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/07/2006, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo