Docker ID 999 是什么意思?

Docker ID 999 是什么意思?

docker 上的 999 是什么意思:

michael@the-marketplace:/opt/backups$ id
uid=1002(michael) gid=1002(michael) groups=1002(michael),999(docker)

为什么我可以通过运行(source)轻松成为roothttps://gtfobins.github.io/gtfobins/docker/):

docker run -v /:/mnt --rm -it alpine chroot /mnt sh

答案1

docker 上的 999 是什么意思:

几乎没有什么。这只是分配给该组的一个 ID。

尽管事实上少于 1000表示它是为软件包创建的“系统”组(而不是您创建的组),但尽管这有时会对用户(UID)产生技术差异,但对于组来说,这纯粹是组织上的。

当您使用groupadd(或当操作系统软件包管理器在安装软件包后使用它时)时,新创建的“系统”组会获得从 999 开始的 GID,而非系统组会获得从 1000 开始的 GID。在您的例子中,999 恰好是系统范围内第一个空闲的 GID。

运行 id 命令时出现的所有数字到底代表什么意思?

也没什么,它们只是分配给每个用户帐户和每个组的唯一 ID。在内部,操作系统使用整数 UID/GID,因为它们比可变长度名称更方便存储。(ID 到名称的映射通常存储在/etc/passwd和中/etc/shadow。)

为什么我可以通过运行来轻松成为root

Linux 容器(Docker 创建的容器)最初根本没有任何 UID 隔离:每个容器的 UID 0(根)与主机上的 UID 0 相同。虽然后来 UID 隔离可用,但 Docker 的架构早于此。

从技术上讲,使用 Docker,容器中的 root从未停止在主机上是 root —— 只是主机文件超出了容器的可访问范围;没有有效的路径可以超出指定为容器自己的目录/。容器可以访问的唯一路径是 Docker “绑定”到容器中的路径。

但是如果你明确要求 Docker 绑定主机文件系统的某个部分,那么容器就可以访问该部分;如果你要求 Docker 绑定整个主机/,那么容器就可以访问整个主机。

(更简单的是,由于缺乏 UID 分离,只有 root 是有能力的首先设置一个容器 – 因此docker命令必须通过与始终以 root 身份运行的 dockerd 守护进程通信来工作。这意味着任何允许访问 dockerd 的用户都可以请求它以 root 权限执行操作。)

更现代的容器运行时隔离用户(使用最近添加的“用户命名空间”);例如使用 systemd-nspawn,容器 UID 不再与主机 UID 匹配。

答案2

这是组的数字标识符docker。对于 ID=1002 的组也是如此michael(不要将其与用户 ID 混淆,因为在这种情况下它们是相同的)。该数字不代表特定的东西,只是一个数字,将存储在文件或目录的元信息中(或添加到用户记录中)

相关内容