O programa setuid perde as associações de grupo

1

Estou atualizando uma caixa SuSE-13.2 mais antiga para o Leap-15. Eu fiz um novo Leap-15.0 instalar e portado sobre o código fonte que nós rodamos na caixa 13.2. Eu construo bem, mas estou tendo um problema. O programa é / tem que ser um programa suidado. Ele também usa fork / execvpe / wait para executar alguns scripts externos. E é aí que está o meu problema. O usuário é membro de vários grupos, mas essas associações de grupo parecem desaparecer quando esses scripts externos são executados. Por exemplo, o usuário é membro do grupo cdrom para poder ejetar e trabalhar com um DVD. Eu criei um exemplo simples de script e fonte para um programa que execvpe s esse script que mostra o meu problema.

test.sh script:

#!/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);
}

Uso:

#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)

Depois que o programa é de propriedade de root e suid, perco todos os membros do meu grupo por algum motivo desconhecido. Não é apropriado para mim.

Isso tudo 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 SuSE Linux, mas eu suspeito que não é realmente relacionada com o Linux SuSE. Ele não é relacionado ao kernel, já que estou executando um kernel 4.16.12 nas caixas 13.2 e 15.0.

    
por markh 01.06.2018 / 21:06

0 respostas

Tags