2014-01-13 20 views
-1

我想在Linux系统上为学生创造一个自动检测/分级脚本这样的:Linux非su脚本间接触发su脚本?

  • 任何学生用户可以随时启动脚本。
  • 单独的脚本(具有root权限)使用非学生可访问的单元测试等将学生代码复制到非学生可访问的文件空间。
  • 用户以文本文件的形式接收有限反馈由分级脚本生成。

简而言之,我期望创建类似于编程竞赛提交系统的东西,但允许更丰富的反馈而不会泄露所有的老师单元测试。

我会想象一个启动脚本和一个root权限cron脚本之间的假脱机行为可能是按顺序的。是否有任何模型/示例说明如何在用户启动的脚本和单独的由根启动的脚本之间进行通信以达到此目的?

回答

0

有很多选择。

我会提到在第一线的东西:

  • 不要使用;使用sudo;有几个原因,主要原因是,使用su你需要你想要的用户的密码和sudo - 你不需要;
  • 脚本不能SUID,你必须使用二进制或只是将使用sudo(当然学生必须sudoers条目,允许他们使用的脚本)开始正常的脚本;
  • 克朗是不是那么快,因为你可能理论上需要; cron每分钟运行一次任务;请考虑使用inotify;
  • 要在系统组件之间进行通信,您需要能够实时响应的内容;有很多开源组件/库/框架可以帮助你,但我建议你看看ZeroMQRedis;
  • 脚本的执行结果/测试可以写入文件系统(我认为它会更好),也可以写入DBMS。
+0

我不确定我了解您的回复。我当然不希望学生做sudo。这里的要点是将学生发起的提交脚本与特权测试/评估脚本分开。这将有助于封装和隐藏测试等。 – ProfPlum

0

如果你想坚持到shell脚本,我建议进程之间通信的方法是有根剧本不断地检查输入命名管道(即保留每个EOF后打开它),并发送每个输入通过任何必须做的各种测试。将部分输入作为“返回地址” - 发送结果的位置。

这应该允许测试在特权空间中执行,而不会将对特权空间的任何控制暴露给学生。学生不需要sudo,也不需要拉图书馆。只需让学生将他们的代码管理到一个非特权脚本中,该脚本添加返回地址以及任何其他可能需要的标记,然后将其提供给命名管道。

+0

谢谢。这听起来像是我想要做的事情,但我没有写入或读取命名管道的经验。是否有你会推荐的教程或模型示例? – ProfPlum

+0

我已经明白,命名管道允许在同一台计算机上进行通信,但不能在共享文件系统的计算机上进行通信,因此命名管道不能用于此目的。还是)感谢你的建议! – ProfPlum

+1

在这种情况下,请使用套接字而不是命名管道。他们的工作几乎完全一样。你可以将一个简单的客户机/服务器'hello world'转换成调用你的检查系统的东西。 [http://www.linuxhowtos.org/C_C++/socket.htm] –