
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.execvpe
wait
cdrom
execvpe
test.sh
guion:
#!/bin/sh
whoami
id
test.c
fuente 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.