python子进程popen以其他用户身份执行

问题描述 投票:1回答:1

我正在尝试以python 3.6中与popen不同的用户身份在subprocess中执行命令,但仍将以调用脚本的用户身份执行(我计划以root身份调用它)。我正在使用线程,因此在2个线程并行执行时不要侵犯用户权限非常重要。

proc = subprocess.Popen(['echo $USER; touch myFile.txt'],
                          shell=True,
                          env={'FOO':'bar', 'USER':'www-data'},
                          stdout=subprocess.PIPE)

上面的示例仍将使用我的myFile.txt创建user_id 1000

我尝试了不同的方法:

  1. [通过复制os.environment并尝试进行Run child processes as different user from a long running Python process中的描述并更改了用户,等等(请注意,这是针对python 2的]

  2. 使用https://docs.python.org/3.6/library/subprocess.html#popen-constructorstart_new_session=True中所述进行过尝试>

  3. 我的最后一个选择是在命令前加上sudo -u username command,但我认为这不是一种优雅的方法。

我正在尝试在python 3.6中以不同于子进程popen的用户身份执行命令,但它仍将以调用脚本的用户身份执行(我计划以root身份调用它)。我正在使用...

python python-3.x subprocess
1个回答
0
投票

[标准方法是使用preexec_fn来设置gid和uid,如this answer中更详细的描述

© www.soinside.com 2019 - 2024. All rights reserved.