沙箱公开访问GCC 我想向Linux的Web服务添加一个特性,允许不信任的用户将源代码上传到一个小型C++程序,并将该代码自动保存到服务器上的文件并用GCC编译,然后执行,捕获标准输出。(这是一项与ideone.com、spoj.pl、topcoder.com、codechef.com或许多其他网站类似的功能。)
我的问题是: 问题1。如何对可执行文件进行沙箱处理,以防止恶意用户试图破坏文件系统或访问网络等 问题2。是否有一种公平/准确的方法来对进程的系统资源进行rashoning,例如处理器时间和内存使用沙箱公开访问GCC 我想向Linux的Web服务添加一个特性,允许不信任的用户将源代码上传到一个小型C++程序,并将该代码自动保存到服务器上的文件并用GCC编译,然后执行,捕获标准输出。(这是一项与ideone.com、spoj.pl、topcoder.com、codechef.com或许多其他网站类似的功能。),c++,linux,gcc,network-security,C++,Linux,Gcc,Network Security,我的问题是: 问题1。如何对可执行文件进行沙箱处理,以防止恶意用户试图破坏文件系统或访问网络等 问题2。是否有一种公平/准确的方法来对进程的系统资源进行rashoning,例如处理器时间和内存使用 克鲁特监狱 乌利米特 通过运行此操作的uid修补内核so套接字()失败 克鲁特监狱 乌利米特 通过运行此操作的uid修补内核so套接字()失败 为什么要投否决票?如果你打算投反对票,请留下评论。这更像是一个管理问题。你可能想问问社区。@Tom Kerr:结果是需要一个编程解决方案。@Joshua Ya
为什么要投否决票?如果你打算投反对票,请留下评论。这更像是一个管理问题。你可能想问问社区。@Tom Kerr:结果是需要一个编程解决方案。@Joshua Yah,看起来是这样。我认为chroot和所有这些对他们来说都是合适的。我想他们至少能告诉你他们能做什么,所以你没有重新发明轮子。为什么要投反对票?如果你打算投反对票,请留下评论。这更像是一个管理问题。你可能想问问社区。@Tom Kerr:结果是需要一个编程解决方案。@Joshua Yah,看起来是这样。我认为chroot和所有这些对他们来说都是合适的。我想他们至少能告诉你他们能做些什么,这样你就不用再发明轮子了。而且把机器放在你的私人数据和网络够不着的地方。并制定了一些快速恢复方案,以便在不可避免地受到损害时启动并运行它。也许不用麻烦了。编译器真的,真的不是为了安全而设计的。这就是为什么你以被监禁用户的身份运行编译器,你不需要修补内核。在真正的存根libc之前链接存根libc,并在存根库中创建一个nop就足够了。但是您还需要再存根一些,例如
syscall
@MSalters,所有这些都不能阻止用户手动调用syscalls。这就是Joshua建议修补内核的原因。@ams:你能澄清一下怎么做吗?如果编译器将syscall(0)
转换为(void)(0)
,那么执行结果将不会到达内核。没有“手动”方式进行系统调用;您只执行编译器输出,与一组固定的库相链接。(您可能不应该把作为
的汇编程序放在chroot监狱中),并将机器放在您的私人数据和网络够不着的地方。并制定了一些快速恢复方案,以便在不可避免地受到损害时启动并运行它。也许不用麻烦了。编译器真的,真的不是为了安全而设计的。这就是为什么你以被监禁用户的身份运行编译器,你不需要修补内核。在真正的存根libc之前链接存根libc,并在存根库中创建一个nop就足够了。但是您还需要再存根一些,例如syscall
@MSalters,所有这些都不能阻止用户手动调用syscalls。这就是Joshua建议修补内核的原因。@ams:你能澄清一下怎么做吗?如果编译器将syscall(0)
转换为(void)(0)
,那么执行结果将不会到达内核。没有“手动”方式进行系统调用;您只执行编译器输出,与一组固定的库相链接。(您可能不应该在chroot监狱中拥有作为
的汇编程序)