GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux Setuid funktioniert nicht?

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;
}

Linux
  1. Warum funktioniert diese Regex nicht unter Linux?

  2. Funktioniert ZFS unter Linux?

  3. Wie funktioniert ein Debugger unter Linux?

  4. Das Ändern des Root-Passworts ändert nicht das Sudo-Passwort

  5. Wie funktioniert die Stapelzuweisung unter Linux?

Linux – Wie funktioniert die Anzeige von Linux?

Wie funktioniert Swap-Speicher in Linux?

ssh-copy-id funktioniert nicht

Der Befehl du parst keine versteckten Verzeichnisse

Inwiefern ist Fakeroot keine Sicherheitslücke in Linux?

Wie funktioniert die Anzeige von Linux?