2013-03-15 31 views
5

我们有一台运行Linux的设备,我们需要在此上运行不受信任的应用程序。我们正试图减轻以下安全问题 -在沙箱中的Linux上运行不受信任的应用程序

  1. 不受信任的应用程序不应该能够在核心操作系统数据和二进制文件产生不利影响
  2. 不受信任的应用程序不应该能够到另一个应用程序的数据和二进制文件产生不利影响
  3. 非信任应用程序不应该能够占用过多的CPU,内存或磁盘并导致DoS /资源匮乏情况一样的核心操作系统或其它应用程序

从不受信任的应用程序的立场点,只需要能够读取和写入自己的目录,也许安装USB驱动器

我们正在考虑使用以下方法之一 -

方法1 - 使用了SELinux的沙盒

  • 这可能吗?我已经阅读了一些SELinux,在设置策略文件和在运行时强制执行它等方面看起来有点复杂。SELinux可以做到这一点,并限制不可信任的应用程序只读/写自己的目录,并且能够设定配额限制?

方法2 - 我们自己的

  • 创建一个新的沙箱在安装时

    • 每个置信应用
    • 邮票整个应用程序创建一个新的应用程序用户目录和具有权限的文件,以便只有应用程序用户才能读取和写入
    • 使用的ulimit应用程序用户分
    • 设置配额/配额
  • 在运行时,推出采用

    • 关闭所有打开的文件描述符/句柄
    • 使用的chroot设置根的信任应用程序到应用程序目录
    • 在应用程序用户环境下启动应用程序

关于上述的想法?哪种方法比其他方法更安全?还有另一种方法可能会更好吗?由于某些原因,我们没有选择移动Android,因此我们无法使用Android本身提供的沙盒功能...

让我知道

感谢,

+0

你的选择数字2实际上听起来很像Android的沙箱功能(除了chroot) - 那些工作到内核用户安全模型保持完好的程度... – 2013-03-15 17:22:01

+0

@ chris-stratton - Android是什么我们用作参考来提出我们的方法-2。不幸的是,我们现在无法移动到Android本身,所以没有可以选择使用Android沙盒的选项...... – user967973 2013-03-15 18:57:46

+0

如何使用Linux的命名空间和cgroups?老实说,我不太熟悉它,但根据我的卑微知识,你可以将流程的资源孤立于你所设定的内容。换句话说,你创建了自己的集装箱系统,就像Docker一样。每个进程/应用程序仅限于查看并使用分配给它的内容。 – 2017-04-18 21:58:20

回答

0

中SELinux是一组是适用有点类似甚至更复杂的用户权限的规则。您可以将其用于每个进程来设置该进程的域,并允许或拒绝几乎任何访问。它意味着访问文件,网络或进程/线程。这样它可以用作一种沙箱。但是,您必须为每个进程准备一个规则集,或者您可以制作必须在沙盒应用程序之前运行的脚本才能自行准备规则。

如果你想控制CPU消耗,SELinux没有CPU规划器,因为任何规则只有两个逻辑结果'允许'或'拒绝'访问之一。我建议你'cgroups'来控制CPU的消耗。

0

legato project使用更高级别的沙箱。它使用chroot和bind mount来包含应用程序。它的一个关键特性是正式的声明式api,因此应用程序组件可以在托管安全配置下与系统服务组件进行对话。服务和应用程序可以根据需要添加和删除,也可以通过无线方式更新。应用程序的内存使用情况,处理器共享,存储等也受到严密管理。它声称使应用程序开发更容易。

相关问题