Warum scheitern diese einfachen Programme, die os.setuid()/gid() verwenden? Ist in Python geschrieben, aber ich denke, dass keine Sprache relativ Problem ist (am Ende sind alle gleich Posix Systemaufruf):"Operation nicht erlaubt" beim Löschen von Privilegien mit der Funktion setuid()
import os, pwd
if os.getenv("SUDO_UID") and os.getenv("SUDO_GID"):
orig_uid=int(os.getenv("SUDO_UID"))
orig_gid=int(os.getenv("SUDO_GID"))
else:
pw = pwd.getpwnam("nobody")
orig_uid = pw.pw_uid
orig_gid = pw.pw_gid
print os.getuid(), os.getgid(), os.geteuid(), os.getegid(), orig_uid, orig_gid
os.setgid(orig_gid)
os.setuid(orig_uid)
Es diese Ausnahme gibt:
$ sudo python provgid.py
0 0 0 0 1000 1000
Traceback (most recent call last):
File "provgid.py", line 15, in <module>
os.setgid(orig_gid)
OSError: [Errno 1] Operation not permitted
Was ist der Fehler ?
Wenn ich die beiden Aufrufe setgid() und setuid() vertausche, wird die gleiche Nachricht gedruckt. – Emilio
@Emilio: Ich kann dieses Verhalten nicht reproduzieren. Es funktioniert für mich beim ersten Aufruf von 'setgid()' - natürlich nachdem ich über 'sudo 'root geworden bin. Beim ersten Aufruf von 'setuid()' bekomme ich den gleichen Fehler, den Sie bekommen. –
Kann einige Apparmor-Konfiguration sein? Einmal konnte ich 'tcpdump' aus einem Python-Skript nicht ausführen (und ich war root). – Emilio