我有一个脚本(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
想要生成/终止进程时,它会要求输入密码并停止按预期工作。
sudo python A.py
会保留脚本生命周期的root权限,还是会丢失sudo timeout
(我相信默认值为15分钟),就像普通的终端一样?答案 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身份运行它。 (当然,您需要确保它受到保护,以便它只能正常运行,并且无法执行任意代码,从而提供权限提升。)