我想设置一个服务器供学生上传C代码。服务器编译 C 代码,运行二进制文件并向学生显示输出。
现在我有安全问题。学生可以上传任何代码,但我希望他们只能访问 2 个指定文件(1 个用于读取,1 个用于写入fopen
)和标准输出。我不希望他们访问互联网或系统上的任何其他文件。
我的服务器是容器化的Linux,并且我没有root。
我考虑过这些解决方案:
chroot
或者firejail
。 (我没有服务器的root。它是容器化的,不允许设置euid)使用某些
gcc
选项、.h
文件或 C 库限制。 (我对编译知之甚少。理论上人们可以用 C 做任何事情而不使用任何头文件或库)使用类似
strace
或 的东西ptrace
来监视进程并在它想做我不希望它做的事情时终止它。
可以这样做吗?