小智
116
无论这里使用什么花哨的名称,两者都是针对特定问题的解决方案:比经典的 Unix chroot更好的隔离解决方案。操作系统级虚拟化、容器、区域,甚至“chroot with steroids”都是名称或商业名称,它们定义了相同的用户空间分离概念,但具有不同的功能。
Chroot 于 1982 年 3 月 18 日推出,在4.2 BSD发布前几个月,作为测试其安装和构建系统的工具,但今天它仍然存在缺陷。由于 chroot 的第一个目标只是提供一个新的root路径,因此需要隔离或控制的系统的其他方面(网络、进程视图、I/O 吞吐量)被发现了。这是第一个容器(用户级虚拟化)出现的地方。
这两种技术(FreeBSD Jails 和 LXC)都利用用户空间隔离来提供另一层安全性。这种划分将确保一个确定的进程只会与同一主机上同一个容器中的其他进程通信,并且如果使用任何网络资源来实现“外部世界”通信,都将被转发到该容器指定的接口/通道已。
特征
FreeBSD 监狱:
- 被认为是稳定的技术,因为它是 FreeBSD 4.0 以来的一个特性;
- 在您可以克隆监狱并创建监狱模板以轻松部署更多监狱的地方,它需要最好的 ZFS 文件系统。更多的ZFS 疯狂;
- 有据可查且不断发展;
- 分层监狱允许您在监狱内创建监狱(我们需要更深入!)。结合
allow.mount.zfs以实现更多功能,其他变量如children.max定义最大儿童监狱。
- rctl(8)将处理 jails 的资源限制(内存、CPU、磁盘等);
- FreeBSD jails 处理 Linux用户空间;
- 网络隔离
vnet,允许每个 jail 拥有自己的网络堆栈、接口、寻址和路由表;
nullfs 帮助将位于真实服务器上的文件夹链接到监狱内;
- ezjail实用程序,可帮助大规模部署和管理监狱;
- 许多内核可调参数 (
sysctl)。security.jail.allow.*参数将限制该监狱的 root 用户的操作。
- 也许,FreeBSD jails 会在不久的将来扩展一些 VPS 项目的功能,比如实时迁移。
- ZFS 和 Docker集成正在运行。还在实验中。
- FreeBSD 12支持监狱内的 bhyve 和监狱内的 pf,进一步隔离这些工具
- 过去几年开发了许多有趣的工具。其中一些已在此博客文章中编入索引。
- 替代方案: FreeBSD VPS 项目
Linux 容器 (LXC):
- 新的“内核”技术,但得到大公司(特别是 Canonical)的认可;
- 从 LXC 1.0 开始的非特权容器,在容器内部安全方面迈出了一大步;
- 容器内的 UID 和 GID 映射;
- 内核命名空间,用于分离 IPC、挂载、pid、网络和用户。这些命名空间可以以分离的方式处理,其中使用不同网络命名空间的进程不一定在存储等其他方面被隔离;
- 控制组 (cgroups) 来管理资源并对它们进行分组。CGManager是实现这一目标的人。
- Apparmor/SELinux 配置文件和内核功能,以更好地执行容器可访问的内核功能。Seccomp 也可用于 lxc 容器来过滤系统调用。其他安全方面在这里。
正在开发实时迁移功能。很难说它什么时候可以用于生产,因为 docker/lxc 将不得不处理用户空间进程暂停、快照、迁移和合并 - ref1,ref2。实时迁移工作基本集装箱(无设备直通既不复杂的网络服务或特殊的存储配置)。
- API 绑定以支持在 python3 和 2、lua、Go、Ruby 和 Haskell 中进行开发
- 集中的“最新消息”区域。每当您需要检查某些错误是否已修复或新功能是否已提交时,都非常有用。在这里。
- 一个有趣的替代方案可能是lxd,它在底层与 lxc 一起使用,但是,它具有一些不错的功能,例如 REST api、OpenStack 集成等。
- 另一个有趣的事情是 Ubuntu 似乎将 zfs 作为16.04 上容器的默认文件系统。为了使项目保持一致,lxd 推出了它的 2.0 版本,其中一些功能与zfs 相关。
- 替代方案:OpenVZ、Docker
- 码头工人。请注意,Docker 使用命名空间,cgroups 创建“每个应用程序”/“每个软件”隔离。关键区别在这里。LXC 创建具有多个进程的容器,而 Docker 则尽可能将容器缩减为单个进程,然后通过 Docker 对其进行管理。
- 努力将 Docker 与 SELinux 集成并减少容器内的功能以使其更安全 - Docker 和 SELinux,Dan Walsh
- Docker、LXD 和 LXC 有什么区别
Docker 不再使用 lxc。他们现在有一个名为runc的特定库,可以直接处理与低级内核命名空间和 cgroups 功能的集成。
这两种技术都不是安全灵丹妙药,但它们都是隔离由于混合操作系统基础架构而不需要完全虚拟化的环境的好方法。安全性将在阅读大量文档并实现内核可调项、MAC 和那些操作系统级 virt 为您提供的隔离之后实现。
也可以看看: