python - python os.fork() 用于在降级凭据下执行操作
问题描述
我正在寻找在 python 中实现以下命令。
su ${USER} -c "whoami"
它只是创建在不同权限下运行的子进程,并将结果whoami
返回给父进程。
os.fork()
由于 bash 的工作原理,一旦智利进程终止其工作,就应该使用while 将结果检索到父进程来完成。
def runWhoamiOtherUser(self):
pid = os.fork()
if pid == 0:
os.setuid(getpwnam(os.environ['USER'])[2])
x = getpass.getuser()
return x
pid, status = os.waitpid(pid, 0)
这是正确的方法吗?
解决方案
它已作为新功能添加到 Python 3.9 中的 subprocess 模块中,添加到 subprocess.Popen 构造函数中:
3.9 版中的新功能。
如果 user 不是 None,setreuid() 系统调用将在子进程执行之前在子进程中进行。如果提供的值是一个字符串,它将通过 pwd.getpwnam() 查找并使用 pw_uid 中的值。如果该值是整数,则将逐字传递。(仅限 POSIX)
https://docs.python.org/3.9/library/subprocess.html
在 3.9 之前,最好使用相同的 setreuid() 调用。如果您更喜欢用户,也可以使用相同的工具来更改组。该代码已添加到此提交中,如果您想检查设置的细节并可能将相关部分复制粘贴到您的程序中:https ://github.com/python/cpython/commit/2b2ead74382513d0bb9ef34504e283a71e6a706f
推荐阅读
- html - 如何使引导示例全宽
- sql-server - 我有 10 名员工,实时数据即将到来,而我需要平均分配插入每条记录(插入记录)
- javascript - 将视频源更改为 blob / ObjectURL
- python - 如何将带有斜杠的字符串从视图传递到模板?
- c++ - 等待锁定的互斥锁时线程会休眠吗?
- scala - IntelliJ 无法识别 scala 导入
- python - 在 aws 中使用 tensorflow 时出现资源耗尽错误
- java - 在我的情况下,我有哪些选项可以防止 Java 中的重复代码
- c# - EF Core:嵌套预加载集合的排序依据
- javascript - 嗨,我想将数组上的 javascript for 循环的输出从垂直传输到水平