Программа Setuid теряет членство в группах

Программа Setuid теряет членство в группах

Я обновляю старую коробку SuSE-13.2 до Leap-15. Я сделал новую установку Leap-15.0 и перенес исходный код, который мы запускали на коробке 13.2. Сборка проходит нормально, но у меня возникла проблема. Программа является/должна быть программой suid. Она также использует fork/ execvpe/ waitдля выполнения некоторых внешних скриптов. И вот в чем моя проблема. Пользователь является членом нескольких групп, но эти членства в группах, похоже, исчезают, когда эти внешние скрипты выполняются. Например, пользователь является членом группы, cdromпоэтому он может извлечь DVD и работать с ним. Я создал простой пример скрипта и исходный код для программы, execvpeкоторая является тем скриптом, который показывает мою проблему.

test.shсценарий:

#!/bin/sh
whoami
id

test.cисточник программы:

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

Использовать:

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

Затем как root:

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

Затем как пользователь

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

Как только программой владеет root и suid, я теряю все свои членства в группах по какой-то неизвестной причине. Мне это не подходит.

Все это отлично работает на старой коробке 13.2, но не работает на Leap 15 или Leap 42.3. Я знаю, что это не место SuSE linux, но я подозреваю, что это не совсем связано с SuSE linux. Это также не связано с ядром, так как я использую ядро ​​4.16.12 на обеих коробках 13.2 и 15.0.

Связанный контент