ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在线评测(OJ)系统的沙盒开发

2021-01-23 20:33:57  阅读:249  来源: 互联网

标签:调用 OJ python ptrace 使用 动态链接库 沙盒 评测


在线评测(OJ)系统的沙盒开发

历程

因为要帮助社团开发一个OJ系统, 考虑到安全问题, 所以想要开发一个沙盒. 基本需求是可以限制进程可使用的资源, 限制进程可使用系统调用.

起初看了一些博客, 大部分是说使用cgroup的, 但是cgroup使用起来实在是太费力, 而且我的项目很小需求也不复杂, 遂抛弃cgroup.

之后在广泛的查找资料的过程中发现了ptrace, 但是ptrace的原理使得程序执行频繁中断, 很慢, 遂抛弃ptrace.

后来看一篇论文, 发现了libseccomp这个库, 配合Linux的setrlimit调用, 编译成了动态链接库供Python调用. 使用这个思路首先实现了第一版沙盒, 基本满足了我的需求. 但用到libseccomp一直给我一种大炮打蚊子的感觉. 而且python调用C动态链接库也总感觉有些复杂.

最新一般使用了Linux的一种链接技术: LD_PRELOAD. 使用这个环境变量可以使得程序在执行时优先加载它指定的动态链接库. 我编写了一套假的什么都不做的系统调用, 将它们整合编译为一个动态链接库, 使用LD_PRELOAD提高此假库的加载优先级, 成功实现了系统调用的限制. 后又发现python已经整合setrlimit, 最终实现了无C代码, 全python的结果, 而且评测效率较ptrace, libseccomp有所提高. 细节可查看我的github和gitee

github

gitee

标签:调用,OJ,python,ptrace,使用,动态链接库,沙盒,评测
来源: https://blog.csdn.net/weixin_43412579/article/details/113061365

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有