在Python中删除/启用root特权打开文件



我正在遇到问题,这是在打开/tmp中的文件时删除根特权。这是有问题的行:

open(filepath, 'wb')

当程序不使用sudo命令运行时,一切正常,这是我这样的权限。

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)

理想情况下,我希望运行一个特定的函数,就好像用户从未通过相应地删除和启用根特权来调用sudo。

您可能需要在以某种方式产生的过程中从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)

相关内容

最新更新