-1

我想在 Linux 系统上为学生创建一个自动测试/评分脚本,例如:

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

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

我想一个启动脚本和一个 root 权限 cron 脚本之间的假脱机行为可能是有序的。是否有任何模型/示例可以最好地构建用户启动的脚本和单独的根启动的脚本之间的通信以用于此类目的?

4

2 回答 2

0

如果您想坚持使用 shell 脚本,我建议在进程之间进行通信的方法是让根脚本不断检查命名管道的输入(即在每个 eof 之后继续打开它)并通过必须进行的各种测试发送每个输入完毕。让输入的一部分成为“返回地址”——将结果发送到哪里。

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

于 2014-01-13T21:59:21.243 回答
0

有很多选择。

我会在第一行提到的事情:

  • 不要使用su;使用须藤;有几个原因,主要原因是,要使用su你需要你想成为的用户的密码,而使用sudo - 你不需要;
  • 脚本不能是suid,您必须使用二进制文件或只是将开始使用的普通脚本sudo(当然学生必须有sudoers允许他们使用脚本的条目);
  • Cron并没有你理论上需要的那么快;cron 每分钟运行一次任务;请考虑使用inotify
  • 要在系统的组件之间进行通信,您需要能够实时做出反应的东西;有许多开源组件/库/框架可以帮助您,但我建议您看看ZeroMQRedis
  • 脚本执行/测试的结果可以写入文件系统(我认为这会更好),也可以写入 DBMS。
于 2014-01-13T19:28:32.047 回答