各位,这就是我想要做的:我的脚本将以 root 身份运行,我希望以不同的用户身份执行各种命令(例如 ls、rm、touch 等)。
我遇到的问题是 usingpreexec_fn=os.setuid(userid))也设置了父进程的用户ID。请提出建议?preexec_fn实现这一目标的方法是错误的吗?进一步注意的是,这需要以扭曲的方式进行(我可能不是)。是getProcessOutputAndValue要走的路吗?如果是这样,该怎么做这样的事情?
print 'uid is %s' % os.getuid()
cmdstr = ['ls']
process = subprocess.Popen(cmdstr,stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=os.setuid(10033))
print 'uid of parent after child startup is %s' % os.getuid()
process.wait()
print 'uid of parent after child finished is %s' % os.getuid()
Run Code Online (Sandbox Code Playgroud)
输出:
uid is 0
uid of parent after child startup is 10033
uid of parent after child finished is 10033
Run Code Online (Sandbox Code Playgroud)
您的问题是,当您仅尝试将回调传递给 Popen 时,您意外地调用了 preexec_fn 。
试试这个:
def my_preexec_fn():
os.setuid(10033)
process = subprocess.Popen(cmdstr,stdout=subprocess.PIPE, stderr=subprocess.STDOUT, preexec_fn=my_preexec_fn)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3828 次 |
| 最近记录: |