का उपयोग करके विशेषाधिकार छोड़ते समय "संचालन की अनुमति नहीं है" os.setuid()/gid() का उपयोग करने वाले यह सरल प्रोग्राम विफल क्यों होते हैं? अजगर में लिखा है लेकिन मुझे लगता है कि एक भाषा रिश्तेदार समस्या नहीं है (अंत में कर रहे हैं सभी एक ही POSIX सिस्टम कॉल):setuid() फ़ंक्शन
$ 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
त्रुटि क्या है:
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)
यह इस अपवाद रिटर्न ?
यदि मैं दो कॉल setgid() और setuid() को स्वैप करता हूं, तो उसी संदेश को प्रिंट करता है। – Emilio
@Emilio: मैं इस व्यवहार को पुन: उत्पन्न नहीं कर सकता। 'Sudo' के माध्यम से रूट बनने के बाद' निश्चित रूप से 'setgid()' को कॉल करते समय यह मेरे लिए काम करता है। 'Setuid()' को पहली बार कॉल करते समय, मुझे वही त्रुटि मिलती है जो आपको मिलती है। –
कुछ एपर्मर कॉन्फ़िगरेशन हो सकता है? एक बार मैं इसके कारण एक पायथन लिपि से 'tcpdump' निष्पादित नहीं कर सका (और मैं रूट था)। – Emilio