主要观点:
- 讨论操作系统时,应使用“fully managed”(全管理)、“image based”(基于镜像)、“reprovisionable”(可重新配置)和“has anti-hysteresis properties”(具有抗滞后特性)等术语,而非“immutable”(不可变)或“read-only”(只读)。
- 强调操作系统虽整体非不可变或只读,但有可写的持久数据区,且这些区可存储特权代码,如支持用户以 root 身份操作及就地更新。
- 指出“/usr 只读”虽有安全益处,但为实现就地更新需有可写区,且“/usr 只读”主要是为明确该目录内容由操作系统创建者管理,防止用户覆盖。
- 对比传统包管理器与基于镜像的系统,传统包管理器有“内部状态”导致“漂移”问题,而基于镜像的系统如 rpm-ostree 更简单,状态主要由 ostree 提交决定。
- 引入“hysteresis”(滞后)概念,说明传统包管理器及配置管理系统存在此问题,而 Kubernetes 等有“anti-hysteresis properties”(抗滞后特性),OpenShift 的 Machine Config Operator 也具有该特性。
- 认为具有抗滞后特性的系统很好,但实践中总会有少量“unmanaged state”(未管理状态),建议定期重新配置系统,如在 OpenShift 4 中可通过 machine-api-operator 实现。
关键信息:
- 不同操作系统及相关技术的特点,如 Fedora CoreOS、Google COOS、Flatcar 等。
- 传统包管理器的“漂移”问题及解决方案,如 metapackages 等。
- rpm-ostree 的设计及工作原理,包括“base commit”等概念。
- 配置管理系统中的“hysteresis”问题及 Kubernetes 的做法。
- OpenShift 的 Machine Config Operator 的“anti-hysteresis”特性及存在的漏洞。
重要细节:
- 如 runc 漏洞在“/usr 只读”的系统中不可利用。
- rpm-ostree 默认不允许将基础包标记为用户安装,内部做了相关处理。
- 配置管理系统中容易出现的错误及改进方法,如在 sudoers 文件中的操作。
- 在 IaaS 层处理“leak”的资源标记方法,以及在 OpenShift 中通过 machine-api-operator 实现定期重新配置。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。