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()'를 먼저 호출 할 때와 같은 오류가 발생합니다. –
일부 apparmor 구성이 될 수 있습니까? 한 번 파이썬 스크립트에서 'tcpdump'를 실행할 수 없었기 때문에 (그리고 저는 루트였습니다). – Emilio