Forum Linux.général executer une commande root

Posté par  .
Étiquettes : aucune
0
28
fév.
2007
Bonjour,

Je voudrais qu'une commande puisse être lancer par n'importe quel utilisateur mais qu'elle s'exécute en root sans que les utilisateurs ai le mots de passe root.

comment faire??
j'avais cru comprendre qu'il fallait y mettre le SUID mais visiblement ça ne marche pas!!

...

merci
  • # .

    Posté par  . Évalué à 3.

    Bonjour,

    Le SUID marche très bien chez moi, voici un exemple :

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <libio.h>

    int main ()
    {
    int Ret = open ("/etc/shadow", O_RDONLY);

    if (Ret < 0)
    perror("Erreur ouverture");
    else
    perror("OK");

    pause();

    return 0;
    }


    Voici un test sans SUID:

    vince@darkangel:/tmp$ gcc test.c
    vince@darkangel:/tmp$ ls -l a.out
    -rwx------ 1 vince vince 8921 2007-02-28 18:21 a.out

    vince@darkangel:/tmp$ ./a.out
    Erreur ouverture: Permission denied


    Je met le SUID:

    darkangel:/tmp# chown root:root a.out
    darkangel:/tmp# chmod u+s a.out
    darkangel:/tmp# ls -l a.out
    -rws--x--x 1 root root 8921 2007-02-28 18:21 a.out


    Et le test avec :
    vince@darkangel:/tmp$ ./a.out
    OK: Success
    vince@darkangel:~$ ps aux | grep ./a.out
    root 12815 0.0 0.0 2628 436 pts/1 S+ 18:23 0:00 ./a.out


    quelques remarques:
    - bien mettre l'owner à root AVANT de mettre le SUID
    - bien vérifier que tous les utilisateurs soient dignes de confiance
    - il faut que les utilisateurs aient le droit d'exécution sur le programme (le droit de lecture n'est pas nécessaire) !


    Personnellement je préfère utiliser sudo, bien plus puissant (pour limiter le droit à certains utilisateurs/groupes, etc ...).


    Bonne chance
  • # .

    Posté par  . Évalué à 3.

    deux possibilités:
    1) man sudo
    2) chown root /path/vers/commande
    chmod u+sx /path/vers/commande
    • [^] # Re: .

      Posté par  . Évalué à 1.

      Je préfère également sudo, mais en cas de repli sur la seconde solution, j'irais un peu plus loin en créant un groupe pour ceux qui doivent exécuter cette commande (cmdpriv par exemple) et je limiterais les droits d'exécution:

      chown root:cmdpriv /path/vers/commande
      chown 4110 /path/vers/commande

      Maintenant que j'y pense, j'espère que tu n'essaies pas de lancer un shell suid-bité (marche plus, et heureusement)
  • # Sudo sans hésiter

    Posté par  . Évalué à 4.

    J'appuie les remarques précédentes poussant à l'utilisation de sudo. Au prix d'un petit effort d'apprentissage tu gagnera beaaucoup en puissance en souplesse et en sécurité.
    Outre le man, pas forcément évident pour se lancer vu la grammaire un peu particulière du fichier /etc/sudoers, je suggère la lecture de l'article de Frédéric Bonnaud consacré à sudo sur Léa-Linux : http://lea-linux.org/cached/index/Admin-admin_env-sudo.html#
    • [^] # Re: Sudo sans hésiter

      Posté par  . Évalué à 3.

      Carrément.

      Si ça peut t'aider je peux mettre un morceau de mon /etc/sudoers (enfin, je sais pas si c'est recommendé niveau sécurité)

      ALL ALL = NOPASSWD: /sbin/shutdown, /sbin/halt, /sbin/reboot


      C'est un peu extrémiste (on peut définir des groupes au lieu de mettre ALL) mais ça marche pour tout le monde. Après, dans mon ~/.bashrc je mets ce genre de ligne pour pas avoir à marquer sudo avant la commande.


      alias halt='sudo halt'
      alias reboot='sudo reboot'

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.