Setuid 程式失去群組成員資格

Setuid 程式失去群組成員資格

我正在將舊的 SuSE-13.2 盒子升級到 Leap-15。我已經完成了全新的 Leap-15.0 安裝並移植了我們在 13.2 機器上運行的源代碼。我建造得很好,但我遇到了問題。該程式是/必須是一個suid 程式。它也使用//fork來執行一些外部腳本。這就是我的問題所在。使用者是多個群組的成員,但是當執行這些外部腳本時,這些群組成員資格似乎消失了。例如,使用者是該群組的成員,因此他可以彈出並使用 DVD。我已經為一個程式創建了一個簡單的範例腳本和原始程式碼,該腳本顯示了我的問題。execvpewaitcdromexecvpe

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 並不真正相關。它也與核心無關,因為我在 13.2 和 15.0 機器上運行 4.16.12 核心。

相關內容