有没有办法实现一个sudo
上下文管理器,它使用sudoers系统作为另一个用户运行封闭范围?
system('whoami') # same result as echo $USER
with sudo():
system('whoami') # root
我怀疑sudo(8)
可执行文件在这里对我有帮助,但也许我可以绑定一些C级接口?
动机:我可以几乎将这个shell脚本完全移植到python,甚至没有任何子进程,除了我目前必须system('sudo sh -c "echo %i > /dev/thatfile"' % value)
。如果我能with sudo(), open('/dev/thatfile', 'w') as thatfile: thatfile.write(str(value))
,那就太优雅了。
答案 0 :(得分:1)
我怀疑这不可能以任何简单的方式进行。升级其sudo
权限的程序必须在其文件系统权限中设置一个标志(即“setuid”位),以告诉操作系统将其作为与启动它们的用户不同的用户运行起来。除非你希望你的整个Python解释器都是setuid root,否则没有直接的方法来为Python代码的一小部分做同等的事情。
可能可以实现sudo
样式上下文管理器,而不是通过使常规Python代码运行特权,而是临时替换进行各种OS调用的库代码(例如open
使用某种代理将文件连接到setuid帮助程序。但要让这样的东西起作用会有很多工作要做,还有很多工作要确保它足够安全,可以在生产的任何地方使用。
一个想法,如果您不喜欢当前使用system
调用中的shell脚本的解决方案:使用常规Python代码使用常规用户权限编写文件。然后使用chown
来sudo
{{1}}(并在必要时移动它)。