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第三方库


热门话题
java如何在sqlite数据库中保存特定列的历史记录   java如何更改/更新timeseriechart名称(JFreeChart)   java如何将整数转换为可绘制的   汇编什么解释Java的字节码   java查找已编译的类版本号   我应该什么时候在ColdFusion应用程序中使用Java?   java当一个实体的两个字段为(unique=true)时,如何处理JPA异常?   java为什么在所有其他实例都正确的情况下返回错误的布尔值?   java Hibernate每次都准备语句   java停留在平均字长上   对Java和日语字符进行编码   java如何将导致异常的方法的错误消息传递给侦听器中的onTestFailure方法   java代码没有打印结果   java为什么私有内部接口的方法必须是公共的?   休眠发生错误。有关详细信息,请参阅错误日志。JAVAlang.NullPointerException