问题描述
我想运行小的不受信任的程序,但限制它们访问其文件夹之外的任何文件,网络访问以及其他并不真正需要的文件。实现这一目标的最简单方法是什么?
最佳解决方案
如果它们真的不受信任,并且您想确定,则需要设置一个单独的框。无论是真的,还是虚拟的。
此外,如果你足够偏执,你不希望那个盒子与你重要的东西在同一个网络中。在所有解决方案中,您都设置了一个没有权限的单独用户,因此不要向would-be泄密者打开太多工具。
-
因此,最安全的选择是从网络中物理删除单独的框。
-
您可以通过将其添加到物理网络,但在不同的子网上给出一点:内部没有’real’连接
-
虚拟机可能是一种选择,但可能不得不放弃一些性能
如果你必须在同一个盒子上运行它,你就有了这个选项
-
chroot环境。对于许多人来说,这是一个默认选项,对于non-specific威胁,它甚至可能起作用。但它不是一个安全选项,可以很容易地打破。我建议按预期使用它,即不是为了安全。
最后,您可能需要设置一个特定的沙盒模型,而不需要虚拟化或单独的框的麻烦,或者chroot的still-at-risk情况。我怀疑这是你的意思,但请看这个链接获取更多in-depth信息:https://stackoverflow.com/questions/4249063/how-can-i-run-an-untrusted-c-program-in-a-sandbox-in-linux
次佳解决方案
Docker将帮助您设置可以从当前内核运行的容器,但是要远离系统的其他部分。它似乎相当前沿,但有一个Ubuntu焦点一个很好的文档。
第三种解决方案
Firejail相当新,并且在不断发展。使用方便。
你可以简单地说:
sudo apt-get install firejail
firejail app
第四种方案
一种可能的解决方案是虚拟化软件,例如虚拟盒,您可以在软件中心找到它。
-
安装虚拟框
-
创建启用了网络的虚拟机
-
安装Ubuntu或者更轻的桌面,如Lubuntu
-
完全更新已安装的操作系统(在虚拟框内)
-
在虚拟机上禁用网络连接
-
拍一张快照
您现在可以安装您不信任的软件以查看它的功能。它不能扰乱外部世界,也不能托管操作系统,因为它没有访问权限。
但它可能会丢弃您的虚拟机,但如果是,您可以从快照中恢复。
可能还有其他方法可以限制不受信任的软件的破坏力,但这是我能想到的最强大的方法。
LXC是Linux Containers的用户空间控制包,Linux容器是一种轻量级虚拟系统机制,有时称为“chroot on steroids”。
LXC从chroot构建,以实现完整的虚拟系统,为Linux现有的流程管理基础架构添加资源管理和隔离机制。
它可以在软件中心使用。但是我没有经验。
第五种方案
MBOX
“Mbox是一种轻量级的沙盒机制,任何用户都可以在商用操作系统中使用而无需特殊权限。” http://pdos.csail.mit.edu/mbox/
– https://github.com/tsgates/mbox
我已经可靠地用它做了几件事。
第六种方案
您可以使用subuser使用Docker对应用程序进行沙箱处理。这允许您执行沙盒GUI应用程序之类的操作,这对Docker来说并不容易。