【发布时间】:2023-04-05 05:34:01
【问题描述】:
我想,我的情况很常见。我是一名新手老师,我必须教我的学生 C 编程语言的基础知识。检查他们的作业需要很多时间,我想知道如何使这个过程自动化。为此,我决定使用我的电子邮件地址。基本上,我想编写一个脚本(并将其放在 cron 中),检查我的电子邮件地址是否有来自学生的新消息,下载附件(每个学生都有自己的目录,其中存储源代码),编译它们,运行一些测试,然后将结果发回给学生。问题是有人可以向我发送包含 system("rm -rf ../.."); 等命令的程序。我想阻止运行这些命令。但是应该允许学生修改自己目录中的文件,并从不同目录中读取带有测试数据的文件。有没有一种简单而安全的方法来实现这一目标?如果可能的话,你能提供一些例子吗?
我知道我不是第一个在这里提出这个问题的人,但我能找到的所有答案对我来说都不清楚,并且是几年前发布的。人们通常推荐使用chroot jail,但这种方法需要root权限,据我了解,它并不安全,因为它很容易越狱。我也读过 strace,但它会将所有系统调用打印到标准输入中。是否可以禁止某些系统调用或使用 strace 停止程序?
感谢您的耐心等待。
【问题讨论】:
-
我不知道你在教什么,但我希望不是 devops/sysadmin。无论如何,您可以作为受限用户运行这些程序吗?
-
如果您只教授基本编程,那么有两个问题会导致这不是一个好主意。首先,作业不应该太大,以至于看它们太费时间。其次,由于学生是初学者,您应该查看他们的代码,而不仅仅是确认代码通过了测试套件。
-
@chepner,作业不是很大,但我有很多学生,如果他们的算法正确并通过测试,我应该正式提出。我仍然会查看他们的程序,但我希望测试系统能帮助我减少做这件事的仔细,只关注重要的部分和错误。而且我还想知道如何解决我最初的问题,并且不仅能够教授基础编程。
-
@andlrc,我不确定,如果我明白你的意思。我应该创建一个只允许修改一个目录的新用户吗?如果是,我应该为每个学生设置不同的用户吗?如何在脚本中更改用户?我需要root吗?
-
非常有趣的问题。在我的学校,我们有一个程序可以完全满足您的需求。也许你想检查'Moulinette'@ ecole 42。无论如何我会推荐@alk建议的方法,因为它是一种非常安全的方法。