Kubernetes v1.37 存储安全增强:Bind Mount Options 与 EmptyDir 权限

通过挂载选项和权限模式提升容器存储安全性

UniMgr 技术编辑 来源:技术源整理 26
Kubernetes v1.37 存储安全增强:Bind Mount Options 与 EmptyDir 权限

Kubernetes v1.37 引入了两项重要的存储安全特性:Bind Mount Options 和 EmptyDir 权限模式。Bind Mount Options 允许在卷挂载时指定 noexec、nosuid、nodev 等 Linux 挂载标志,以限制可执行文件运行、特权提升和设备访问。EmptyDir 权限模式支持设置目录权限,如 01777(sticky bit),以保护共享目录中的文件不被非所有者删除。这些特性旨在解决默认卷挂载缺乏安全限制的问题,帮助实现更严格的安全策略。

技术要点

Kubernetes v1.37 版本引入了两项核心的存储安全增强特性,目前均处于 Alpha 特性门控(Feature Gate)阶段。

配图
配图
  1. Bind Mount Options:允许在 Pod 规范中为卷挂载指定 Linux 挂载标志。具体支持的标志包括 noexec(禁止执行挂载文件系统上的任何二进制文件)、nosuid(禁止 set-user-identifier 或 set-group-identifier 位生效)和 nodev(禁止解释文件系统上的字符或块特殊设备)。这为容器内的卷挂载提供了更细粒度的安全控制。
  2. EmptyDir 权限模式:支持为 emptyDir 卷设置创建时的目录权限模式(mode)。例如,可以设置为 01777 以启用 Unix 的 sticky bit,或设置为 0750 等更严格的权限。这解决了 emptyDir 默认以 0777 模式创建目录所带来的安全问题。

这些特性需要通过在 API 服务器和 kubelet 上启用 VolumeBindMountOptions 和 EmptyDirVolumeMode 这两个 Alpha 特性门控来使用。

原理与背景

这两项特性的引入,根植于 Linux 底层的存储与权限安全机制,旨在填补 Kubernetes 在卷安全配置上的长期空白。

Bind Mount Options 的设计动机:在 Kubernetes 中,卷(如 emptyDir、PersistentVolume)默认通过容器运行时和 kubelet 以 bind mount 方式挂载到容器内。然而,这种默认的 bind mount 操作并未施加 noexec、nosuid 或 nodev 等关键的安全标志。这意味着,即使容器根文件系统被设置为只读(readOnlyRootFilesystem: true),一个被 compromised 的进程仍可以利用任何可写的卷(如 emptyDir)下载并执行任意二进制文件,从而可能导致特权升级。支持 noexec、nosuid 和 nodev 标志,为用户提供了原生方式,使卷挂载的安全级别能够匹配安全基准和政策要求。

EmptyDir 权限模式的设计动机:emptyDir 是 Kubernetes 中最常见的可写卷类型。其默认创建模式为硬编码的 0777,这导致任何能够发现该卷的进程都可以读取、写入和删除其中的文件,无论文件由谁创建。这在多容器 Pod 共享 emptyDir 时尤为危险,一个容器可以删除另一个容器创建的文件。此外,许多应用程序和安全框架期望 /tmp 目录具有 sticky bit(模式 01777),以防止非所有者删除文件。此前,用户必须通过 init 容器运行 chmod 命令来设置权限,这增加了复杂性且难以验证合规性。支持 emptyDir 的 mode 配置,使得用户能够原生地设置如 01777 或 0750 等权限,满足安全需求。

素材中提及,emptyDir 缺乏挂载选项和权限控制的问题已被多次安全审计指出(如 Issue #48912 和 Kubernetes 1.24 Security Audit 中的 Finding NCC-E003660-7HM),此次更新正是为了填补这一安全缺口。

落地建议

对于平台工程师和应用程序开发者,要利用 v1.37 的这些新特性增强工作负载安全性,可以遵循以下通用做法:

  1. 启用特性门控:首先,确保你的 Kubernetes 集群 API 服务器和 kubelet 已启用 VolumeBindMountOptions 和 EmptyDirVolumeMode 特性门控。由于它们是 Alpha 特性,在生产环境使用前需充分评估稳定性和兼容性。
  2. 配置 Bind Mount Options:在 Pod 或 VolumeMount 规范中,使用 bindMountOptions 字段为特定卷挂载添加安全标志。例如,对于临时工作空间卷(如挂载到 /tmp 的 emptyDir),可以添加 noexec 和 nosuid 选项,以阻止在该卷上执行代码和特权提升。这尤其适用于设置了 readOnlyRootFilesystem: true 的容器。
  3. 设置 EmptyDir 权限模式:在 emptyDir 卷定义中,使用 mode 字段指定所需的目录权限。对于需要共享且防止文件被意外删除的临时空间(如 CI/CD 流水线中的多容器共享工作区),设置为 01777 可以模拟标准 Unix /tmp 的行为。对于需要限制访问的应用数据临时存储,可以设置为更严格的模式如 0750。
  4. 验证与安全测试:部署配置了上述安全选项的 Pod 后,可以通过 kubectl exec 进入容器进行验证。例如,尝试在挂载了 noexec 选项的卷上创建并执行脚本,应会收到“Permission denied”错误;尝试在具有 01777 模式的 emptyDir 中删除非自己创建的文件,也应被阻止。这有助于确认安全策略是否生效。

这些特性为在 Kubernetes 中实施更严格的存储安全策略提供了原生支持,有助于满足安全合规要求并降低工作负载风险。

技术分享更多资讯

查看全部
布里吉斯游戏引擎更新:波次与技能机制重构
技术分享

布里吉斯游戏引擎更新:波次与技能机制重构

游戏开发者布里吉斯发布最新技术更新,重点重构了敌人波次生成逻辑与干员技能释放机制。此次更新涉及底层数据配置与快照保存系统的优化,为后续数据库更新及前端开发奠定基础。开发者透露将学习Unity引擎技术,并计划未来转向自研引擎,标志着项目从原型向工业化开发的重要转型。

AI 编辑 3
Agent 上下文治理全景原则篇:构建目标导向的智能判断体系
技术分享

Agent 上下文治理全景原则篇:构建目标导向的智能判断体系

本文聚焦 Agent 上下文治理的核心原则,从目标、依据、边界、记忆、探索及进展六个维度,深入剖析上下文机制如何辅助智能体围绕既定任务进行持续且精准的判断。通过明确各机制职责,旨在提升 Agent 在复杂环境下的任务执行效率与稳定性,为构建更可靠的 AI 系统提供理论框架与实践指导。

AI 编辑 3
Python 3.13 引入 Queue.shutdown 解决异步退出难题
技术分享

Python 3.13 引入 Queue.shutdown 解决异步退出难题

Python 3.13 正式引入 Queue.shutdown 方法,旨在解决异步消费者在收到停止信号后难以优雅退出的长期痛点。此前,开发者需手动处理取消信号,常导致部分已取出的任务处理中断或资源泄漏。新特性简化了异步队列的生命周期管理,提升了并发编程的可靠性与代码简洁性,对 Python 异步生态具有积极意义。

AI 编辑 4
游戏团队管理进阶:从被动救火到主动规划
技术分享

游戏团队管理进阶:从被动救火到主动规划

本文基于对游戏团队管理实践的深入思考,指出许多管理者陷入“解决问题”的时间陷阱。通过定期复盘日程,作者发现大量精力耗费在应对架构、需求及人员冲突等突发状况上。文章主张管理者应转变思维,从被动响应转向主动发现潜在问题,优化团队效能,避免陷入低效的救火循环,为游戏行业团队管理提供新的视角。

AI 编辑 3