以码头工人为例。安装 docker 后,我们可以选择对每个 docker 命令使用 sudo,或者将用户添加到“docker”组,该用户可以运行所有 docker 命令。(我理解将用户添加到 docker 组的严重安全隐患,但请忽略这方面,因为它与我的问题无关)。
因此,一旦将用户添加到“docker”组,用户就可以直接运行所有 docker 命令,例如“docker ps”、“docker images”等(无需 sudo)。通过 docker 进程,用户可以读取和写入显然属于 root 的文件,例如 /var/lib/docker & /etc/docker/daemon.json 等。
仅仅通过将用户添加到组中,这一切怎么可能实现?在哪里可以查看/修改组成员允许和禁止的内容?
该
docker
命令本身并没有真正做任何事情。它唯一的工作是联系“dockerd”系统服务(守护进程)并要求它代表您执行操作。而且由于该服务以“root”用户身份运行,它可以访问允许 root 访问的任何文件,然后将结果返回给您。没有中央位置或列表允许基于组成员资格进行此类操作;每个服务都自行执行此操作,并且通常略有不同。例如,Docker 使用组来允许您连接到守护进程 at
/run/docker.sock
(注意这个套接字如何只授予 root:docker 权限)。其他一些服务允许任何人连接,但在收到命令时验证组成员身份。(例如,
systemctl
除了将您的命令转发给 systemd 之外什么也不做——而且 systemd 允许非特权用户发出一些命令,但拒绝其他命令。)