system("mount ...") funzt nicht mit suid
-
Wenn ich
#include <stdlib.h> #include <stdio.h> #include <sys/mount.h> int main(){ system("whoami"); system("ls -l /root"); system("mount /dev/sda1 /mnt"); }
kompiliere und die Binärdatei diese Rechte hat:
-rwsr-xr-x 1 root root 6973 12. Apr 13:41 test
dann erfolgt als user tester unter Debian 7.0 folgende Ausgabe:
tester@testpc:~/tmp$ ./test root insgesamt 0 mount: only root can do that tester@testpc:~/tmp$
Wieso kann ich bei gesetztem suid nun als unpriviligierter Nutzer (tester) zwar den nur root leseerlaubten Inhalt aus /root einsehen, aber nicht mounten?
-
Das problem hatte ich auch mal system macht nur ne shell auf, du musst schon
die dieser shell übergebenen Befehle per sudo aufrufen und die /etc/sudoers entsprechend konfigurieren.
-
Wenn das Setuid-Bit gesetzt ist, ist davon nur die effektive UID des gestarteten Prozesses betroffen. Die Reale UID ist immernoch die UID des startenden Nutzers. Diese beiden Eigenschaften werden an Kindprozesse vererbt.
Irgendeines der beteiligten Programme (Shell, mount) wird jetzt die Rechte wieder droppen (also eUID auf rUID setzen).Helfen sollte also
setuid(0)
.