python的快速沙盒实现

catbox的Python项目详细描述


沙箱是一种机制,它提供了一组不受严格控制的资源 供来宾程序运行。它们用于安全和测试目的。

沙盒在包管理中有许多用途:

一。在构建过程中,我们不希望包修改主机操作 系统,而他们正在配置或编译。我们希望他们 限制在其临时生成目录中。拒绝写入 此目录之外的操作是 这里有个沙箱。

2.而不是像更改权限或 文件的所有权,我们可以只记录它们,并在生成的包中标记。 这样我们就不需要成为根用户,就可以用 这些财产。

三。我们可以记录许多构建操作,并对它们进行分析以查看实际的 例如,生成包的依赖项。

四。我们可以在一个临时目录中构建包,但是让它认为 在根目录下运行,所有内容都是只读映射的 在里面。这可以大大简化构建脚本。

有两种方法可以在没有 使用特殊的内核模块:

一。我们可以用ld_preload覆盖glibc的函数。因为这需要 在新的shell中执行脚本,在 构建器和脚本既繁琐又繁琐。

  1. 我们可以用内核ptrace接口拦截系统调用。

我们决定采用后一种方式。已经有很好的比赛了 python的沙盒框架,称为subterfugue。除了一小部分 c绑定ptrace调用,完全用python编写。 不幸的是,用python处理每一个系统调用 建农场要慢。有一千多个包裹,而且 其中一些像openoffice.org或kdebase需要花费大量时间 即使在高端计算机上也能编译。

因此,我们为PiSi编写了一个小型沙箱模块CATBOX Pardus Linux的管理器)。它完全是用C写的,而且不会 提供自定义系统调用挂钩或对 客座环境喜欢诡计。

但是,作为PiSi的一个子模块开始,它现在是 更通用的沙盒模块,可以通用使用。

事件挂钩:

  • 子进程初始化(PID):在父进程上调用事件挂钩,但 子级初始化为跟踪后,父级通知之前 孩子继续。子进程的PID是唯一的 争论。(在版本1.4+中提供
  • child_dead_unexpected(PID):当我们得到一个 来自孩子的信号/事件,但孩子已经死了。的PID 子进程是作为唯一的参数给出的。(版本中提供 1.4+

依赖关系:

  • PCRE(可选):如果启用,路径可以用常规 表达。只需将–enable pcre附加到setup.py命令。
  • 证明:(https://github.com/Yelp/Testify)证明用于 仅限单元测试。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
尝试执行abox SWRL API命令时发生java错误   java Hibernate对象状态   java如何使用Spring从JSON获取相关对象?   安卓获取文件的最后修改日期而不是Java中的最后创建日期   java如何在旧JDK版本和新JDK版本之间切换,以及在这种情况下如何设置系统变量值?   java将按钮OnClick与RecyclerView in Fragment中的行OnClick分开   具有高级接口的java DynamoDB扫描   在Java中从静态成员调用非静态方法   mockito junit未涵盖接口中的java方法   java Eclipse包不存在   java Ebean模型将自身映射到@OneToMany   使用java将刮取的数据从网页存储到json对象   多线程Java GUI未更改