Linux LXC vs FreeBSD入狱


62

在安全性,稳定性和性能方面,LXC(Linux容器)FreeBSD的监狱之间是否有显着差异?

乍一看,这两种方法看起来非常相似。


1
LXC是一项相当新的技术,因此我希望监狱可以提供更好的安全性和稳定性。甚至没有关于性能的猜测。例如,可以使用selinux缓解LXC的一些已知安全问题。不过,我个人喜欢LXC。
PavelŠimerda2014年

1
@PavelŠimerda我今天刚刚听说过LXC,但是我很惊讶地发现Heroku和Google App Engine都已经在使用LXC。
PhilippClaßen2014年

3
如果您刚接触
Kev

1
Docker不再使用lxc。

1
@nwildner它不再使用liblxc,但是使用了完全相同的概念:内核名称空间。
0xC0000022L

Answers:


101

无论这里使用的花哨名称,都是解决特定问题的方法:比经典Unix chroot更好的隔离解决方案。操作系统级别的虚拟化,容器,区域,甚至“带有类固醇的chroot”是定义相同的用户空间分离概念但具有不同功能的名称或商业标题。

Chroot于1982年3月18日发布,比4.2 BSD发行要早几个月,它是一种测试其安装和构建系统的工具,但是今天它仍然存在缺陷。由于chroot的首要目标只是提供新的root路径,因此发现了需要隔离或控制的系统其他方面(网络,进程视图,I / O吞吐量)。这是第一个容器(用户级虚拟化)出现的地方。

两种技术(FreeBSD Jails和LXC)都利用用户空间隔离来提供另一层安全性。这种分隔将确保确定的进程仅与同一主机上同一容器中的其他进程通信,并且如果使用任何网络资源来实现“外部世界”通信,则所有进程都将转发到该容器分配的接口/通道拥有。

特征

FreeBSD Jails:

  • 被认为是稳定的技术,因为它是FreeBSD自4.0起的一项功能;
  • 在您可以克隆jail并创建jail模板以轻松部署更多jail的那一点上,它将充分利用ZFS文件系统的优势。ZFS更加疯狂 ;
  • 有据可查,并不断发展 ;
  • 分层监狱允许您在监狱内创建监狱(我们需要更深入!)。结合使用allow.mount.zfs可获得更大的功能,其他变量children.max确实定义了最大的儿童监狱。
  • rctl(8)将处理监狱的资源限制(内存,CPU,磁盘等);
  • FreeBSD监狱处理Linux 用户空间
  • 使用进行网络隔离vnet,允许每个监狱拥有自己的网络堆栈,接口,地址和路由表;
  • nullfs 有助于将文件夹链接到真实服务器中的文件,并将其链接到监狱中;
  • ezjail实用程序,可帮助大规模部署和管理监狱;
  • 许多内核可调参数(sysctl)。security.jail.allow.*参数将限制该监狱的root用户的操作。
  • 也许,FreeBSD监狱将在不久的将来扩展某些VPS项目功能,例如实时迁移
  • ZFS和Docker 集成需要付出一些努力。仍处于实验阶段。
  • FreeBSD 12支持在监狱中的bhyve和在监狱中的pf,从而进一步隔离了这些工具
  • 在过去几年中开发了许多有趣的工具。其中一些已在此博客文章中被索引。
  • 替代方案: FreeBSD VPS项目

Linux容器(LXC):

  • 新的“内核”技术,但得到了大型技术的认可(特别是Canonical);
  • 从LXC 1.0开始的非特权容器在容器内部的安全性方面迈出了一大步。
  • 容器内的UID和GID映射;
  • 内核名称空间,用于分隔IPC,安装,pid,网络和用户。这些名称空间可以以分离的方式进行处理,其中使用其他网络名称空间的进程不一定要在存储等其他方面进行隔离。
  • 控制组(cgroup)来管理资源并将其分组。CGManager是实现这一目标的人。
  • Apparmor / SELinux配置文件和内核功能可更好地实施容器可访问的内核功能。Seccomp也可用于lxc容器以过滤系统调用。其他安全问题在这里
  • 正在开发实时迁移功能。很难说何时可以投入生产,因为docker / lxc将不得不处理用户空间进程的暂停,快照,迁移和整合-ref1ref2实时迁移正在使用基本容器(没有设备通过复杂的网络服务或特殊的存储配置)。
  • API绑定可启用python3和2中的开发,包括lua,Go,Ruby和Haskell
  • 集中“新功能”区域。每当您需要检查是否已修复某些错误或提交了新功能时,此功能都非常有用。在这里
  • 一个有趣的替代方法可能是lxd,它在后台可以与lxc一起使用,但是它具有一些不错的功能,例如REST api,OpenStack集成等。
  • 另一个有趣的事情是,Ubuntu似乎将zfs作为16.04容器的默认文件系统提供。为了使项目保持一致,lxd推出了它的2.0版本,其中一些功能与zfs相关
  • 替代方案OpenVZDocker
  • 泊坞窗。在此请注意,Docker使用名称空间,cgroup创建“每个应用程序” /“每个软件”隔离。这里的主要区别。虽然LXC创建具有多个进程的容器,但Docker尽可能将一个容器还原为单个进程,然后通过Docker对其进行管理。
  • 努力将Docker与SELinux集成并减少容器中的功能以使其更安全-Docker和SELinux,Dan Walsh
  • Docker,LXD和LXC有什么区别

Docker不再使用lxc。他们现在有一个名为libcontainer的特定库,该库直接处理与低级内核名称空间和cgroups功能的集成。

两种技术都不是安全灵丹妙药,但是这两种方法都是隔离由于混合的操作系统基础结构而不需要完全虚拟化的环境的不错的方法。在阅读了许多文档之后,这些OS级虚拟机为您提供的内核可调参数,MAC和隔离措施的实现,将带来安全性。

也可以看看:


1
值得一提的是,lxc并没有提供适当的来宾隔离功能。但是,lxd确实尝试提供隔离,例如BSD监狱或Solaris区域。
allquixotic 2015年

lxd是LXC的“更好的体验”,它还具有其他功能。但是,在这里引用这个小家伙似乎很不错

@allquixotic您的意思是是否使用从模板创建的不变配置?真正的但无特权(启用用户功能)的容器可用于LXC 1.x,并且甚至可以在系统引导时自动启动,前提是它们归root容器所有(因此位于容器的系统范围内)。
0xC0000022L
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.