在Linux中更改程序的权限

时间:2016-09-11 06:39:40

标签: c++ linux permissions

我的问题类似于question,但我没有得到答案。

我正在设计一名法官。

  

在线评判系统的用户提交他们的源代码   服务器程序编译并运行它。所以服务器程序必须   保持服务器的安全。

用户可以使用很多东西来更改服务器。

如何更改程序的权限?因此编译后的代码除了打印东西外无法做任何事情!

P.S:寻找怀疑词并不是一个好主意。例如,用户可以在C ++中使用以下命令而不是单词system

#define glue(a,b) a ## b
glue(sys,tem) ("rm *");  //DO NOT RUN THIS CODE

因此,实际上用户使用以下代码而不使用单词system

system ("rm *"); //DO NOT RUN THIS CODE

2 个答案:

答案 0 :(得分:2)

您有两个选择:您当前正在研究的选项 - 尝试制作您的编译器,也就是运行用户提供的源代码检测服务器进程"漏洞利用"。那可能是很难。如果您允许用户向您发送c ++源代码,则可以使用很多的内容。我想你需要一些真正的c ++专家才能获得这个解决方案,即使是半途安全"。

因此,选项二:您必须在某种沙箱中运行该用户提供的输入。例子可能是:

  1. 一个docker容器(但肯定:一个非特权容器;由用户运行,而不是root)
  2. 虚拟机
  3. 如果你认真对待自己所做的事情,你可能会首先关注选项2(因为这会给你带来很多好处,成本中等);但你肯定也想看看选项1(因为可以从很多中学习)。

答案 1 :(得分:1)

您可以在chroot jail中运行它们,如果没有人真正可以执行重要操作,则将用户ID设置为nobody或某些nonce帐户。 (您可以使用susudo。或者甚至在他们自己的VM中。将输出传输到文件中,然后从判断程序中读取它。