gpt4 book ai didi

python:sudo上下文管理器?

转载 作者:太空狗 更新时间:2023-10-29 20:31:31 26 4
gpt4 key购买 nike

是否有任何可能的方法来实现 sudo 上下文管理器,它使用 sudoers 系统作为另一个用户运行封闭范围?

system('whoami')  # same result as echo $USER
with sudo():
system('whoami') # root

我怀疑 sudo(8) 可执行文件是否能帮到我,但也许有一些我可以绑定(bind)到的 C 级接口(interface)?


动机:我几乎可以将这个 shell 脚本完全移植到 python 而无需任何子进程,除了我目前必须 system('sudo sh -c "echo %i >/dev/thatfile"' % 值)。如果我可以 with sudo(), open('/dev/thatfile', 'w') as thatfile: thatfile.write(str(value)) 就太优雅了。

最佳答案

我怀疑这不可能以任何简单的方式实现。像 sudo 这样提升它们权限的程序必须在它们的文件系统权限中设置一个标志(这是“setuid”位),以便告诉操作系统以不同的用户身份运行它们那开始了他们。除非您希望整个 Python 解释器都是 setuid root,否则没有直接的方法可以只对一小部分 Python 代码执行等效操作。

可以想象,实现 sudo 风格的上下文管理器不是通过让常规 Python 代码以特权方式运行,而是通过临时替换进行各种操作系统调用的库代码(例如 opening 一个文件)用某种代理将它连接到一个 setuid 帮助程序。但是要让这样的东西发挥作用需要做很多工作,而且要确保它足够安全以便在生产中的任何地方使用,还需要做很多工作。

一个想法,如果您不喜欢当前使用来自 system 调用的 shell 脚本的解决方案:使用常规 Python 代码编写文件,并具有您的常规用户权限。然后使用 sudo 调用 chown(并在必要时移动它)。

关于python:sudo上下文管理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22344199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com