BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #88342同步于 2015/11/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

有人对docker熟悉吗?

nuanyangyang
2015/11/21镜像同步9 回复
粗略看了一眼,docker包括不可变的image(整个文件系统)、可以mount的overlay空间、隔离的进程空间等。而且不是真的虚拟机,还是在同一个内核上跑。这种隔离技术看上去可以改进OJ的实现,起码那些往OJ提交恶意代码能干出的最坏的事情就是多占用一些CPU时间,以及一些隔离的存储空间,最后还是要被杀掉。不知道BOJ是不是已经用了这种技术。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zengkui机器人#1 · 2015/11/22
一个代码在一个docker镜像里judge,这效率太低了吧, 有点牛刀杀鸡的感觉啊, 可能OJ采用多进程模式就能解决恶意提交的问题, 一个父进程监控各个子进程的执行时间就行了。
nuanyangyang机器人#2 · 2015/11/22
【 在 zengkui 的大作中提到: 】 : 一个代码在一个docker镜像里judge,这效率太低了吧, 有点牛刀杀鸡的感觉啊, 可能OJ采用多进程模式就能解决恶意提交的问题, 一个父进程监控各个子进程的执行时间就行了。 也可以一个镜像循环不断接受输入,这样输入足够多的情况下效率基本上可以和没有docker平衡吧。但是多进程不能解决隔离问题吧,恶意程序还是可以调用rm -rf什么的,我记得以前912的那个老oj没有一点防护措施的。 上次去北航(是北航吗?记不太清了)看他们展示过他们的安全OJ,他们真的使用了重量级的沙盒,但执行速度比本地效率低太多了。
chwlfg机器人#3 · 2015/11/22
docker 主要还是用来提供一些服务的吧,主要是用于云计算上,极大的提高资源利用率(相比虚拟机)和软件的交付、部署效率。安全性反而是 docker 的槽点。
zengkui机器人#4 · 2015/11/22
安全性这种问题可以通过用户权限来控制。 judge用户只负责执行二进制然后产生汇报,而其他数据等东西可以放在其他用户下面。 【 在 nuanyangyang 的大作中提到: 】 : : 也可以一个镜像循环不断接受输入,这样输入足够多的情况下效率基本上可以和没有docker平衡吧。但是多进程不能解决隔离问题吧,恶意程序还是可以调用rm -rf什么的,我记得以前912的那个老oj没有一点防护措施的。 : 上次去北航(是北航吗?记不太清了)看他们展示过他们的安全OJ,他们真的使用了重量级的沙盒,但执行速度比本地效率低太多了。
june0334机器人#5 · 2015/11/22
听不懂。。。只是觉得很nb的样子。。。
yizhi机器人#6 · 2015/11/22
暖神~
xydaxia机器人#7 · 2015/11/22
我比较喜欢docker的热部署,很快一套环境就噼里啪啦出来了。很爽 发自「贵邮」
YouXia机器人#8 · 2015/11/22
目前市场上出来的OJ平台,我知道有人是这么搞的: SandBox作为父进程去执行用户提交的程序,通过ptrace和setrlimit来拦截危险的syscall,最好把sandbox放到docker容器里,确保安全。 https://gist.github.com/3845714 这个是一个简单的小实例,不是我写的,以前见过,刚才找了下。
CAPITAL机器人#9 · 2015/11/23
我当时自己的毕业设计就是用docker重新写了个OJ。性能其实反而不是问题,只要保证所有程序运行的环境一致即可,而且采用docker还非常有利于多judge的部署。另外它还能限制CPU数量等,对于有特殊限制的场景下(例如禁用多线程技术)非常有用。 但一个比较危险的事情是,一旦真的逃逸出docker之后,侵入者可以直接拿到系统的root。