【发布时间】:2014-08-23 20:28:06
【问题描述】:
我有一个 Python 脚本,我希望能够以 UID 200 的系统用户 guybrush 和 GID 200 的组 guybrush 的身份运行。
目前我的 Python 脚本(位于 /path/to/script.py)如下所示:
#!/usr/bin/env python2
import os
print "uid: %s" % os.getuid()
print "euid: %s" % os.getgid()
print "gid: %s" % os.geteuid()
print "egid: %s" % os.getegid()
我尝试的 C 包装器 (scriptwrap.c) 如下所示:
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char *argv[]) {
setuid(geteuid());
setgid(getegid());
return execv("/path/to/script.py", argv);
}
然后我编译、chown 和 chmod 包装器如下:
$ gcc scriptwrap.c -o scriptwrap
$ chown guybrush:guybrush scriptwrap
$ chmod 6755 scriptwrap
然而,当我运行 scriptwrap 时,我得到以下输出:
uid: 1000
euid: 1000
gid: 200
egid: 200
所以由于某种原因,只设置了 GID(我的正常 UID 是 1000)。我该怎么做才能解决这个问题?
编辑:如果我将脚本改成root:root 并运行它,UID、eUID、GID 和 eGID 都设置为 0。
另外,这是在 Ubuntu 12.04.4 LTS 上。
【问题讨论】:
标签: python permissions wrapper elevated-privileges setuid