• # En C :

    Posté par . En réponse au message Capability. Évalué à 3.

    #include <sys/capability.h>
    #include <stdio.h>
    #include <errno.h>
    #define NOM_PROGRAMME "mon_programme"
    int main(int argc, char** argv){
     if(geteuid()!=0) {fprintf(stderr,"Ce programme doit être setuid root!"); return 1;}
     cap_set_proc(cap_sys_rawio);/* Abandon de toutes les autres capacités */
     seteuid(getuid());/* Abandon des droits root. */
     execvp(MON_PROGRAMME,argv);
     perror("échec de l'execvp().");
     return 1;
    }
    /*Attention quand même, cela change le nom d'appel du 
    processus en question. En général, ce n'est pas gênant, mais il y 
    a des exceptions (comme gcc ou gzip). Mais c'est assez facile à 
    résoudre, si besoin est.
    -- 
    CoinKoin.
    P.S. : je ne l'ai pas testé, ni même compilé. Mais je pense qu'il marche. */