libsandbox / pysandbox文档

时间:2013-01-21 13:02:47

标签: sandbox

我想为在线判断项目执行代码。

我找不到libsandbox的Python包装器的文档 我找到了sample2.py和一些test cases,但没有解释。

创建沙箱时的默认值是什么? 它默认是安全的吗?

我想执行不受信任的代码和 - 限制CPU - 限制记忆 - 限制执行时间 - 仅允许对特定文件夹进行读/写访问,并限制此文件夹的大小。 - 阻止网络IO。 - 阻止执行其他程序。

此代码结合了我发现的两个例子:

cookbook = {
'args': args[1:],               # targeted program
'stdin': sys.stdin,             # input to targeted program
'stdout': sys.stdout,           # output from targeted program
'stderr': sys.stderr,           # error from targeted program
    'jail': './foo',
    'owner': 'nobody',
'quota': dict(wallclock = 30000,# 30 sec
              cpu = 2000,       #  2 sec
              memory = 8388608, #  8 MB
              disk = 1048576)}  #  1 MB
# create a sandbox instance and execute till end
s = Sandbox(**cookbook)
s.run()
s.result == S_RESULT_OK

配额限制中的磁盘是什么?它是否限制脚本在此次运行中写入的总字节数或文件夹的大小? 设置所有者对没人做什么? 我的示例中的代码是否会阻止执行任意代码,阻止网络IO并阻止访问jailed文件夹之外的文件?

由于

1 个答案:

答案 0 :(得分:3)

  

创建沙箱时的默认值是什么?它默认是安全的吗?

  • 默认情况下,Sandbox实例是允许的。除非您指定quota,否则它会授予无限制的配额;它允许除导致多处理的所有系统调用(即fork()vfork()clone(),...)和进程间通信(即waitid()ptrace(),...)除非您使用自定义政策过滤系统调用事件。
  • sample2.py一起分发的示例代码(libsandbox)是限制性白名单沙盒的最小工作示例。使用它作为监督程序的框架。
  

配额限制中的磁盘是什么?它是否限制脚本在此次运行中可以写入的总字节数或文件夹的大小?

  • disk配额限制目标程序可以写入所有符合条件的文件系统的总字节数(即支持配额限制且能够生成SIGXFSZ信号的文件系统)。
  • 如果程序在ext3ext4文件系统上写入常规文件,那通常很重要;但是写入标准输出流或/dev/null并不计入配额。不过,您可以在自定义策略中实现基于文件夹的配额。
  

owner设置为nobody会有什么作用?

  • 代表用户nobody执行目标计划。 owner参数包含操作系统级服务setuid()。在setuid()nobody之后,目标程序拥有操作系统授予用户nobody的所有权限,并且没有任何其他权限。
  • 请注意,您必须是超级用户才能指定除您自己之外的owner
  

我示例中的代码是否会阻止执行任意代码,阻止网络IO并阻止访问jailed文件夹之外的文件?

  • 不完全是。程序生成的所有系统调用都会报告给Sandbox,但您必须插入一个显式阻止与网络IO相关的系统调用的策略模块。或者,您可以针对白名单过滤所有系统调用,如示例代码sample2.py所示。
  • 另请注意,您必须是超级用户才能指定根目录jail以外的/
  

免责声明:我是libsandbox的作者。