为什么子进程在linux上的python程序中继承父进程的sys.modules?

时间:2021-04-14 02:01:56

标签: python linux process sys

背景:

我尝试通过 Process 运行子进程,并使用 os.setuid 来限制子进程的权限。

我想限制的是:

  • linux 用户权限控制不读取磁盘上的文件;

  • 通过 1,限制子进程加载自定义部分,例如 config.py 或其他。

总的来说,我尝试使用源来加载不是来自本地的部分,例如来自 minio 存储。

尝试使用子进程运行源码部分,并使用linux用户控制使子进程更安全(可以控制)。

问题来了

我在windows上开发程序,逻辑,父进程会加载本地部分,比如config.py(父进程可以是root用户),显示:

通过 print(sys.modules) ,子进程不使用父进程加载的模块部分。(不获取名为 config 的键,值指向 config.py)

要在 linux 上运行,我执行 chmod 0700 更改权限。

通过print(sys.modules),显示子进程已经加载了config(有一个名为 config 的键,值指向 config.py)

为什么会有这种不同?我从未搜索过任何相关内容。

另外,谁能告诉我,如何通过其他方式获取目标(运行源部分而不是本地更安全)?

非常感谢。

对比记录

  1. 如果进程之前没有加载 config.py

我使用 root 控制运行 python shell 并使用 os.setuid 更改其他用户,import config 将获得 权限被拒绝错误。

  1. 加载 config.py 之前

同上,但先加载配置,然后使用os.setuid更改用户,最后执行import config,运行正常。

这是因为for:python进程会首先从sys.modules中找到模块,这是一个模块缓存??

  1. 子进程中 sys.modules 的弹出键

似乎没问题,当我执行 sys.modules.pop("config")(:means,do import config 因权限被拒绝而失败)

还有更好的或 Pythonic 的吗?

0 个答案:

没有答案