我想为在线判断项目执行代码。
我找不到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文件夹之外的文件?
由于
答案 0 :(得分:3)
创建沙箱时的默认值是什么?它默认是安全的吗?
Sandbox
实例是允许的。除非您指定quota
,否则它会授予无限制的配额;它允许除导致多处理的所有系统调用(即fork()
,vfork()
,clone()
,...)和进程间通信(即waitid()
, ptrace()
,...)除非您使用自定义政策过滤系统调用事件。sample2.py
一起分发的示例代码(libsandbox
)是限制性白名单沙盒的最小工作示例。使用它作为监督程序的框架。配额限制中的磁盘是什么?它是否限制脚本在此次运行中可以写入的总字节数或文件夹的大小?
disk
配额限制目标程序可以写入所有符合条件的文件系统的总字节数(即支持配额限制且能够生成SIGXFSZ
信号的文件系统)。ext3
或ext4
文件系统上写入常规文件,那通常很重要;但是写入标准输出流或/dev/null
并不计入配额。不过,您可以在自定义策略中实现基于文件夹的配额。将
owner
设置为nobody
会有什么作用?
nobody
执行目标计划。 owner
参数包含操作系统级服务setuid()
。在setuid()
到nobody
之后,目标程序拥有操作系统授予用户nobody
的所有权限,并且没有任何其他权限。owner
。我示例中的代码是否会阻止执行任意代码,阻止网络IO并阻止访问jailed文件夹之外的文件?
sample2.py
所示。 jail
以外的/
。免责声明:我是
libsandbox
的作者。