Python sudo权限

时间:2013-02-12 17:49:47

标签: python sudo

我有一个脚本(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. 运行sudo python A.py会保留脚本生命周期的root权限,还是会丢失sudo timeout(我相信默认值为15分钟),就像普通的终端一样?
  2. 有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

  

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

它将保留脚本生命周期的root权限。

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

答案 1 :(得分:0)

您可以使用另一个运行python B.py的脚本,此脚本由root拥有,并设置setuid标志。 (或者,给B.py一个合适的shebang并使其可以直接执行。)然后随时运行它将以root身份运行它。 (当然,您需要确保它受到保护,以便它只能正常运行,并且无法执行任意代码,从而提供权限提升。)