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.
Tags setuid