我正在编写一个python脚本,它将使用子进程Popen(我在想communication())来运行各种shell命令等。通常,我正在执行的shell命令通常是用sudo(手动)运行的。在
我正在运行使用sudo子进程的脚本。我想知道是否可以安全地将sudo从所有子进程调用中删除,或者是否需要包含它并使用stdin提供密码。在
这似乎是一个很简单的问题,但我还没有找到答案。从我的实验来看,我可能不需要sudo,但我不确定这是否真的是真的,或者它是否只是“这样工作”,因为我最近提供了我的密码。在
编辑: 我想出了如何放下和恢复根。多处理包非常简单
...
from multiprocessing import Process, Pipe
...
parent_conn, child_conn = Pipe()
p = P(input_list, child_conn)
p.start()
p.join()
return RunSyncReturn(**parent_conn.recv())
...
class P(Process):
def __init__(self, input_list, conn):
super(P, self).__init__()
self._input_list = input_list
self._conn = conn
def run(self):
drop_privileges()
process = Popen(self._input_list, stdout=PIPE)
stdout, stderr = process.communicate()
pmap = {}
pmap['stdout'] = stdout
pmap['stderr'] = stderr
pmap['exit_code'] = process.returncode
self._conn.send(pmap)
self._conn.close()
RunSyncReturn只是一个数据持有者类。当用多处理进程类启动的进程死亡时,降低的特权也随之消失。在
子流程将继承用户ID和访问权限。只要您正在运行的命令中没有一个属于其他用户并且设置了s位,它们也将以root用户身份运行。在
使用} function 。在
prexec_fn
函数来删除由Popen()
启动的子进程的权限,而不是临时更改同一进程中的特权,例如,查看^{相关问题 更多 >
编程相关推荐