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