buk*_*zor 9 python sudo contextmanager
是否有任何可能的方法来实现sudo使用sudoers系统作为另一个用户运行封闭范围的上下文管理器?
system('whoami') # same result as echo $USER
with sudo():
system('whoami') # root
Run Code Online (Sandbox Code Playgroud)
我怀疑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)).
我怀疑这不可能以任何简单的方式实现。升级权限的程序sudo必须在其文件系统权限中设置一个标志(即“setuid”位),以便告诉操作系统以与启动它们的用户不同的用户身份运行它们。除非您希望整个 Python 解释器都是 setuid root,否则没有直接的方法可以对 Python 代码的一小部分执行等效操作。
可以想象,实现样式上下文管理器不是通过使常规 Python 代码以特权运行的方式实现,而是通过使用某种将其连接到的代理sudo临时替换进行各种操作系统调用(例如读取文件)的库代码。opensetuid 帮助程序。但要让这样的东西发挥作用需要做大量的工作,并且需要做更多的工作来确保它足够安全,可以在生产中的任何地方使用。
如果您不喜欢当前通过调用使用 shell 脚本的解决方案,一个想法是system:使用常规 Python 代码和常规用户权限编写文件。然后chown通过调用(并在必要时移动它)进行sudo调用。
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |