0

我有一个脚本 ( A.py) 将B.py动态生成新进程 () 但这些脚本需要创建为root. 如果我跑

$ python A.py

作为普通用户,然后当我运行

>>> subprocess.Popen('sudo nohup python B.py &') 

我需要输入root密码才能开始。我真的不想那样做。


现在如果我运行第一个脚本root

$ sudo python A.py

然后我就可以跑了

>>> subprocess.Popen('nohup python B.py &')

像平常一样。我担心的是 sudo 的超时时间,它会降到正常权限,然后当A.py想要生成/杀死一个进程时,它会要求输入密码并停止按预期工作。

  1. 运行会在脚本的生命周期内保持 root 权限,还是会像普通终端一样sudo python A.py失去它(我相信默认为 15 分钟)?sudo timeout
  2. 有没有更好的方法来做到这一点?
4

2 回答 2

4

运行 sudo python A.py 会在脚本的生命周期内保持 root 权限,还是会sudo timeout像普通终端一样失去它(我相信默认为 15 分钟)?

它将在脚本的整个生命周期内保持 root 权限。

运行命令的 root 权限不会被撤销;那不是超时的作用。超时只是控制用户在执行sudo命令时必须输入密码的频率。由于您现在具有 root 权限的脚本将直接执行nohup python B.py,而不是sudo nohup python B.pysudo 超时不会发挥作用。

于 2013-02-12T17:53:43.737 回答
0

您可以有一个额外的脚本来运行python B.py,该脚本由 root 拥有,并setuid设置了标志。(或者,提供B.py适当的 shebang 并使其直接可执行。)然后在任何时候运行它都会以 root 身份运行它。(然后您自然需要确保它受到保护,以便它只能正确运行并且不能执行任意代码,从而提供权限提升。)

于 2013-02-12T17:55:34.580 回答