• 建一座生长因子神秘王国——温州大学校长李校堃科研创新纪实 2019-05-23
  • 与希腊“和解” 马其顿将改国名为“北马其顿” 2019-05-23
  • 或许正相反,朝鲜就是例证 2019-05-15
  • 社会主义社会按劳分配是建立在公有制和私有制并存基础上的,共产主义社会按需分配是建立在公有制基础上的,所有制基础不同,其分配形式也就不同。所谓“共产主义... 2019-05-14
  • 曾祖父、曾祖母、祖父、祖母、父亲、母亲、重孙。一家7人,如果两家联姻,两家共十四人,请问:“看着就想笑”你那15人是咋算出来的? 2019-05-14
  • 当下世人皆知:美帝霸权就是搅动亚洲乃至世界混乱之源,更是整个世界和平稳定的最大威胁。 2019-05-12
  • 牵手中东,日照谱写“开放活市”新篇章 2019-05-12
  • 如何缓解眼睛疲劳 吃什么水果让眼睛明亮-美食资讯 2019-05-09
  • Li Keqiang nimmt an Pressekonferenz nach Abschluss der ersten Tagung des 13. NVK teil 2019-05-01
  • 端午假期 重庆旅游业红红火火 2019-04-27
  • 广州市第十五届人大常委会第十四次会议第一次全体会议 2019-04-22
  • 端午小长假杭州接待游客454.8万人次 9成民宿预订一空 2019-04-21
  • 法国巴黎发生人质劫持事件 2019-04-21
  • 中国保险行业协会获第十二届人民企业社会责任奖年度扶贫奖 2019-04-18
  • 3岁男童爬窗走失 民警帮忙找家人 2019-04-18
  • 山东快乐扑克3开奖结果:Docker 运行时的用户与组管理的方法

    文章TAG:docker 用户 组管理
    时间:2018-11-14来源/作者:Yujiaao 编辑:源码库 文章热度:

    山西十一选五遗漏10 www.fqjb.net 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:latest
    RUN apk add --update htop && rm -rf /var/cache/apk/*
    CMD ["htop"]
    $ docker build -t myhtop . #构建镜像
    $ docker run -it --rm --pid=host myhtop #与 host 进程运行于同一个命名空间

    Docker,用户,组管理

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

    docker run --user=demo_user:group1 --group-add group2 <image_name> <command>

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

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

    docker 指定用户的方式

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

    USER <user>[:<group>] #或
    USER <UID>[:<GID>]

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

    $ docker run busybox cat /etc/passwd
    root:x:0:0:root:/root:/bin/sh
    ...
    www-data:x:33:33:www-data:/var/www:/bin/false
    nobody:x:65534:65534:nobody:/home:/bin/false
    
    $ docker run --user www-data busybox id
    uid=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 8
    drwxr-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 8
    drwxr-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'? y
    total 4
    drwxr-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 也可以
    ...

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


    注:相关教程知识阅读请移步到服务器教程频道。
    相关服务器教程
    热门标签

    服务器教程Rss订阅服务器教程搜索

  • 建一座生长因子神秘王国——温州大学校长李校堃科研创新纪实 2019-05-23
  • 与希腊“和解” 马其顿将改国名为“北马其顿” 2019-05-23
  • 或许正相反,朝鲜就是例证 2019-05-15
  • 社会主义社会按劳分配是建立在公有制和私有制并存基础上的,共产主义社会按需分配是建立在公有制基础上的,所有制基础不同,其分配形式也就不同。所谓“共产主义... 2019-05-14
  • 曾祖父、曾祖母、祖父、祖母、父亲、母亲、重孙。一家7人,如果两家联姻,两家共十四人,请问:“看着就想笑”你那15人是咋算出来的? 2019-05-14
  • 当下世人皆知:美帝霸权就是搅动亚洲乃至世界混乱之源,更是整个世界和平稳定的最大威胁。 2019-05-12
  • 牵手中东,日照谱写“开放活市”新篇章 2019-05-12
  • 如何缓解眼睛疲劳 吃什么水果让眼睛明亮-美食资讯 2019-05-09
  • Li Keqiang nimmt an Pressekonferenz nach Abschluss der ersten Tagung des 13. NVK teil 2019-05-01
  • 端午假期 重庆旅游业红红火火 2019-04-27
  • 广州市第十五届人大常委会第十四次会议第一次全体会议 2019-04-22
  • 端午小长假杭州接待游客454.8万人次 9成民宿预订一空 2019-04-21
  • 法国巴黎发生人质劫持事件 2019-04-21
  • 中国保险行业协会获第十二届人民企业社会责任奖年度扶贫奖 2019-04-18
  • 3岁男童爬窗走失 民警帮忙找家人 2019-04-18