简体中文

开发者工具 · Docker run 到 Docker compose 转换器

以 root 身份运行容器:什么 --user 和用户:更改以及原因

· 为什么它很重要

码头工人 容器 安全

说明以 root 身份运行容器的抽象图:什么 --user 和用户:更改以及原因
原始 ToolAcre 矢量图

除非图像另有说明,否则容器中的进程是根进程。这篇文章解释了这对主机意味着什么,--user 和 Compose user: key 如何更改它,以及随之而来的文件所有权问题。

无法删除的文件 — 一个容器运行后,绑定挂载充满了 root 拥有的文件

无法删除的文件 — 在一个容器运行后,绑定挂载充满了 root 拥有的文件。证据:绑定安装的输出可能会暴露解析无法诊断的身份不匹配。使用一次性文字再现运行时身份。将每个源事件与用户安装功能配对;保留名称空间和所有权以供目的地审查。

该安全事件还表明,一个单独的安全事件边界是镜像 USER 和入口点交换机需要检查或镜像源。证据:图像用户和入口点开关需要检查或图像源。这个运行时身份约束是一个停止点。检查用户在没有制造行为的情况下安装的功能,然后记录主机对命名空间和所有权的检查。

内部根是外部根 — 使用默认用户命名空间设置,容器中的 UID 0 是主机上挂载文件的 UID 0

内部根是外部根 — 使用默认用户命名空间设置,容器中的 UID 0 是主机上已挂载文件的 UID 0 。证据:UID 零主机影响取决于命名空间配置,此处未阅读。将运行时身份令牌跟踪到用户安装功能中。将有序值与最后值字段分开;命名空间和所有权位于集合之外。

相关的安全机制边界是一个单独的安全语法边界是 1000:1000 示例演示保存而不是所有权保证。证据:1000:1000 示例演示了保存而不是所有权保证。使用此运行时身份事实来预测用户安装功能中的一个成员或标量。在决定有关命名空间和所有权的任何事情之前检查警告。

--user 变为 user: — 数字 UID:GID 与名称,以及为什么当图像没有匹配帐户时数字更安全

--user 变为 user: — 数字 UID:GID 与名称,以及为什么当图像没有匹配帐户时数字更安全。证据:--user 成为用户,并且数字 UID:GID 文本被引用。从其模型判断运行时身份序列化。在用户挂载功能中引用可以保护类型,但不会提供命名空间和所有权的操作证明。

第二个安全序列化观察是一个单独的安全输出边界是 read_only cap_drop 和 security_opt 映射,而无根模式则不会。证据:read_only cap_drop 和 security_opt 映射,而 rootless 模式则不然。此运行时标识输出将设置与不可用的上下文分开。保持用户挂载功能可审查,并独立检查命名空间和所有权。

已经放弃权限的镜像 - Dockerfile 中的 USER,以及在入口点切换用户的镜像

已经放弃权限的镜像 - Dockerfile 中的 USER,以及在入口点切换用户的镜像。在运行时身份异常处停止而不是猜测。任何靠近用户安装功能的添加都需要与命名空间和所有权相关的特定于部署的原因。

另一个安全异常约束是,一个单独的安全异常边界是命名空间重新映射和 Kubernetes 上下文超出范围。证据:命名空间重新映射和 Kubernetes 上下文超出了范围。将原始运行时身份命令保留在警告旁边。该比较显示了用户安装功能包含哪些内容以及哪些命名空间和所有权决策仍然是手动的。

工作示例:转换 docker run --user 1000:1000 -v /srv/app:/app — 用户:密钥以及磁盘上的最终所有权

工作示例:转换 docker run --user 1000:1000 -v /srv/app:/app — 用户:密钥以及磁盘上生成的所有权。从合成名称构建运行时身份示例。使每个用户安装的功能项都可追踪,而不会暴露生产命名空间和所有权详细信息。

相同的安全示例示例表明,一个单独的安全示例边界是身份在安装和功能旁边变得可见以供审查。证据:除了坐骑和功能之外,身份也变得可见,可供审查。配对的运行时身份事实应该在用户安装功能中可见。记录该行并避免有关名称空间和所有权的假设。

其他强化密钥 — read_only、cap_drop: [ALL]、security_opt no-new-privileges 和 rootless Docker 作为更大的一步

其他强化密钥 — read_only、cap_drop: [ALL]、security_opt no-new-privileges 和 rootless Docker 作为更大的一步。将运行时身份结果转换为一个可观察的用户安装功能差异。 Docker 拥有后来的命名空间和所有权判决。

安全结果实现还显示了一个单独的安全效果边界,即绑定安装的输出可能会暴露解析无法诊断的身份不匹配。拆分运行时身份职责:转换写入用户安装功能,存储库删除机密,操作员验证命名空间和所有权。

这不包括什么——用户命名空间重新映射配置和 Kubernetes securityContext

这不包括用户命名空间重新映射配置和 Kubernetes securityContext。将运行时身份范围限制为此处显示的用户安装功能分支。相邻的表单和默认值无法回答命名空间和所有权问题。

另一个安全范围限制来自一个单独的安全限制边界,即 UID 零主机影响取决于此处未读取的命名空间配置。将此运行时身份边界视为排除项。更喜欢准确的用户挂载功能,而不是对命名空间和所有权的猜测。

要点:决定您的进程是谁 - 并检查转换器的输出包括 user: 在您启动堆栈之前

要点:决定您的进程是谁 - 并检查转换器的输出包括 user: 在您启动堆栈之前。审核运行时身份作为源选项、模型字段、用户安装功能行和警告。在检查命名空间和所有权之前删除机密。

最后,安全要点来源确认了一个单独的安全决策边界是 --user 成为用户,并且引用数字 UID:GID 文本。严格关闭运行时身份:用户挂载功能是候选者;不能保证命名空间、所有权和 shell 等效性。