如何沙盒应用程序?


66

我想运行不受信任的小型程序,但限制它们访问其文件夹,网络访问以及它们真正不需要的所有其他内容之外的任何文件。最简单的方法是什么?


我从未使用过它,因此无法给出完整的答案,但是AFAIK,AppArmor(wiki.ubuntu.com/AppArmor)应该能够做到这一点。
哈维尔·里维拉

查看Vagrant,VirtualBox的包装。vagrantup.com和[在Wikipedia](en.wikipedia.org/wiki/Vagrant_ ( software%29 在github上
Janus Troelsen,

@JavierRivera FWIW,SELinux也是如此。不知道在Ubuntu上运行会多么容易。
TC1

默认情况下,Apparmor已在Ubuntu中安装,因此应该更容易。
哈维尔·里维拉

1
似乎它们有多种可能性:使用Virtualbox(如Vagrant),chroot,LXC,App Armor和SE Linux等虚拟化。
Flimm

Answers:


26

如果您确实不信任它们,并且您想确定,则可以设置一个单独的框。要么是真的,要么是虚拟的。

此外,如果您很偏执,则不希望该框与重要内容位于同一网络中。在所有解决方案中,您都将建立一个没有权限的单独用户,以免为可能的入侵者打开太多工具。

  • 因此,最安全的选择是从网络上物理移除一个单独的盒子。
  • 您可以通过将其添加到物理网络中,但在另一个子网中进行一些修改:内部没有“真实”连接
  • 虚拟机是一种选择,但可能不得不放弃一些性能

如果您必须在同一盒子上运行它,例如,您有此选项

  • chroot。这是对很多人执行此操作的默认选项,对于非特定威胁,它甚至可能起作用。但这不是安全性选项,可以轻松实现。我建议按预期使用它,即不用于安全性。

最后,您可能需要设置一个特定的沙箱模型,而无需进行虚拟化或单独安装的麻烦,也不用担心仍然处于危险状态chroot。我怀疑这是您的意思,但是请查看此链接以获取一些更深入的信息。


在虚拟机上运行不受信任的应用程序在安全方面有多安全?我听说过理论上的漏洞,这些漏洞可以通过管理程序访问主机操作系统并进行感染。
zuallauz

可能是,尽管我目前尚不了解真正的威胁,但肯定不是针对性威胁。您应该考虑,在游戏中编写恶意软件的攻击者不会花那么多时间。如果他们知道您的布局,那么现在当然可以独自攻击您,但是我仍然不认为这是您的首要考虑。如果您确定它们是可恶的,那么无论如何,从网络角度来讲,您应该确实设置一个隔离的盒子。
Nanne

14

Firejail相当新,并且还在不断发展。易于使用。

您可以简单地:

sudo apt-get install firejail
firejail app

欢迎来到Ask Ubuntu!虽然从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
Mark Kirby

12

Docker将帮助您设置可以在当前内核之外运行的容器,但不要将其包含在系统的其余部分中。看起来很先进,但是有一个Ubuntu重点关注好的文档。


4
我认为这在大多数情况下都是不错的选择。但是,原始问题的“不可信”部分会让我有些担心。有已证明的可用黑客,可以使应用程序“脱离”其容器。考虑到Docker容器是在root用户访问权限下运行的,如果您的目标是将应用程序彼此沙盒化,那么这将很危险。
克里斯·霍尔多夫

@CrisHoldorph是正确的,尽管Docker越来越好,我什至认为如今可以以非特权方式(不是root身份)运行Docker。现在对于LXC和LXD(有时也称为LXC守护程序)可以确实简化了这样的容器的创建过程。因此,相对于chroot,现代的非特权容器可以被认为是对安全性的改进。但是它们并不是不可逾越的障碍!
惠更斯州2015年

Docker不是安全工具!
Federico

10

完全虚拟化/仿真(VirtualBox)

一种可能的解决方案是虚拟化软件,例如VirtualBox,您可以在软件中心找到它。

  • 安装虚拟盒子
  • 创建启用了网络的虚拟机
  • 安装Ubuntu或更轻便的桌面(例如Lubuntu)
  • 完全更新已安装的操作系统(在“虚拟”框中)
  • 在虚拟机上禁用联网
  • 拍摄快照

现在,您可以安装不信任的软件以查看其功能。它无法破坏外部环境,也不能托管操作系统,因为它没有访问权限。

但是,它可能会破坏您的虚拟机,但如果这样做,则只能从快照中还原。

可能还有其他方法可以限制不受信任的软件的破坏力,但这是我能想到的最可靠的方法。

基于容器的虚拟化(Docker / LXC)

另一个选择可能是LXC更多信息在这里

LXC是Linux容器的用户空间控制包,这是一种轻量级的虚拟系统机制,有时被称为“类固醇中的chroot”。

LXC从chroot开始构建,以实施完整的虚拟系统,并为Linux现有的流程管理基础架构添加了资源管理和隔离机制。

它可以在软件中心中获得。我没有经验。


1
那只是不方便。创建整个虚拟机只是为了运行游戏!?那不是一个很好的解决方案。你不觉得设置进程的GID和UID是WAY比这更容易?
杰克·梅耶兹

实际上,我认为设置虚拟盒子非常容易,以至于我可能不会为拍摄快照而烦恼。如果它破坏了我的虚拟机,我可以将其丢弃。
埃默里

Downvote:即使解决方案很严格,事实上也有不正确的推理。程序不需要具有与运行它们的用户相同的特权。多年来,Linux和Ubuntu一直支持MAC。Ubuntu为此使用了AppArmos,您可以轻松地将程序包含到目录中。
哈维尔·里维拉,

@JavierRivera“容易”不是正确的单词,否则默认情况下,每个发行版都将随附适用于Firefox的AppArmor配置文件和SELinux策略,而事实并非如此。Ubuntu附带了这种配置文件,但是默认情况下它是不活动的,因为它破坏了一些“流行的” Firefox功能。大多数GUI应用程序都没有太多SELinux策略,此类应用程序需要太多权限,因此仍被称为沙盒。如果您不同意,请使用AppArmor或SELinux安全地在此处发布指向沙盒Firefox的链接!如果可以的话,我会很高兴的:-)
惠更斯岛2015年

您可能应该为有意义的答案定义“安全”,但是Ubuntu的默认Firefox策略对我而言是相当合理的。当然,它破坏的东西不像不使用用户界面那样不友好,但是对我来说,它比完整的虚拟机更加用户友好(这也破坏了流行的firefox功能)。
哈维尔·里维拉

9

邮箱

Mbox是一种轻量级的沙箱机制,任何用户都可以在商品操作系统中使用而无需特殊特权。

我已经可靠地将其用于几件事。



1

我认为,可能的解决方案是为测试目的创建一个单独的用户,并限制其特权。这样一来,您不会在虚拟机中肯定会发生性能损失,但是我认为这样做的安全性较差,即使设置不当,我也不建议这样做。


2
这不能保护系统免受可能仍会安装或运行的恶意软件的侵害-也不是以这种问题的方式进行沙箱测试
Thomas Ward

1

DoSH-Docker外壳

如果您只是想沙沙用户的活动,则可以使用“ DoSH”

DoSH(代表Docker SHell)是在用户登录Linux系统并在其中运行外壳程序时创建Docker容器的开发,而不是简单地创建外壳程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.