
Estou atualizando uma caixa SuSE-13.2 mais antiga para o Leap-15. Fiz uma nova instalação do Leap-15.0 e transferi o código-fonte que executamos na caixa 13.2. Eu construo bem, mas estou tendo um problema. O programa é/tem que ser um programa suid. Ele também usa // fork
para executar alguns scripts externos. E é aí que reside o meu problema. O usuário é membro de vários grupos, mas essas associações de grupos parecem desaparecer quando esses scripts externos são executados. Por exemplo, o usuário é membro do grupo para poder ejetar e trabalhar com um DVD. Eu criei um script de exemplo simples e uma fonte para um programa que é aquele script que mostra meu problema.execvpe
wait
cdrom
execvpe
test.sh
roteiro:
#!/bin/sh
whoami
id
test.c
fonte do 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)
Então como root:
#chown root ./a.out
#chgrp root ./a.out
#chmod +s ./a.out
Então como usuário
#./a.out
markh
uid=5076(markh) gid=100(users) groups=100(users)
Uma vez que o programa pertence ao root e ao suid, perco todas as minhas associações ao grupo por algum motivo desconhecido. Não é adequado para mim.
Tudo isso funciona bem na antiga caixa 13.2, mas não no Leap 15 ou Leap 42.3. Eu sei que este não é um lugar do SuSE Linux, mas suspeito que não seja realmente relacionado ao SuSE Linux. Também não está relacionado ao kernel, pois estou executando um kernel 4.16.12 nas caixas 13.2 e 15.0.