我正在开发一个应用程序,让用户能够从浏览器编写代码。编写代码后,我会将内容保存到我的网络服务器中的用户特定文件夹中。
我还想添加一项功能,让用户可以用自己选择的语言运行代码:ruby、python 等……
显然,我不想仅仅按原样运行代码,因为用户可能拥有危险的代码,可能会从网络服务器中删除敏感文件。
我如何构建一个安全的系统,让每个用户都有自己的自定义环境,以他们喜欢的语言运行他们编写的代码?
答案1
也许,唯一安全的方法是运行虚拟机或模拟器中的代码。在同一个用户下和/或在 chroot 下运行仍然太危险:可能存在本地安全问题,使用户能够获得 root 权限并退出 chroot。
如果您相信您能够使您的系统保持最新状态并且其中没有什么非常重要的内容(例如包含客户卡号的数据库),请查看此项目:http://sandbox.sourceforge.net/
请注意:对于编译语言,您还需要在某种沙箱中进行编译。
#include /etc/passwd
这是您不希望用户拥有的最简单的东西。
答案2
您没有指定正在使用的服务器平台。
假设你正在使用 Apache,你应该使用suexec 模块为此并调整不同用户的目录权限。
答案3
虚拟机是关键。最好将每个虚拟机彼此分开。只有一个更好的解决方案:不要授予它们任何访问权限。