微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么子进程在linux上的python程序中继承父进程的sys.modules? 背景:问题来了对比记录

如何解决为什么子进程在linux上的python程序中继承父进程的sys.modules? 背景:问题来了对比记录

背景:

我尝试通过 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 的吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。