关于Docker组ID 999的含义及Docker提权命令的疑问
关于Docker组ID 999的含义及Docker提权命令的疑问
嗨,我来帮你拆解这两个问题:
一、999(docker)是什么意思?
Linux系统里每个用户组都会被分配一个唯一的组ID(GID),这里的999就是Docker服务安装时,系统默认给docker用户组分配的GID。这个数字是系统自动选择的——通常这类非登录的服务组会使用预留的ID段,999是很多发行版默认给Docker组的数值,不过也有可能在某些系统上是别的数字(比如1001),核心是这个组是用来管理Docker权限的。
加入docker组的用户不需要加sudo就能执行Docker命令,因为Docker守护进程(dockerd)在启动时会设置权限,允许这个组的用户和它进行交互,不用每次都输入管理员密码。
二、为什么docker run -v /:/mnt --rm -it alpine chroot /mnt sh能让你变成root?
咱们拆解一下这个命令的每部分,你就明白为啥它能提权了:
docker run:启动一个新的Docker容器-v /:/mnt:这是关键!它把宿主机的**根目录/**挂载到了容器内部的/mnt目录下,相当于容器直接拥有了宿主机整个文件系统的访问权限--rm:容器退出后自动删除,避免留下无用的容器文件-it:分配一个交互式的终端,让你能和容器里的shell对话alpine:指定用轻量的Alpine Linux镜像来运行容器(也可以用其他镜像,比如ubuntu)chroot /mnt sh:在容器内部执行chroot命令,把当前shell的根目录切换到/mnt(也就是宿主机的根目录),然后启动shshell
而Docker容器默认是以root用户运行的(除非你特意在run命令里用--user指定其他用户),所以当你切换到宿主机的根目录后,这个shell就拥有了宿主机的root权限——相当于直接在宿主机上以root身份操作了,自然就能“简单变成root”。
备注:内容来源于stack exchange,提问作者Onyz




