gpt4 book ai didi

python - 杀死通过 sudo 启动的子进程

转载 作者:太空狗 更新时间:2023-10-30 01:08:29 25 4
gpt4 key购买 nike

在我正在进行的项目中,有一些代码使用 sudo 启动了一个长时间运行的进程:

subprocess.Popen(['sudo', '/usr/bin/somecommand', ...])

我想在父进程退出时清理这个进程。目前,子进程在父进程退出时继续运行(当然,重新附加到 init)。

我不确定这个问题的最佳解决方案。该代码仅限于通过 sudo 运行某些命令,并且授予运行 sudo kill 的一揽子权限充其量是粗略的。

我没有可以关闭的子进程的打开管道(子进程未从标准输入读取),我无法修改子进程的代码。

在这种情况下是否还有其他机制可行?

最佳答案

首先我只是回答问题。虽然我不认为这是一件好事,但这是你要求的。我会将那个子进程包装到一个可以监听 stdin 的小程序中。然后你可以 sudo 那个程序,它将能够在没有 sudo 的情况下运行该进程,并且会知道它的 pid 并拥有所需的权限当您通过 stdin 请求它时终止进程。

不过一般这种情况都是sudo没有密码,安全性差。最常见的技术是使用降低程序的权限,而不是提升它们。在这种情况下,您应该创建一个由 super 用户启动的运行程序,而不是它以降低权限启动您的主程序并监听管道进行通信。当需要运行一个命令时,你的主程序会告诉运行程序,运行程序会完成这项工作。当需要终止命令时,您再次通过管道将其告知运行程序。

通用规则是:

  1. 如果您需要 super 用户权限,您应该将它们授予父进程。
  2. 如果子进程需要执行特权操作,它会请求顶级进程为他执行此操作。
  3. 顶层流程应尽可能小,并尽可能少做。它越大,造成的安全漏洞就越多。

这就是许多应用程序所做的。我想到的第一个例子是 Apache 网络服务器(至少在 *nix 上),它有一个小的顶级程序和预 fork 的工作程序,这些程序不是以 root/wheel/whatever-else-is-the-superuser- 运行的用户名。

关于python - 杀死通过 sudo 启动的子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21886828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com