千家信息网

Docker 运行时的用户与组管理的方法

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,docker 以进程为核心, 对系统资源进行隔离使用的管理工具. 隔离是通过 cgroups (control groups 进程控制组) 这个操作系统内核特性来实现的. 包括用户的参数限制、 帐户管
千家信息网最后更新 2025年12月01日Docker 运行时的用户与组管理的方法

docker 以进程为核心, 对系统资源进行隔离使用的管理工具. 隔离是通过 cgroups (control groups 进程控制组) 这个操作系统内核特性来实现的. 包括用户的参数限制、 帐户管理、 资源(CPU,内存,磁盘I/O,网络)使用的隔离等. docker 在运行时可以为容器内进程指定用户和组. 没有指定时默认是 root .但因为隔离的原因, 并不会因此丧失安全性. 传统上, 特定的应用都以特定的用户来运行, 在容器内进程指定运行程序的所属用户或组并不需要在 host 中事先创建.

进程控制组cgroups主要可能做以下几件事:

  • 资源限制 组可以设置为不超过配置的内存限制, 其中还包括文件系统缓存
  • 优先级 某些组可能会获得更大的 CPU 利用率份额或磁盘 i/o 吞吐量
  • 帐号会计 度量组的资源使用情况, 例如, 用于计费的目的
  • 控制 冻结组进程, 设置进程的检查点和重新启动

与 cgroups(控制进程组) 相关联的概念是 namespaces (命令空间).

命名空间主要有六种名称隔离类型:

  • PID 命名空间为进程标识符 (PIDs) 的分配、进程列表及其详细信息提供了隔离。

虽然新命名空间与其他同级对象隔离, 但其 "父 " 命名空间中的进程仍会看到子命名空间中的所有进程 (尽管具有不同的 PID 编号)。

  • 网络命名空间隔离网络接口控制器 (物理或虚拟)、iptables 防火墙规则、路由表等。网络命名空间可以使用 "veth " 虚拟以太网设备彼此连接。
  • UTS 命名空间允许更改主机名。
  • mount(装载)命名空间允许创建不同的文件系统布局, 或使某些装入点为只读。
  • IPC 命名空间将 System V 的进程间通信通过命名空间隔离开来。
  • 用户命名空间将用户 id 通过命名空间隔离开来。

普通用户 docker run 容器内 root

如 busybox, 可以在 docker 容器中以 root 身份运行软件. 但 docker 容器本身仍以普通用户执行.

考虑这样的情况

echo test | docker run -i busybox cat

前面的是当前用户当前系统进程,后面的转入容器内用户和容器内进程运行.

当在容器内 PID 以1运行时, Linux 会忽略信号系统的默认行为, 进程收到 SIGINT 或 SIGTERM 信号时不会退出, 除非你的进程为此编码. 可以通过 Dockerfile STOPSIGNAL signal指定停止信号.

如:

STOPSIGNAL SIGKILL

创建一个 Dockerfile

FROM alpine:latestRUN apk add --update htop && rm -rf /var/cache/apk/*CMD ["htop"]
$ docker build -t myhtop . #构建镜像$ docker run -it --rm --pid=host myhtop #与 host 进程运行于同一个命名空间

普通用户 docker run 容器内指定不同用户 demo_user

docker run --user=demo_user:group1 --group-add group2  

这里的 demo_user 和 group1(主组), group2(副组) 不是主机的用户和组, 而是创建容器镜像时创建的.

当Dockerfile里没有通过USER指令指定运行用户时, 容器会以 root 用户运行进程.

docker 指定用户的方式

Dockerfile 中指定用户运行特定的命令

USER [:] #或USER [:]

docker run -u(--user)[user:group] 或 --group-add 参数方式

$ docker run busybox cat /etc/passwdroot:x:0:0:root:/root:/bin/sh...www-data:x:33:33:www-data:/var/www:/bin/falsenobody:x:65534:65534:nobody:/home:/bin/false$ docker run --user www-data busybox iduid=33(www-data) gid=33(www-data)

docker 容器内用户的权限

对比以下情况, host 中普通用户创建的文件, 到 docker 容器下映射成了 root 用户属主:

$ mkdir test && touch test/a.txt && cd test$ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox  /bin/sh -c 'ls -al /mnt/*' -rw-r--r--  1 root   root       0 Oct 22 15:36 /mnt/a.txt

而在容器内卷目录中创建的文件, 则对应 host 当前执行 docker 的用户:

$ docker run --rm -it -v `pwd`:/mnt -w /mnt busybox  /bin/sh -c 'touch b.txt'$ ls -al-rw-r--r-- 1 xwx staff  0 10 22 23:36 a.txt-rw-r--r-- 1 xwx staff  0 10 22 23:54 b.txt

docker volume 文件访问权限

创建和使用卷, docker 不支持相对路径的挂载点, 多个容器可以同时使用同一个卷.

$ docker volume create hello #创建卷hello$ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'touch /world/a.txt && ls -al'  #容器内建个文件total 8drwxr-xr-x  2 root   root     4096 Oct 22 16:38 .drwxr-xr-x  1 root   root     4096 Oct 22 16:38 ..-rw-r--r--  1 root   root       0 Oct 22 16:38 a.txt$ docker run -it --rm -v hello:/world -w /world busybox /bin/sh -c 'rm /world/a.txt && ls -al' #从容器内删除total 8drwxr-xr-x  2 root   root     4096 Oct 22 16:38 .drwxr-xr-x  1 root   root     4096 Oct 22 16:38 ..

外部创建文件, 容器内指定用户去删除

$ touch c.txt && sudo chmod root:wheel c.txt$ docker run -u 100 -it --rm -v `pwd`:/world -w /world busybox /bin/sh -c 'rm /world/c.txt && ls -al'

实际是可以删除的

rm: remove '/world/c.txt'? ytotal 4drwxr-xr-x  4 100   root      128 Oct 23 16:09 .drwxr-xr-x  1 root   root     4096 Oct 23 16:09 ..-rw-r--r--  1 100   root       0 Oct 22 15:36 a.txt-rw-r--r--  1 100   root       0 Oct 22 15:54 b.txt

docker 普通用户的1024以下端口权限

 $ docker run -u 100 -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80'nc: bind: Permission denied #用户id 100 时, 不能打开80端口 $ docker run -u 100 -it --rm -p 70:8800 busybox /bin/sh -c 'nc -l -p 8800' #容器端口大于1024时则可以... $ docker run -it --rm -p 70:80 busybox /bin/sh -c 'nc -l -p 80' #容器内是 root 也可以...

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

用户 容器 进程 空间 运行 隔离 文件 系统 普通 控制 资源 不同 信号 情况 权限 端口 网络 限制 管理 主机 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南网络安全刘楠 spl 语言 数据库 国产 我省网络安全知识竞赛 太阳红外辐射数据库 镇政府网络安全周宣传工作推进会 关于军队网络安全的演讲稿 工业园区创新软件开发品质保障 网络安全和我的作文三年级的 网络安全红队平台 在校软件开发总结报告 营销推广个性化软件开发支持 查询数据库中所有某一个姓的员工 国际服没有为您所在的服务器服务 支付宝数据库技术发展 网络安全宣传周主办单位 稳定性好的服务器安全防护 中国移动网络技术类工资 蝰蛇网络安全实验室是干嘛的 服务器流量控制策略 网络安全通讯稿 黄浦区现代软件开发不二之选 搞软件开发的下岗后能做点儿什么 部队网络安全网讯 服务器运维工作有前景吗 赢德软件开发 东莞地产软件开发热线 互联网金融科技与产业 我国为保护网络安全的措施 河南前端软件开发费用是多少 ai合成网络安全自主可控
0