我正在尝试以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
我尝试了不同的方法:
[通过复制os.environment并尝试进行Run child processes as different user from a long running Python process中的描述并更改了用户,等等(请注意,这是针对python 2的]
使用https://docs.python.org/3.6/library/subprocess.html#popen-constructor按start_new_session=True
中所述进行过尝试>
我的最后一个选择是在命令前加上sudo -u username command
,但我认为这不是一种优雅的方法。
我正在尝试在python 3.6中以不同于子进程popen的用户身份执行命令,但它仍将以调用脚本的用户身份执行(我计划以root身份调用它)。我正在使用...
[标准方法是使用preexec_fn
来设置gid和uid,如this answer中更详细的描述