如何禁止可执行文件读取/修改除给定目录之外的任何文件?

时间:2016-11-06 16:59:05

标签: c bash strace chroot

我想,我处于相当普遍的状况。我是一名新手老师,我必须教我的学生学习C语言的基础知识。检查他们的作业需要花费很多时间,我想知道如何自动化这个过程。我决定使用我的电子邮件地址来达到这个目的。基本上,我想写一个脚本(并把它放在cron中),检查我的电子邮件地址,以获取学生的新消息,下载附件(每个学生都有自己的目录,存储源代码的地方),编译它们,运行一些测试,然后将结果发回给学生。问题在于有人可以向我发送包含 system(“rm -rf ../..");等命令的程序。我想阻止运行这些命令。但是应允许学生修改自己目录中的文件,并使用来自不同目录的测试数据读取文件。有没有一种简单而安全的方法来实现这一目标?如果有可能,你能提供一些例子吗?

我知道我不是第一个在这里提出这个问题的人,但我能找到的所有答案都不清楚,并在几年前发布过。人们通常建议使用 chroot jail ,但这种方法需要root权限,据我所知,这是不安全的,因为它很容易打破监狱。我也读过 strace ,但它将所有系统调用打印到stdin。是否可以禁止某些系统调用或使用strace停止程序?

感谢您的耐心等待。

3 个答案:

答案 0 :(得分:0)

在运行学生之前设置测试VM并对其进行镜像。 VM内的代码。

使用镜像从任何灾难中恢复。

此外,您可以在每晚,每周等自动编辑VM(从镜像中)重新初始化脚本。

答案 1 :(得分:0)

不确定您使用的是哪种Linux版本,但是您是否尝试过查看fakechroot?它的工作原理是创建一个shim库,它拦截某些系统调用,并允许非root用户使用chroot。好像它可能适合你。如果由于某种原因这不合适,您可以考虑使用LXCdocker等容器系统。

答案 2 :(得分:-1)

也许你可以使用

来观察导出的符号
nm

它将显示使用prorgram导出的每个函数,然后如果导出系统或任何其他未经授权的函数,您将在不执行程序的情况下看到它。