Droits - SUID

Résolu
ekra Messages postés 1873 Statut Membre -  
ekra Messages postés 1873 Statut Membre -
Bonjour,

J'ai un problème pour régler les droits d'un fichier.
Caractéristiques :
-fichier shell (sh)
-appartenant à root
-Contient des commandes nécéssitant d'être super-utilisateur
-L'utilisateur ne doit pas pouvoir lire dans ce fichier

J'aimerai qu'un utilisateur quelconque puisse l'utiliser.
J'ai essayé avec
chmod 4711 fichier.sh, seulement je pense que la pseudo-execution de l'utilisateur ne suffit pas, il faut la lecture du super-utilisateur.

Comment faire ?
Je vous remercie d'avance.
--
GPG Key ID = 5518CFC7
Configuration: Linux
Firefox 1.5.0.9

10 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    -Contient des commandes nécéssitant d'être super-utilisateur
    Il faut aussi penser pour les commandes contenu dans ton script.
    Même si l'utilisateur peut lancer le script, s'il ne peux pas exécuter les commandes contenues dans le script .....
    Tu vois ce que je veux dire?!

    Pour invoquer un script shell, il faut avoir les droits de lecture et d'exécution.

    La lecture puisque le shell doit lire les commandes à interpreter.

    0
  2. ekra Messages postés 1873 Statut Membre 342
     
    Salut lami20j

    Oui, je vois ce que tu veux dire, je vais te donner mon exemple :
    ---------Script sensé etre executable pour tous--------
    #!/bin/sh

    #Pour demarrer WPA_SUPPLICANT avec parametres

    wpa_supplicant -c/etc/wpa_supplicant.conf -w -Dwext -ieth1 &
    ifup eth1
    dhclient
    ---------------------------------------------------------------------

    Le fichier wpa_supplicant.conf ne doit pas etre lisible ! Il contient le mot de passe du réseau en clair (droits 700).

    Saurais-tu comment faire ?

    PS : Après tout j'ai dit une bétise, le script que l'on execute peut être lisible
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Regarde un exemple
    debian:/bin# cat /etc/nolire
    password
    debian:/bin# cat /usr/bin/fw.sh
    #!/bin/sh
    
    cat /etc/nolire

    je crée un fichier dans /etc et ce n'est que root qui a accès
    ensuite j'écrit un script dans /usr/bin

    Voici les droits

    debian:/bin# ls -l /etc/nolire
    -rwx------ 1 root root 9 2007-02-25 19:56 /etc/nolire
    debian:/bin# ls -l /bin/cat
    -rwxr-xr-x 1 root root 21448 2006-08-31 14:25 /bin/cat
    debian:/bin# ls -l /usr/bin/fw.sh
    -rwxr-xr-x 1 root root 28 2007-02-25 19:57 /usr/bin/fw.sh


    En fait c'est le cat qui a besoin de droit spéciaux puisque c'est lui qui va essayer de lire le fichier detenu par root
    debian:/bin# chmod -v 4755 /bin/cat
    Le mode d'accès de `/bin/cat' a été modifié à 4755 (rwsr-xr-x).


    Donc je pense que dans ton cas il faut penser aux droits d'accès pour la commande wpa_supplicant puisque c'est elle qui va accèder au fichier wpa_supplicant.conf et pas l'utilisateur.
    0
  4. ekra Messages postés 1873 Statut Membre 342
     
    Ok, merci, ça fonctionne comme cela.

    Je n'ai pas besoin de plus, mais par curiosité je voudrais savoir si il n'y a que cette possibilité ?
    Car du coup ici, l'utilisateur peut executer wpa_supplicant et se connecter à n'importe quel réseaux .... :/
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    mais, tu veux que les utilisateurs l'exécutent ou pas?
    puisque si tu veux que le script soit exécuter que par root alors tu n'as qu'a regler les droits en conséquence.

    si tu veux accorder des droits seulement à certains utilisateurs tu peux créer un groupe pour ça et tu fais les utilisateurs membres de ce groupe.

    sinon tu peux aussi utiliser les ACLs
    0
  7. ekra Messages postés 1873 Statut Membre 342
     
    Non, le truc c'est qu'avec ce que je voulais faire, un utilisateur quelconque pouvait executer wpa_supplicant avec UN fichier de configuration défini (-c/etc/wpa_supplicant.conf) défini dans le script non modifiable. Si j'active le SUID alors il pourra taper
    wpa_supplicant -c~/un_fichier_pas_bien.conf
    0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Je crois que tu n'as pas le choix, c'est le risque de SUID
    A savoir que si jamais sur ton OS il y a une commnade de lecture de fichier avec le SUID, même le fichier de config pourra être lu

    je pense que pour certains taches c'est bien d'être root et pas un utilisateur quelconque
    0
  9. ekra Messages postés 1873 Statut Membre 342
     
    Ah ok. Je te remercie pour tes réponses.
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      je pense que tu peux mettre problème résolu :-)
      si jamais je trouve autre chose (les droits c'est un sujet qui m'interesse ;-)) je te tiendrai au courant.
      0
    2. ekra Messages postés 1873 Statut Membre 342
       
      :) Merci, bonne soirée !
      0
    3. ekra Messages postés 1873 Statut Membre 342
       
      On m'a donné une solution : écrire un programme executable.

      Tu te sers de exec ou execv pour executer les commandes shell critiques.
      Et ça passe (avec un petit coup du bit suid) :)
      0
  10. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    c'est la 1ère chose que j'ai pensé :-)

    il me semble que tu fait du C donc tu n'as qu'à écrire ton script :-))
    0
  11. ekra Messages postés 1873 Statut Membre 342
     
    Oui, c'est déjà fait.

    Merci de ton aide !
    Au prochain problème ;)

    Résumé :
    Pour qu'un utilisateur quelquonque puisse executer une série d'actions prédéfinies requirant des privilèges (root) , passer par un programme qui n'est pas de type script shell : ex C avec "exec()". Le propriétaire sera dans cet exemple root, et activera le bit SUID.
    0