
Ich aktualisiere eine ältere SuSE-13.2-Box auf Leap-15. Ich habe eine neue Leap-15.0-Installation durchgeführt und den Quellcode portiert, den wir auf der 13.2-Box ausgeführt haben. Es funktioniert einwandfrei, aber ich habe ein Problem. Das Programm ist/muss ein Suid-Programm sein. Es verwendet auch fork
/ execvpe
/, wait
um einige externe Skripte auszuführen. Und genau da liegt mein Problem. Der Benutzer ist Mitglied mehrerer Gruppen, aber diese Gruppenmitgliedschaften scheinen zu verschwinden, wenn diese externen Skripte ausgeführt werden. Beispielsweise ist der Benutzer Mitglied der cdrom
Gruppe, sodass er eine DVD auswerfen und damit arbeiten kann. Ich habe ein einfaches Beispielskript und eine Quelle für ein Programm erstellt. execvpe
Das ist das Skript, das mein Problem zeigt.
test.sh
Skript:
#!/bin/sh
whoami
id
test.c
Programmquelle:
#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);
}
Verwenden:
#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)
Dann als Root:
#chown root ./a.out
#chgrp root ./a.out
#chmod +s ./a.out
Dann als Benutzer
#./a.out
markh
uid=5076(markh) gid=100(users) groups=100(users)
Sobald das Programm root- und suid-berechtigt ist, verliere ich aus unbekannten Gründen alle meine Gruppenmitgliedschaften. Das ist für mich nicht richtig.
Das alles funktioniert auf der alten 13.2-Box einwandfrei, aber nicht auf Leap 15 oder Leap 42.3. Ich weiß, dass dies kein SuSE-Linux-Ort ist, aber ich vermute, dass es nicht wirklich etwas mit SuSE-Linux zu tun hat. Es hat auch nichts mit dem Kernel zu tun, da ich sowohl auf der 13.2- als auch auf der 15.0-Box einen 4.16.12-Kernel verwende.