• # .

    Posté par . En réponse au message executer une commande root. É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