Das hängt mit dieser Frage zusammen .
Ich habe ein Skript ( fix-permissions.sh
), das einige Dateiberechtigungen korrigiert:
#! /bin/bash sudo chown -R person:group /path/ sudo chmod -R g+rw /path/
Und ein kleines c-Programm, um dieses auszuführen setuid
:
#include "sys/types.h" #include "unistd.h" int main(){ setuid(geteuid()); return system("/path/fix-permissions.sh"); }
Verzeichnis:
-rwsr-xr-x 1 root root 7228 Feb 19 17:33 fix-permissions -rwx--x--x 1 root root 112 Feb 19 13:38 fix-permissions.sh
Wenn ich das tue, scheint alles in Ordnung zu sein und die Berechtigungen werden korrekt korrigiert:
james $ sudo su someone-else someone-else $ ./fix-permissions
aber wenn ich strace benutze, bekomme ich:
someone-else $ strace ./fix-permissions /bin/bash: /path/fix-permissions.sh: Permission denied
Es ist interessant zu bemerken, dass ich die gleiche Berechtigung verweigert habe, die mit einem identischen Setup (Berechtigungen, Programm c) verweigert wurde, jedoch mit einem anderen Skript, auch wenn strace nicht verwendet wird. Ist dies eine Art heureustisches magisches Verhalten in Setuid, das ich aufdecke?
Wie soll ich herausfinden, was los ist?
System ist Ubuntu 10.04.2 LTS, Linux 2.6.32.26-kvm-i386-20101122 # 1 SMP