El programa Setuid pierde membresías grupales

El programa Setuid pierde membresías grupales

Estoy actualizando una caja SuSE-13.2 anterior a Leap-15. Realicé una nueva instalación de Leap-15.0 y transfirí el código fuente que ejecutamos en la caja 13.2. Construyo bien pero tengo un problema. El programa es/tiene que ser un programa suid. También utiliza fork// para ejecutar algunos scripts externos. Y ahí es donde radica mi problema. El usuario es miembro de varios grupos, pero estas pertenencias a grupos parecen desaparecer cuando se ejecutan estos scripts externos. Por ejemplo, el usuario es miembro del grupo, por lo que puede expulsar y trabajar con un DVD. He creado un script de ejemplo simple y una fuente para un programa. Ese es el script que muestra mi problema.execvpewaitcdromexecvpe

test.shguion:

#!/bin/sh
whoami
id

test.cfuente del programa:

#define _GNU_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
        char *path = getenv("PATH");
        char  pathenv[strlen(path) + sizeof("PATH=")];
        sprintf(pathenv, "PATH=%s", path);
        char *envp[] = {pathenv, NULL};
        char *tests[] = {"./test.sh", NULL};
        execvpe(tests[0], tests, envp);
}

Usar:

#cc  test.c
#./a.out
markh
uid=5076(markh) gid=100(users) groups=100(users),19(floppy),200(lcrs),484(tape),485(lp),488(disk),489(dialout),490(cdrom)

Luego como raíz:

#chown root ./a.out
#chgrp root ./a.out
#chmod +s ./a.out

Entonces como usuario

#./a.out
markh
uid=5076(markh) gid=100(users) groups=100(users)

Una vez que el programa es propiedad de root y suid, pierdo todas las membresías de mi grupo por alguna razón desconocida. No es apropiado para mí.

Todo esto funciona bien en la antigua caja 13.2, pero no en Leap 15 o Leap 42.3. Sé que este no es un lugar de SuSE Linux, pero sospecho que en realidad no está relacionado con SuSE Linux. Tampoco está relacionado con el kernel, ya que estoy ejecutando un kernel 4.16.12 en las cajas 13.2 y 15.0.

información relacionada