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)

그런 다음 루트로:

#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 커널을 실행하고 있으므로 커널 독립적입니다.

관련 정보