我想创建一个 Web 应用程序,它允许用户上传一些 C 代码,并查看其执行结果(代码将在服务器上编译)。用户不受信任,这显然会带来一些巨大的安全隐患。
所以我需要为应用程序创建某种沙箱。在最基本的层面上,我想将对文件系统的访问限制为某些指定的目录。我不能直接使用 chroot 监狱,因为 Web 应用程序没有以特权用户身份运行。我猜想设置监狱的 suid 可执行文件将是一种选择。
上传的程序会很小,所以它们应该执行得很快(最多几秒钟)。因此,我可以在预设超时后终止该进程,但如何确保它不会产生新进程?或者如果我不能,杀死整个 pgid 是一种可靠的方法吗?
除了“根本不这样做”之外,最好的解决方法是什么?:) 我错过了哪些其他明显的安全问题?
FWIW,网络应用程序将用 Python 编写。