Ok, entonces estoy tratando de envolver mi cabeza en torno a lo que hace la bandera s en Linux.
Tengo el siguiente código:
#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");
}
y la marca s está establecida para el usuario.
-rwsr-xr-x 1 root root 7358 2017-08-24 17:45 a.out
a mi entender, ya que la marca s está activada, el gid efectivo y el uid deben ser el usuario.
Sin embargo, cuando ejecuto este archivo como otro usuario, obtengo lo siguiente.
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)
Creo que esto demuestra que el uid y el gid efectivos no se configuraron como yo hubiera pensado.
¿Alguna ayuda? Gracias!