Tôi có một kịch bản Python mà tôi muốn để có thể được chạy như là người dùng hệ thống guybrush
với UID 200 và nhóm guybrush
với GID 200.setuid/setgid wrapper cho kịch bản python
Tại thời điểm kịch bản Python của tôi (nằm ở /path/to/script.py
) trông như thế này:
#!/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 wrapper cố gắng của tôi (scriptwrap.c
) trông như thế này:
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char *argv[]) {
setuid(geteuid());
setgid(getegid());
return execv("/path/to/script.py", argv);
}
tôi thứ en biên dịch, chown và chmod các wrapper như sau:
$ gcc scriptwrap.c -o scriptwrap
$ chown guybrush:guybrush scriptwrap
$ chmod 6755 scriptwrap
Tuy nhiên, khi tôi chạy scriptwrap, tôi nhận được kết quả như sau:
uid: 1000
euid: 1000
gid: 200
egid: 200
Vì vậy, đối với một số lý do duy nhất GID đang được thiết lập (của tôi UID bình thường là 1000). Tôi có thể làm gì để sữa nó?
Edit: Nếu tôi chown kịch bản để root:root
và chạy nó, UID, euid, GID, và eGID đều thiết lập để 0.
Ngoài ra, đây là trên Ubuntu 12.04.4 LTS.