我正在尝试构建在线代码编辑器。我的情况:通过Web服务器收到一个“ C”程序的请求-根用户创建文件,编译文件并将成功确认给用户。
我们正在nodejs
后端使用。现在是运行程序的时候了-nodejs
为我们提供了使用uid(不同于root的其他用户)生成此用户代码的选项。
我该如何创建一个没有ls,px之类的功能的用户,而只是运行上面步骤中编译的可执行文件即可。
该解决方案,我试图之一:的变更许可/usr/bin
,/bin
,/usr/sbin/
,/sbin
,/usr/local/bin
,/usr/local/sbin
700所以只有root用户可以运行所有这些命令的这用户只需运行简单的“C”程序。但是,该用户仍然可以选择查看/etc
目录-所以基本上我需要一个所有目录都为700的用户。这是一个好主意吗?
另一种选择是批准。还没有尝试过这个。
朋友建议的第三个选择是chroot,但是人们说这不是出于安全措施。
有人可以指导我如何解决这个问题。
Chroot是执行此操作的更传统的方法,您可以使其正常运行,但是由于您是通过Web界面执行此操作的,因此它变得有些复杂:您必须防止竞争条件(多个用户使用相同的chroot环境) ,您必须为每个请求动态构建目录结构,以及可能无法想到的其他一些事情。
如果您使用的是Linux,则需要查看容器(lxc
)或Docker项目https://docs.docker.com。尤其是Docker平台,可以非常轻松地让您轻松完成您想做的事情:创建短期,轻量级的虚拟系统,该系统可用于运行完全入狱的进程,而不会影响外部(即您的Web服务器)资源。您可以下载要让程序运行的特定OS环境的基本docker映像(例如Fedora 12),在将用户的程序源导入到该环境中的同时告诉docker运行该环境,然后告诉docker运行编译器以及该环境中的结果文件。然后,您告诉docker销毁短暂环境。什么都不会落后,(几乎)没有安全风险。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句