Setuid und Setgid funktionieren nicht

974
Deci

Ich habe ein Problem mit Setuid und Setgid. Ich habe diesen C-Code geschrieben:

int main() { setuid(0); setgid(0); system("/path/to/script.sh"); return 0; } 

Mit gcc kompiliert:

gcc test.c -o test 

Dann habe ich gebraucht chmod +s. In script.shgibt es nur den idBefehl. Hier sind die Berechtigungen für die testausführbare Datei:

-rwxr-sr-x 1 root root 8464 mag 15 20:14 test 

Beim Ausführen des Programms erhalte ich folgende Ausgabe:

uid=1000(user) gid=1000(user) gruppi=1000(user) 

Warum bekomme ich die Ausgabe idvon root nicht?

1

2 Antworten auf die Frage

1
Mella

Sie können setuid und setgid nicht verwenden, um ein Shell-Skript als einen anderen Benutzer auszuführen. Es ist eine Sicherheitsfunktion, und Sie können mehr darüber in der sehr umfassenden Antwort auf diesen UL-Beitrag nachlesen .

Das Skript ist nicht setuid oder setgid, es wird von einer ausführbaren Datei aufgerufen. Ignacio Vazquez-Abrams vor 5 Jahren 0
Ah, ich würde vermuten, dass es immer noch das gleiche ist, da es immer noch ein Shell-Skript ist, da dies ein einfacher Weg wäre, den Schutz vor direktem Zugriff zu umgehen, aber ich kann das nicht mit Sicherheit sagen. Mella vor 5 Jahren 0
0
user3629249

Aquote von der MAN-Seite für setuid()

Daher kann ein set-user-ID-root-Programm, das root-Berechtigungen vorübergehend löschen, die Identität eines nicht privilegierten Benutzers annehmen und anschließend root-Berechtigungen wiedererlangen möchte, setuid () nicht verwenden. Sie können dies mit seteuid (2) erreichen.

Bei Erfolg wird Null zurückgegeben. Bei einem Fehler wird -1 zurückgegeben und errno entsprechend gesetzt.

 Note: there are cases where setuid() can fail even when the caller is UID 0; it is a grave security error to omit checking for a failure return from setuid(). 

Dies bedeutet unter anderem, dass ein Benutzer nicht rootüber diesen Befehl werden kann.

Wenn der gepostete Code den zurückgegebenen Wert von diesen Befehlen überprüft hätte, hätte der Befehl festgestellt, dass die Befehle fehlgeschlagen sind.