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
想要生成或结束一个进程时,它会要求输入密码,这样就无法按预期工作了。
- 运行
sudo python A.py
会在脚本运行期间保持root
权限吗,还是会像普通终端那样因为sudo超时
(我记得默认是15分钟)而失去权限? - 有没有更好的方法来实现这个?
2 个回答
0
你可以有一个额外的脚本来运行 python B.py
,这个脚本由超级用户(root)拥有,并且设置了 setuid
标志。(另外,你也可以给 B.py
添加一个合适的开头标记,让它可以直接执行。)这样的话,随时运行这个脚本就会以超级用户的身份执行。(当然,你还需要确保这个脚本是安全的,只能在合适的情况下运行,不能执行任意代码,以防止权限提升的问题。)
4
运行
sudo python A.py
会在脚本执行期间保持超级用户权限吗?还是说像普通终端那样,会因为sudo timeout
(我记得默认是15分钟)而失去权限呢?
在脚本运行期间,它会保持超级用户权限。
运行的命令不会失去超级用户权限;超时设置并不是用来撤销权限的。超时只是控制用户在使用 sudo
命令时需要多频繁输入密码。因为你的脚本现在有了超级用户权限,它会直接执行 nohup python B.py
,而不是 sudo nohup python B.py
,所以超时设置就不会影响到它。