使用gcc / g ++时抑制系统调用

时间:2011-03-03 20:50:46

标签: linux gcc g++

我的大学局域网中有一个门户网站,人们可以将代码上传到C / C ++编程难题中。我想使门户网站安全,以便人们无法通过提交的代​​码进行系统调用。可能有几种解决方法,但我想知道我是否可以通过设置一些聪明的gcc标志来做到这一点。默认情况下,libc似乎包含<unistd.h>,它似乎是声明系统调用的基本文件。有没有办法告诉gcc / g ++在编译时'忽略'这个文件,这样unistd.h中声明的所有函数都不能被访问?

3 个答案:

答案 0 :(得分:3)

限制对标题文件的访问不会阻止您访问libc函数:如果您链接到libc,它们仍然可用 - 您只是没有原型(和宏)交出但你可以自己复制它们。

并且不与libc链接也无济于事:系统调用可以通过内联汇编程序直接进行(甚至是涉及跳转到数据的技巧)。

我认为这不是一般的好方法。在完全独立的虚拟沙箱中运行上传的代码(通过QEMU或类似的东西)可能是更好的方法。

答案 1 :(得分:3)

chroot("/var/jail/empty"); setuid(65534);不够好的一些特殊原因(假设65534有明显的限制)?

答案 2 :(得分:2)

-D可以覆盖单个函数名称。例如:

gcc file.c -Dchown -Dchdir

或者你可以自己设置包含守卫:

gcc file.c -D_UNISTD_H

然而,智能提交者可以使用#undef轻松恢复其效果:)