我遇到了在/ tmp中打开文件时删除root权限的问题。以下是有问题的一行:
open(filepath, 'wb')
当程序没有使用sudo命令运行时一切正常,这是我在os.stat上的权限
posix.stat_result(st_mode=17407, st_ino=261652, st_dev=64512L, st_nlink=206, st_uid=1000, st_gid=1000, st_size=12288, st_atime=1352314677, st_mtime=1352316340, st_ctime=1352316340)
使用sudo命令运行程序时遇到问题。我尝试使用以下
删除权限os.setegid(int(os.getenv("SUDO_GID")))
os.seteuid(int(os.getenv("SUDO_UID")))
并用
重新启用它们os.seteuid(0)
os.setegid(0)
错误消息是
IOError: [Errno 13] Permission denied:
os.stat产生
posix.stat_result(st_mode=17407, st_ino=261652, st_dev=64512L, st_nlink=204, st_uid=1000, st_gid=1000, st_size=4096, st_atime=1352314677, st_mtime=1352316329, st_ctime=1352316329)
理想情况下,我希望运行一个特定的函数,就像用户从未通过删除并相应地启用root权限来调用sudo一样。
答案 0 :(得分:2)
您可能需要在以某种方式生成的进程中从root更改,因为,如果您删除root,则无法再将其恢复。您可以尝试使用os.fork()。
import os
def drop_permissions():
os.setegid(int(os.getenv("SUDO_GID")))
os.seteuid(int(os.getenv("SUDO_UID")))
def call_without_permissions(func, *args, **kw):
in_parent = os.fork()
if not in_parent:
drop_permissions()
func(*args, **kw)
os._exit(0)
else:
os.waitpid(0)