Ok, quindi sto cercando di capire cosa fa il flag s in linux.
Ho il seguente codice:
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
int main(int argc, char **argv, char **envp)
{
gid_t gid;
uid_t uid;
gid = getegid();
uid = geteuid();
printf("gid %d\n",gid);
printf("uid %d\n",uid);
setresgid(gid, gid, gid);
setresuid(uid, uid, uid);
system("id");
}
e il flag s è impostato per l'utente.
-rwsr-xr-x 1 root root 7358 2017-08-24 17:45 a.out
quindi a mio avviso, poiché il flag s è impostato, il gid effettivo e uid dovrebbero essere l'utente.
Tuttavia, quando eseguo questo file come un altro utente, ottengo quanto segue.
nebula@nebula:/tmp$ ./a.out
gid 1000
uid 1000
uid=1000(nebula) gid=1000(nebula) groups=1000(nebula),4(adm),20(dialout),24(cdrom),46(plugdev),108(lpadmin),109(sambashare),110(admin)
Credo che ciò dimostri che l'uid e il gid efficaci non sono stati impostati come avrei pensato.
Qualsiasi aiuto ?? Grazie!