You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于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(也就是宿主机的根目录),然后启动sh shell

而Docker容器默认是以root用户运行的(除非你特意在run命令里用--user指定其他用户),所以当你切换到宿主机的根目录后,这个shell就拥有了宿主机的root权限——相当于直接在宿主机上以root身份操作了,自然就能“简单变成root”。

备注:内容来源于stack exchange,提问作者Onyz

火山引擎 最新活动