问题描述
背景:
我尝试通过 Process 运行子进程,并使用 os.setuid 来限制子进程的权限。
我想限制的是:
总的来说,我尝试使用源来加载不是来自本地的部分,例如来自 minio 存储。
尝试使用子进程运行源码部分,并使用linux用户控制使子进程更安全(可以控制)。
问题来了
我在windows上开发程序,逻辑,父进程会加载本地部分,比如config.py(父进程可以是root用户),显示:
通过 print(sys.modules)
,子进程不使用父进程加载的模块部分。(不获取名为 config 的键,值指向 config.py)
要在 linux 上运行,我执行 chmod 0700
更改权限。
通过print(sys.modules)
,显示子进程已经加载了config
(有一个名为 config 的键,值指向 config.py)
另外,谁能告诉我,如何通过其他方式获取目标(运行源部分而不是本地更安全)?
非常感谢。
对比记录
- 如果进程之前没有加载 config.py
我使用 root 控制运行 python shell 并使用 os.setuid 更改其他用户,import config
将获得
权限被拒绝错误。
- 加载 config.py 之前
同上,但先加载配置,然后使用os.setuid更改用户,最后执行import config
,运行正常。
这是因为for:python进程会首先从sys.modules中找到模块,这是一个模块缓存??
- 子进程中 sys.modules 的弹出键
似乎没问题,当我执行 sys.modules.pop("config")
(:means,do import config
因权限被拒绝而失败)
还有更好的或 Pythonic 的吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)