首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UNIX ptrace()阻止子进程的系统调用

UNIX ptrace()阻止子进程的系统调用
EN

Stack Overflow用户
提问于 2011-01-16 19:34:37
回答 1查看 1.2K关注 0票数 3

我正在为编程竞赛开发一个评分器。基本上,评分员必须在一个“隔离”的过程中运行解决方案程序。因此,我希望解决方案不要调用任何有害的系统调用(如system()、fork()等)。我可以使用ptrace()来实现这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2016-06-02 07:30:40

是的,您可以使用ptrace()通过PTRACE_SYSCALL选项来阻止某些系统调用。下面是一个使用此功能的项目:

https://github.com/t00sh/p-sandbox/blob/master/p-sandbox.c

如果您只针对Linux,我建议使用seccomp,这是一种更快的技术,用于将某些syscall列入白名单/黑名单或限制它们的参数。

另一种选择是谷歌的Native Client。此项目提供了应用程序沙箱的跨平台实现。

您还可以在容器(如docker或LXC )中以非特权用户的身份运行应用程序,以限制损坏。

单独使用LD_PRELOAD是不安全的,因为可执行文件可能带有自己的syscall实现,并绕过底层的libc。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4705070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档