一个简约的 Linux 发行版 Bottlerocket 已经发布,用于运行容器。 对他来说最重要的是

一个简约的 Linux 发行版 Bottlerocket 已经发布,用于运行容器。 对他来说最重要的是

亚马逊公司 宣布了 关于最终版本 瓶装火箭 — 用于运行容器并有效管理它们的专门发行版。

Bottlerocket(顺便说一下,小型自制黑火药火箭的名称)并不是第一个容器操作系统,但由于与 AWS 服务的默认集成,它很可能会变得广泛。 尽管该系统专注于亚马逊云,但开源代码允许它在任何地方构建:本地服务器上、Raspberry Pi 上、任何竞争云中,甚至在无容器环境中。

这是 Red Hat 埋没的 CoreOS 发行版的完全值得的替代品。

事实上,亚马逊网络服务部门已经有了 Amazon Linux,它最近推出了第二个版本:它是一个通用发行版,可以在 Docker 容器中运行,也可以与 Linux KVM、Microsoft Hyper-V 和 VMware 一起运行ESXi 虚拟机管理程序。 它经过优化,可在 AWS 云上运行,但随着 Bottlerocket 的发布,每个人都被鼓励升级到更安全、更现代化且使用更少资源的新系统。

AWS 推出 Bottlerocket 在今年3月的2020。 她立即​​承认,这不是第一个“容器 Linux”,并引用 CoreOS、Rancher OS 和 Project Atomic 作为灵感来源。 开发人员写道,该操作系统是“我们从长期运行亚马逊规模的生产服务中吸取的教训,以及我们在过去六年中获得的关于如何运行容器的经验的结果。”

极简主义

Linux 剥离了运行容器不需要的所有内容。 据该公司称,这种设计减少了攻击面。

这意味着基础系统上安装的软件包更少,从而更容易维护和更新操作系统,并且还减少了由于依赖关系而出现问题的可能性,从而减少了资源使用。 基本上,这里的所有内容都在单独的容器内运行,并且底层系统实际上是裸露的。

亚马逊还删除了所有 shell 和解释器,消除了它们被使用或用户意外升级权限的风险。 为了简约和安全,基础镜像不包含命令 shell、SSH 服务器或 Python 等解释语言。 管理员工具放置在单独的服务容器中,默认情况下处于禁用状态。

该系统通过两种方式进行管理:通过 API 和编排。

Bottlerocket 不是更新单个软件的包管理器,而是下载完整的文件系统映像并重新启动到其中。 如果负载失败,它会自动回滚,并且工作负载失败可以手动触发回滚(通过 API 命令)。

框架 TUF (更新框架)将基于映像的更新下载到备用或“未安装”分区。 为系统分配两个磁盘分区,其中一个包含活动系统,更新复制到第二个。 在这种情况下,根分区以只读模式挂载,并且该分区 /etc 与 RAM 中的文件系统一起安装 临时文件系统 并在重新启动后恢复原始状态。 直接修改配置文件 /etc 不支持:要保存设置,您应该使用 API 或将功能移至单独的容器中。

一个简约的 Linux 发行版 Bottlerocket 已经发布,用于运行容器。 对他来说最重要的是
API更新方案

安全

容器由 Linux 内核的标准机制(cgroup、命名空间和 seccomp)创建,并用作强制访问控制系统,即用于额外的隔离 SELinux的 处于“强制”模式。

默认情况下,启用策略以在容器和内核之间共享资源。 二进制文件受到标志保护,以防止用户或程序执行它们。 如果确实访问了文件系统,Bottlerocket 会提供一种工具来检查和跟踪所做的任何更改。

“验证启动”模式是通过 device-mapper-verity 函数实现的(DM-真实性),它在引导期间检查根分区的完整性。 AWS 将 dm-verity 描述为“Linux 内核的一项功能,可提供完整性检查以防止恶意软件在操作系统上运行,例如覆盖核心系统软件。”

系统中还有一个过滤器 eGMP (扩展 BPF, 由 Alexey Starovoitov 开发),它允许用更安全的 BPF 程序替换内核模块以进行低级系统操作。

执行模型
用户自定义
汇编
安全
故障模式
获取资源

用户
任务
是的
任何
用户权利
中断执行
系统调用、故障

核心
任务
没有
静止的
没有
内核恐慌
прямой

BPF
事件
是的
准时制、核心再生产
验证、准时生产
错误信息
有限的帮手

BPF 与常规用户或内核级代码有何不同

AWS 表示,Bottlerocket“采用了一种操作模型,通过阻止具有管理权限的生产服务器连接来进一步增强安全性”,并且“适合对每个主机的控制受到限制的大型分布式系统”。

为系统管理员提供管理员容器。 但 AWS 认为管理员通常不需要在 Bottlerocket 内部工作:“登录到单独的 Bottlerocket 实例的行为旨在用于不频繁的操作:高级调试和故障排除,” 开发商。

Rust 语言

内核之上的操作系统工具大部分是用 Rust 编写的。 这种语言的本质是 减少不安全内存访问的可能性消除线程之间的竞争条件.

构建时默认应用标志 --enable-default-pie и --enable-default-ssp 启用可执行文件地址空间的随机化(位置无关的可执行文件,PIE)和堆栈溢出保护。

对于 C/C++ 包,包含附加标志 -Wall, -Werror=format-security, -Wp,-D_FORTIFY_SOURCE=2, -Wp,-D_GLIBCXX_ASSERTIONS и -fstack-clash-protection.

除了 Rust 和 C/C++ 之外,还有一些包是用 Go 编写的。

与 AWS 服务集成

与同类容器操作系统的不同之处在于,Amazon 对 Bottlerocket 进行了优化,使其可以在 AWS 上运行并与其他 AWS 服务集成。

最流行的容器编排器是 Kubernetes,因此 AWS 引入了与其自己的企业 Kubernetes 服务 (EKS) 的集成。 编排工具位于单独的控制容器中 Bottlerocket 控制容器,默认启用并通过 API 和 AWS SSM 代理进行管理。

鉴于过去一些类似举措的失败,看看 Bottlerocket 是否会成功将会很有趣。 例如,Vmware 的 PhotonOS 结果无人认领,RedHat 购买了 CoreOS 并 关闭了项目,他被认为是该领域的先驱。

Bottlerocket 与 AWS 服务的集成使该系统以自己的方式独一无二。 这也许是一些用户可能更喜欢 Bottlerocket 而不是其他发行版(例如 CoreOS 或 Alpine)的主要原因。 该系统最初设计为与 EKS 和 ECS 配合使用,但我们重申这不是必需的。 首先,Bottlerocket 可以 自己组装 并将其用作托管解决方案等。 其次,EKS 和 ECS 用户仍然可以选择他们的操作系统。

Bottlerocket 源代码在 Apache 2.0 许可证下发布在 GitHub 上。 开发商已经 响应错误报告和功能请求.

由于宣传

维迪斯娜 报价 VDS 每日付款。 可以安装任何操作系统,包括从您自己的映像安装。 每台服务器都连接到500兆比特的互联网通道,并免费免受DDoS攻击!

一个简约的 Linux 发行版 Bottlerocket 已经发布,用于运行容器。 对他来说最重要的是

来源: habr.com

添加评论