Ich lerne Linux Suid, also habe ich ein kleines C-Programm mit folgendem Inhalt geschrieben, um es zu testen
#include<stdio.h>
int main(){
system("echo 100 >> test.txt");
return 0;
}
-rwsr-xr-x 1 root root 8004 Sep 10 16:19 test
test.txt
ist eine Datei, die nur von root geändert werden kann
-rw-r----- 1 root root
Wenn ich das Testprogramm mit einem Benutzerkonto ausführe, sollte es 100
hinzufügen in die leere Datei.
Aber es kommt heraus:
sh:test.txt:Permission denied
Warum?
Akzeptierte Antwort:
Das Problem ist, dass Sie die Funktion system()
aufrufen , die eine Shell /bin/sh
aufruft . Und die Shell /bin/sh
hat kein Suid-Bit gesetzt. Deshalb gibt es den Permission denied
aus Nachricht.
Sie müssen den Teil in reinem C-Code schreiben:
int main() {
FILE *fd = fopen("test.txt", "a");
fprintf(fd, "%s", "100");
fclose(fd);
return 0;
}